메세지는 사용자나 시스템의 특정 이벤트(내부적인 동작)에 의해 발생하는 변화의 정보를 담은 구조체이다. Ex) 키보드의 입력, 마우스를 눌렀을 때, 마우스를 누르고 있을 때, 마우스를 뗏을 때, 윈도우를 축소시켰을 때 등등.... 윈도우는 발생하는 메세지를 쌓아서 먼저 들어온 순서대로 처리하는데, 이를 메세지 큐라고 한다.윈도우는 위 과정을 거치며 쌓인 메세지 큐를 처리하는 과정을 반복하게 되는데, 이를 메세지 루프라고 한다. 발생하는 메세지의 종류는 아래에서 다룰 윈도우 프로시저에서 볼 수 있다.
(BOOL) GetMessage(LPMSG lpMsg, HWNDhWnd, UINTwMsgFilterMin, UINTwMsgFilterMax) : 메세지에 WM_QUIT를 받아오면 false를 반환하고 그 외의 메세지는 true를 반환한다. 메세지 큐에 메세지가 발생할 때 까지 대기(블러킹)한다.
WinMain함수는 특정 이벤트를 통해 발생한 메세지를 메세지 루프를 통해 받고 큐에 저장한다. WndProc(윈도우 프로시저)는 위와 같은 메세지큐에 저장된 메세지를 처리하기 위한 메세지 처리 전용 함수이다. 윈도우 프로시저는 사용자가 호출할 수 없고 윈도우만이 호출할 수 있는데, 이러한 함수를 콜백 함수(CallBack Function)이라고 한다. 아래는 윈도우 프로시저 함수에 대한 문법 및 매개변수이다.
(LRESULT)CALLBACKWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) : CALLBACK은 함수 호출 규약(Calling Convention)으로, 생략해도 컴파일 할 때 자동으로 선택된다. 하지만 예외적으로 호환성을 위해 명시적으로 호출 규약을 지정해야 할 때가 있을수도 있다. wParam과 lParam은 부가적인 메세지를 받아온다. 예를 들면 키 입력에 관한 메세지를 받았을 때, 키보드의 무슨 값을 입력 받았는지, 마우스의 x, y좌표는 몇인지 등등의 정보이다.
출력에 필요한 모든 정보를 가진 데이터 구조체이다. 주로 그래픽 렌더링, 텍스트 출력, 비트맵 조작 등처럼 화면의 출력을 할 때 사용한다. DC는 할당받는 순간 메모리를 차지하기 때문에, 동적할당과 비슷하게 다 쓰고 난 후에는 메모리를 직접 해제해야 메모리 누수가 일어나지 않는다.
HDCGetDC(HWNDhWnd) : 지정한 창(윈도우)에 대한 DC핸들을 반환받는다.
hWnd
DC핸들을 얻어 올 윈도우 핸들을 지정해준다. 0(NULL)을 넣어주면 전체 화면에 대한 핸들이 된다.
단색 브러시입니다. 기본 색상은 흰색입니다. SetDCBrushColor 함수를 사용하여 색을 변경할 수 있습니다.
GRAY_BRUSH
회색 브러시.
HOLLOW_BRUSH
속이 빈 브러시(NULL_BRUSH에 해당).
LTGRAY_BRUSH
밝은 회색 브러시입니다.
NULL_BRUSH
Null 브러시(HOLLOW_BRUSH에 해당).
WHITE_BRUSH
화이트 브러시.
BLACK_PEN
검은 펜.
DC_PEN
단색 펜 색상입니다. 기본 색상은 검은색입니다. SetDCPenColor 함수를 사용하여 색을 변경할 수 있습니다.
NULL_PEN
Null 펜. null 펜은 아무 것도 그리지 않습니다.
WHITE_PEN
흰색 펜.
ANSI_FIXED_FONT
Windows 고정 피치(고정 폭) 시스템 글꼴입니다.
ANSI_VAR_FONT
Windows 가변 피치(비례 공간) 시스템 글꼴입니다.
DEVICE_DEFAULT_FONT
장치 종속 글꼴입니다.
DEFAULT_GUI_FONT
메뉴 및 대화 상자와 같은 사용자 인터페이스 개체의 기본 글꼴입니다. 대화 상자와 창에서 사용하는 글꼴을 얻기 위해 DEFAULT_GUI_FONT 또는 SYSTEM_FONT를 사용하지 않는 것이 좋습니다. 기본 글꼴은 Tahoma입니다.
OEM_FIXED_FONT
OEM(주문자 상표 부착 방식) 종속 고정 피치(고정 폭) 글꼴입니다.
SYSTEM_FONT
시스템 글꼴. 기본적으로 시스템은 시스템 글꼴을 사용하여 메뉴, 대화 상자 컨트롤 및 텍스트를 그립니다. 대화 상자와 창에서 사용하는 글꼴을 얻기 위해 DEFAULT_GUI_FONT 또는 SYSTEM_FONT를 사용하지 않는 것이 좋습니다. 자세한 내용은 설명 섹션을 참조하세요.기본 시스템 글꼴은 Tahoma입니다.
SYSTEM_FIXED_FONT
고정 피치(고정 폭) 시스템 글꼴입니다. 이 스톡 개체는 3.0 이전의 16비트 Windows 버전과의 호환성을 위해서만 제공됩니다.
DEFAULT_PALETTE
기본 팔레트입니다. 이 색상표는 시스템 색상표의 정적 색으로 구성됩니다.
(HGDIOBJ) SelectObject(HDChdc,HGDIOBJh) : hdc에 저장된 GDI_Object의 핸들 값을 h로 바꾼다. 이전 GDI핸들 값을 반환하기 때문에 디폴트 값을 저장하기 위해 대체로 호출과 동시에 변수에 이전 GDI핸들 값을 저장한다.