Delen via


Vensterklassen registreren

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.

Unicode- en tekensets gebruiken