WinMain 함수에서 하는 가장 중요한 일은 메인 윈도우를 만드는 일인데, 윈도우가 있어야 사용자로부터 입력을 받을 수
있고 작업한 결과를 출력할 수도 있기 때문이다.
윈도우를 만들려면 윈도우 클래스를 먼저 등록한 후 CreateWindow 함수를 호출해야 한다.
윈도우 클래스는 만들어질 윈도우의 여러 가지 특성을 정의하는 구조체이며 모든 윈도우는 윈도우 클래스의 정보를 기반
으로 하여 만들어진다.
윈도우 클래스는 windows.h에 다음과 같이 정의되어 있는 구조체이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | typedef struct tagWNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; LPCSTR lpszClassName; } WNDCLASS; | cs |
각 멤버의 의미는 다음과 같다.
style : 윈도우가 어떤 형태를 가질 것인가를 지정하는 멤버이다. 가장 많이 사용 하는 값은 CS_HREDRAW와 CS_VREDRAW
이다. 이 두 값을 OR 연산자( | )로 연결하여 사용한다. 이 스타일은 윈도우의 수직 또는 수평 크기가 변할 경우 윈도우를
다시 그린다는 뜻이다.
lpfnWndproc : 윈도우의 메시지 처리 함수를 지정한다. 메시지가 발생할 때마다 여기서 지정한 함수가 호출되며 이 함수
가 모든 메시지를 처리한다.
cbClsExtra, cbWndExtra : 일종의 예약 영역이다. 윈도우즈가 내부적으로 사용하며 아주 특수한 목적에 사용되는 여분의
공간이다. 예약 영역을 사용하지 않을 경우는 0으로 지정한다.
hInstance : 이 윈도우 클래스를 사용하는 프로그램의 번호이며 이 값은 WinMain의 인수로 전달된 hInstance값을 그대로
대입해주면 된다.
hIcon, hCursor : 이 윈도우가 사용할 마우스 커서와 최소화되었을 경우 출력될 아이콘을 지정한다. LoadCursor 함수와
LoadIcon 함수를 사용하여 지정한다.
hbrBackground : 윈도우의 배경 색상, 좀 더 정확하게는 배경 색상을 채색할 브러시를 지정하는 멤버이다.
BLACK_BRUSH, DKGRAY_BRUSH 등 다양하지만 일반적으로 WHIT_BRUSH가 많이 사용된다.
lpszMenuName : 프로그램이 사용할 메뉴를 지정한다. 메뉴는 프로그램 코드에서 만드는 것이 아니라 리소스 에디터에
의해 별도로 만들어진 후 링크시에 같이 합쳐진다. 메뉴를 사용하지 않을 경우 이 멤버에 NULL을 대입해 주면 된다.
lpszClassName : 윈도우 클래스의 이름을 정의한다. 여기서 지정한 이름은 CreateWindow 함수에 전달되어지며
CreateWindow 함수는 윈도우 클래스에서 정의한 특성값을 참조하여 윈도우를 만든다.
'Windows API' 카테고리의 다른 글
[API] WinMain에 대해서 (4) | 2017.03.10 |
---|