Mendaftarkan Kelas Jendela

Kelas jendela didukung oleh prosedur jendela. Aplikasi Anda dapat mendaftarkan kelas jendela dengan menggunakan RegisterClassA atau RegisterClassW. Aplikasi baru biasanya harus menggunakan RegisterClassW.

Jika aplikasi mendaftarkan kelas jendela menggunakan RegisterClassA, fungsi menginformasikan sistem operasi bahwa jendela kelas yang dibuat mengharapkan pesan dengan parameter teks atau karakter untuk menggunakan kumpulan karakter halaman kode Windows (ANSI ). Pendaftaran menggunakan RegisterClassW memungkinkan aplikasi untuk meminta sistem operasi untuk meneruskan parameter teks pesan sebagai Unicode. Fungsi IsWindowUnicode memungkinkan aplikasi untuk mengkueri sifat setiap jendela.

Contoh berikut menunjukkan cara mendaftarkan kelas jendela halaman kode Windows dan kelas jendela Unicode dan cara menulis prosedur jendela untuk kedua kasus. Untuk tujuan contoh ini, semua fungsi dan struktur ditampilkan dengan jenis data "A" (ANSI) atau "W" (lebar, Unicode) tertentu. Dengan menggunakan teknik yang dijelaskan dalam Menggunakan Jenis Data Generik, Anda dapat menulis contoh ini secara alternatif untuk menggunakan jenis data generik, sehingga dapat dikompilasi untuk menggunakan halaman kode Windows atau Unicode, tergantung pada apakah "UNICODE" ditentukan.

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

Contoh berikut menunjukkan perbedaan antara menangani pesan WM_CHAR dalam prosedur jendela halaman kode Windows dan prosedur jendela 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;
}

Semua teks dalam pesan yang diterima oleh AnsiWndProc terdiri dari karakter halaman kode Windows. Semua teks dalam pesan yang diterima oleh UniWndProc terdiri dari karakter Unicode.

Menggunakan Unicode dan Set Karakter