typedef
struct
tagWNDCLASSW
{
UINT
style;
WNDPROC
lpfnWndProc;
int
cbClsExtra;
int
cbWndExtra;
HINSTANCE
hInstance;
HICON
hIcon;
HCURSOR
hCursor;
HBRUSH
hbrBackground;
LPCWSTR
lpszMenuName;
LPCWSTR
lpszClassName;
} |
UINT
style;
윈도우 스타일, 즉 윈도우가 어떤 형태를 가질 것인가를 지정한다.
가장 많이 사용되는 값은 CS_HEADRAW|CS_VREDRAW이다.
특이하게도 OR 연산자를 이용하는 기법을 사용한다. (고성능, 고효율)
WNDPROC
lpfnWndProc;
윈도우의 메시지 처리 함수를 지정한다. – 함수 포인터
메시지가 발생할 때 마다 이 멤버가 지정한 함수가 호출되며 모든 메시지를 처리하게 된다.
WndProc을 대입하게 된다.
int
cbClsExtra;
int
cbWndExtra;
일종의 예약 영역으로서 아주 특수한 목적에 사용되는 여분의 공간이다.
예약 영역을 사용하지 않을 때는 0으로 지정한다.
HINSTANCE
hInstance;
이 윈도우 클래스를 등록하는 프로그램의 번호(핸들)이며 WinMain의 인수로 전달된 hInstance값을 그대로 대입하게 된다.
핸들은 운영체제가 임의로 생성하는 값으로 프로그래머가 특정한 값을 생각할 필요는 없다.
HICON
hIcon;
HCURSOR
hCursor;
이 윈도우가 사용할 마우스 커서와 아이콘을 지정하는 변수이다.
LoadCursor함수와 LoadIcon함수를 이용하여 이 멤버에 대입하면 된다.
HBRUSH
hbrBackground;
윈도우의 배경 색상을 채색할 브러시를 지정하는 멤버이다.
GetStockObject 함수를 이용하여 윈도우에서 제공하는 브러시를 지정하거나 COLOR_WINDOW같은 시스템 색상을 지정할 수도 있다.
LPCWSTR
lpszMenuName;
이 프로그램(윈도우)이 사용할 메뉴를 지정한다.
메뉴는 리소스 에디터에 의해 별도로 만들어져 링크시 같이 합쳐지며 메뉴를 사용하지 않을 경우 NULL을 대입한다.
LPCWSTR
lpszClassName;
윈도우 클래스의 이름을 문자열로 정의하는 멤버.
여기서 지정한 이름은 CreteWindow함수에 전달되며 CreteWIndow 함수는 윈도우 클래스에서 정의한 특성 값을 참조하여 윈도우를 만든다.
WNDCLASS는 WinUser.h에 정의되어 있다.
WNDCLASS는 프로젝트가 유니코드이거나 멀티바이트일 때 다르게 정의된다.
#ifdef
UNICODE
typedef
WNDCLASSW
WNDCLASS;
typedef
PWNDCLASSW
PWNDCLASS;
typedef
NPWNDCLASSW
NPWNDCLASS;
typedef
LPWNDCLASSW
LPWNDCLASS;
#else
typedef
WNDCLASSA
WNDCLASS;
typedef
PWNDCLASSA
PWNDCLASS;
typedef
NPWNDCLASSA
NPWNDCLASS;
typedef
LPWNDCLASSA
LPWNDCLASS;
#endif
// UNICODE
WNDCLASSA 는 멀티바이트 Windows 응용프로그램에서 사용되며
WNDCLASSW는 유니코드 Windows 응용프로그램에서 사용된다.
두 클래스의 차이는 문자열을 LPCSTR 을 사용하느냐 아니면 LPCWSTR를 사용하느냐의 차이만 존재한다.