LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int i;
HBRUSH MyBrush,OldBrush;
HPEN MyPen, OldPen;
switch (iMessage) {
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
for (i=0;i<250;i+=5) {
MoveToEx(hdc,0,i,NULL);
LineTo(hdc,600,i);
}
// 빨간 펜 초록 브러시
MyBrush=CreateSolidBrush(RGB(0,255,0));
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
MyPen=CreatePen(PS_SOLID, 5, RGB(255,0,0));
OldPen=(HPEN)SelectObject(hdc, MyPen);
Ellipse(hdc,20,20,150,150);
// 빨간 펜 널 브러시
SelectObject(hdc,GetStockObject(NULL_BRUSH));
Ellipse(hdc,220,20,350,150);
// 널 펜 초록 브러시
SelectObject(hdc,MyBrush);
SelectObject(hdc,GetStockObject(NULL_PEN));
Ellipse(hdc,420,20,550,150);
DeleteObject(SelectObject(hdc, OldBrush)); // MyBrush 설정값이 리턴되어 삭제 함.
//DeleteObject(SelectObject(hdc, OldPen)); // (X) - 한빛미디어 예제 코드에서는 다음과 같이 나와있으나, SelectObject(hdc, OldPen)); 에서 리턴 되는 값은 NULL_PEN 이다. NULL_PEN은 stockObject 이므로 삭제 X.
SelectObject(hdc, OldPen); // (0) <- 다음 코드 처럼 변경해야 함.
DeleteObject(hdc, MyPen); // ** MyPen 도 생성한 함수이므로 삭제
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
} |