이제 마지막 부분을 확인해보겠습니다.
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch(uMsg) { case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 100, 100, "Hellow Wordl!", 13); EndPaint(hWnd , &ps); break; } case WM_DESTROY: { PostQuitMessage(0); break; } } return DefWindowProc( hwnd , uMsg , wParam , lParam ); } |
LRESULT CALLBACK WindowProc(...)
: 위에 간략하게 정의되어 있는데 조금 더 자세한 설명을 하자면 프로세스 메세지를 윈도우로
전달해주는 함수입니다. WNDPROC 타입으로 정의, 콜백 함수의 포인터로 정의되어 있습니다.
LRESULT CALLBACK WindowProc( _In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam ); |
매게 변수 | 정의 |
hwnd | 윈도우의 핸들 값입니다. |
uMsg | 메세지 입니다. (시스템에서 제공하는 메세지 리스트) |
wParam | 메세지의 추가적인 정보 입니다. 자세한 정보는 uMsg에 값에 따라 달라집니다. |
lParam | 메세지의 추가적인 정보 입니다. 자세한 정보는 uMsg에 값에 따라 달라집니다. |
PAINTSTRUCT ps;
: 응용 프로그램을 위한 정보 구조체입니다.
해당 정보를 통해 응용프로그램 윈도우 사용자의 클라이언트 영역에 페인트를 사용할 수 있게 합니다.
typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32]; } PAINTSTRUCT, *PPAINTSTRUCT; |
해당 구조체 역시 MSG와 동일하게 ps란 PAINTSTRUCT 구조체만 선언할 뿐 해당 내용을 자세하게
재정의하지 않습니다.
매게 변수 | 의미 |
hdc | 해당 디스플레이에서 페인트를 사용할 핸들 값입니다. |
fErase | 배경색체를 삭제해야 하는지 여부를 나타냅니다. 응용 프로그램이 배경을 삭제해야 할 경우 0이 아닌 값이어야 합니다. 자세한 부분은 WNDCLASS 구조체의 hbrBackground 멤버를 참고하십시오. |
rcPaint | RECT 구조체를 나타냅니다. 클라이언트 영역중 좌상단 및 우하단의 사각형 모서리 지정값. |
fRestore | 시스템에 의해 내부적으로 사용되는 예약 값입니다. |
fIncUpdate | 시스템에 의해 내부적으로 사용되는 예약 값입니다. |
rgbReserved[32] | 시스템에 의해 내부적으로 사용되는 예약 값입니다. |
HDC hdc;
: HDC (Handle to a Device Context)의 값을 지정합니다.
윈도우에서 그리기 처리를 하려면 GDI(Graphics Device Interface) 함수를 사용해야 하는데 DC를 참조
즉, 윈도우 화면처리와 그래픽을 담당하는 핸들값입니다.
hdc = BeginPaint(hWnd, &ps);
: 윈도우 환경에서 화면이나 프린터로 출력을 하려면 DC(Device Context)를 먼저 구해야 합니다.
WM_PAINT 메세지에서 DC를 구하는 방법으로는 BeginPaint, EndPaint 함수쌍을 이용해서 DC를 구합니다.
(이 외로는 GetDC, ReleaseDC를 사용 할 수 있습니다.)
TextOut(hdc, 100, 100, "Hellow Wordl!", 13);
: 화면에 Hellow Word!를 출력합니다.
위 BeginPaint를 통해 DC를 구하였기 때문에 해당 함수 인자로 전달되었으며, 100,100 좌표에
문자열과 크기가 지정되었습니다.
크기의 경우 위에 별도로 string이 있다면 해당 문자열의 길이를 넣어도 무방합니다.
return DefWindowProc( hwnd , uMsg , wParam , lParam );
: WindowProc 함수의 리턴값으로 DefWindowProc 함수의 값을 반환합니다.
WindowProc 함수의 경우 메세지 처리후에 반드시 0을 리턴해주어야 합니다.
DefWindowProc값이 지정되었을 경우 응용 프로그램이 처리를 하지 않는 윈도우 메시지에 대한 기본처리를
하게 됩니다. 즉, 지정된 메세지 WM_PAINT, WM_PAINT 를 제외한 나머지 메세지를 DefWindowProc
함수를 통해 처리하게 되며, 해당 함수가 메세지를 처리했을 경우 이 함수의 값을 WindowProc 함수가
다시 한번 리턴해 주어야 합니다.
LRESULT WINAPI DefWindowProc( _In_ HWND hWnd, _In_ UINT Msg, _In_ WPARAM wParam, _In_ LPARAM lParam ); |
매게 변수 |
의미 |
hWnd |
메세지를 받은 윈도우 프로시져에 대한 핸들 |
Msg |
메세지 값 |
wParam |
메세지의 추가정보 자세한 정보는 Msg에 값에 따라 달라집니다. |
lParam |
메세지의 추가정보 자세한 정보는uMsg에 값에 따라 달라집니다. |
이것으로 윈도우 출력 함수에 대해서 모두 알아보았습니다.
'프로그래밍 관련 > Win API' 카테고리의 다른 글
WIndows API - #6. API 문자열 출력 함수들에 관하여.. (0) | 2015.08.24 |
---|---|
WIndows API - #5. 윈도우 문자열 (0) | 2015.08.24 |
WIndows API - #4. 윈도우창 출력 함수 자세히보기(1) (0) | 2015.08.23 |
WIndows API - #3. 윈도우창에 Hello World 출력하기(2) (0) | 2015.08.21 |
WIndows API - #3. 윈도우창에 Hello World 출력하기(1) (4) | 2015.08.21 |