Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třída okna je podporována procedurou okna. Vaše aplikace může zaregistrovat třídu okna pomocí RegisterClassA nebo RegisterClassW. Nové aplikace by obvykle měly používat RegisterClassW.
Pokud aplikace zaregistruje třídu okna pomocí RegisterClassA, funkce informuje operační systém, že okna vytvořené třídy očekávají zprávy s textovými nebo znakovými parametry, které používají znakovou stránku Systému Windows (ANSI) znakovou sadu. Registrace pomocí RegisterClassW umožňuje aplikaci požadovat, aby operační systém předal textové parametry zpráv jako Unicode. Funkce IsWindowUnicode umožňuje aplikaci dotazovat povahu každého okna.
Následující příklad ukazuje, jak zaregistrovat třídu okna znakové stránky systému Windows a třídu okna Unicode a jak psát procedury okna pro oba případy. Pro účely tohoto příkladu se zobrazí všechny funkce a struktury s konkrétními datovými typy "A" (ANSI) nebo "W" (široké, Unicode). Pomocí technik vysvětlených v Použití obecných datových typůmůžete alternativně napsat tento příklad pro použití obecných datových typů, aby bylo možné ho zkompilovat tak, aby používal buď znakové stránky Systému Windows, nebo Unicode, v závislosti na tom, zda je definována "UNICODE".
// 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);
Následující příklad ukazuje rozdíl mezi zpracováním zprávy WM_CHAR v okně znakové stránky systému Windows a procedurou okna Unicode.
// "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;
}
Veškerý text ve zprávách přijatých AnsiWndProc se skládá ze znaků znakové stránky windows. Veškerý text ve zprávách přijatých UniWndProc se skládá z znaků Unicode.
Související témata