Partilhar via


Registrando classes de janela

Uma classe window é suportada por um procedimento window. Seu aplicativo pode registrar uma classe de janela usando RegisterClassA ou RegisterClassW. Novos aplicativos normalmente devem usar RegisterClassW.

Se o aplicativo registra a classe window usando RegisterClassA , a função informa ao sistema operacional que as janelas da classe criada esperam que mensagens com parâmetros de texto ou caractere usem uma página de código Windows (ANSI) conjunto de caracteres. O registro usando RegisterClassW permite que o aplicativo solicite que o sistema operacional passe parâmetros de texto de mensagens como Unicode. A funçãoIsWindowUnicode permite que um aplicativo consulte a natureza de cada janela.

O exemplo a seguir mostra como registrar uma classe de janela de página de código do Windows e uma classe de janela Unicode e como escrever os procedimentos de janela para ambos os casos. Para os fins deste exemplo, todas as funções e estruturas são mostradas com os tipos de dados específicos "A" (ANSI) ou "W" (wide, Unicode). Usando as técnicas explicadas em Usando tipos de dados genéricos, você pode alternativamente escrever este exemplo para usar tipos de dados genéricos, para que ele possa ser compilado para usar páginas de código do Windows ou Unicode, dependendo se "UNICODE" está definido.

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

O exemplo a seguir mostra a diferença entre manipular a mensagem WM_CHAR em um procedimento de janela de página de código do Windows e um procedimento de janela 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;
}

Todo o texto em mensagens recebidas por AnsiWndProc é composto por caracteres de página de código do Windows. Todo o texto em mensagens recebidas por UniWndProc é composto por caracteres Unicode.

Usando Unicode e conjuntos de caracteres