창 클래스 등록
창 클래스는 창 프로시저에서 지원됩니다. 애플리케이션은 RegisterClassA 또는 RegisterClassW를 사용하여 창 클래스를 등록할 수 있습니다. 새 애플리케이션은 일반적으로 RegisterClassW를 사용해야 합니다.
애플리케이션이 RegisterClassA를 사용하여 창 클래스를 등록하는 경우 함수는 생성된 클래스의 창에 텍스트 또는 문자 매개 변수가 있는 메시지가 WINDOWS(ANSI) 코드 페이지 문자 집합을 사용할 것으로 예상한다는 것을 운영 체제에 알립니다. RegisterClassW를 사용하여 등록하면 애플리케이션이 메시지의 텍스트 매개 변수를 유니코드로 전달하도록 운영 체제에 요청할 수 있습니다. IsWindowUnicode 함수를 사용하면 애플리케이션이 각 창의 특성을 쿼리할 수 있습니다.
다음 예제에서는 Windows 코드 페이지 창 클래스 및 유니코드 창 클래스를 등록하는 방법과 두 경우 모두에 대한 창 프로시저를 작성하는 방법을 보여 줍니다. 이 예제의 목적을 위해 모든 함수 및 구조체는 특정 "A"(ANSI) 또는 "W"(와이드, 유니코드) 데이터 형식으로 표시됩니다. 제네릭 데이터 형식 사용에 설명된 기술을 사용하여 "UNICODE"가 정의되었는지 여부에 따라 Windows 코드 페이지 또는 유니코드를 사용하도록 컴파일할 수 있도록 이 예제를 작성하여 제네릭 데이터 형식을 사용할 수도 있습니다.
// Register a Windows code page window class.
WNDCLASSA AnsiWndCls;
AnsiWndCls.style = CS_DBLCLKS | CS_PARENTDC;
AnsiWndCls.lpfnWndProc = (WNDPROC)AnsiWndProc;
AnsiWndCls.cbClsExtra = 0;
AnsiWndCls.cbWndExtra = 0;
AnsiWndCls.hInstance = hInstance;
AnsiWndCls.hIcon = NULL;
AnsiWndCls.hCursor = LoadCursor(NULL, (LPTSTR)IDC_IBEAM);
AnsiWndCls.hbrBackground = NULL;
AnsiWndCls.lpszMenuName = NULL;
AnsiWndCls.lpszClassName = "TestAnsi";
RegisterClassA(&AnsiWndCls);
// Register a Unicode window class.
WNDCLASSW UnicodeWndCls;
UnicodeWndCls.style = CS_DBLCLKS | CS_PARENTDC;
UnicodeWndCls.lpfnWndProc = (WNDPROC)UniWndProc;
UnicodeWndCls.cbClsExtra = 0;
UnicodeWndCls.cbWndExtra = 0;
UnicodeWndCls.hInstance = hInstance;
UnicodeWndCls.hIcon = NULL;
UnicodeWndCls.hCursor = LoadCursor(NULL,(LPTSTR)IDC_IBEAM);
UnicodeWndCls.hbrBackground = NULL;
UnicodeWndCls.lpszMenuName = NULL;
UnicodeWndCls.lpszClassName = L"TestUnicode";
RegisterClassW(&UnicodeWndCls);
다음 예제에서는 Windows 코드 페이지 창 프로시저에서 WM_CHAR 메시지 처리와 유니코드 창 프로시저의 차이점을 보여 주세요.
// "ANSI" Window Procedure
LRESULT CALLBACK AnsiWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
// Dispatch the messages that can be received.
switch (message)
{
case WM_CHAR:
// wParam - the value of the key
// lParam - (not used in this example)
if (lstrcmpA("Q", (LPCSTR) wParam))
{
// ...
}
else
{
// ...
}
break;
// Process other messages.
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Unicode Window Procedure
LRESULT CALLBACK UniWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
// Dispatch the messages that can be received.
switch (message)
{
case WM_CHAR:
// wParam - the value of the key
// lParam - (not used in this example)
if (lstrcmpW(L"Q", (LPCWSTR) wParam))
{
// ...
}
else
{
// ...
}
break;
// Process other messages.
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
AnsiWndProc에서 받은 메시지의 모든 텍스트는 Windows 코드 페이지 문자로 구성됩니다. UniWndProc에서 받은 메시지의 모든 텍스트는 유니코드 문자로 구성됩니다.
관련 항목