Partager via


Inscription de classes de fenêtre

Une classe de fenêtre est prise en charge par une procédure de fenêtre. Votre application peut inscrire une classe de fenêtre à l’aide de RegisterClassA ou de RegisterClassW. Les nouvelles applications doivent généralement utiliser RegisterClassW.

Si l’application inscrit la classe de fenêtre à l’aide de RegisterClassA, la fonction informe le système d’exploitation que les fenêtres de la classe créée attendent des messages avec du texte ou des paramètres de caractères pour utiliser une page de codes Windows (ANSI) jeu de caractères. L’inscription à l’aide de RegisterClassW permet à l’application de demander au système d’exploitation de transmettre des paramètres de texte de messages en tant que Unicode. La fonction IsWindowUnicode permet à une application d’interroger la nature de chaque fenêtre.

L’exemple suivant montre comment inscrire une classe de fenêtre de page de codes Windows et une classe de fenêtre Unicode et comment écrire les procédures de fenêtre pour les deux cas. Pour les besoins de cet exemple, toutes les fonctions et structures sont affichées avec les types de données « A » (ANSI) ou « W » (large, Unicode). À l’aide des techniques expliquées dans Utilisation de types de données génériques, vous pouvez également écrire cet exemple pour utiliser des types de données génériques, afin qu’il puisse être compilé pour utiliser des pages de code Windows ou Unicode, selon que « UNICODE » est défini.

// 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);

L’exemple suivant montre la différence entre la gestion du message WM_CHAR dans une procédure de fenêtre de page de codes Windows et une procédure de fenêtre 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;
}

Tous les messages reçus par AnsiWndProc sont composés de caractères de page de codes Windows. Tous les messages reçus par UniWndProc sont composés de caractères Unicode.

à l’aide des jeux de caractères Et Unicode