본문 바로가기

Windows API

[API] Window Class란?

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