Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een vensterklasse wordt ondersteund door een vensterprocedure. Uw toepassing kan een vensterklasse registreren met behulp van RegisterClassA- of RegisterClassW-. Nieuwe toepassingen moeten doorgaans gebruikmaken van RegisterClassW-.
Als de toepassing de vensterklasse registreert met behulp van RegisterClassA, informeert de functie het besturingssysteem dat de vensters van de gemaakte klasse berichten met tekst- of tekenparameters verwachten voor het gebruik van een Windows-codepagina (ANSI) tekenset. Registratie met behulp van RegisterClassW- stelt de toepassing in staat om het besturingssysteem om tekstparameters van berichten door te geven als Unicode-. Met de functie IsWindowUnicode kan een toepassing een query uitvoeren op de aard van elk venster.
In het volgende voorbeeld ziet u hoe u een windows-codepaginavensterklasse en een Unicode-vensterklasse registreert en hoe u de vensterprocedures schrijft voor beide gevallen. Voor het doel van dit voorbeeld worden alle functies en structuren weergegeven met de specifieke gegevenstypen A (A) of W (wide, Unicode). Met behulp van de technieken die worden uitgelegd in Algemene gegevenstypengebruiken, kunt u dit voorbeeld ook schrijven om algemene gegevenstypen te gebruiken, zodat deze kunnen worden gecompileerd voor het gebruik van Windows-codepagina's of Unicode, afhankelijk van of UNICODE is gedefinieerd.
// 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);
In het volgende voorbeeld ziet u het verschil tussen het verwerken van het WM_CHAR bericht in een vensterprocedure voor windows-codepagina's en een Unicode-vensterprocedure.
// "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;
}
Alle tekst in berichten die zijn ontvangen door AnsiWndProc bestaat uit Windows-codepaginatekens. Alle tekst in berichten die zijn ontvangen door UniWndProc- bestaat uit Unicode-tekens.
Verwante onderwerpen