WM_CHAR iletisi

TranslateMessage işlevi tarafından bir WM_KEYDOWN iletisi çevrildiğinde klavye odağıyla pencereye postalanır. WM_CHAR iletisi, basılan anahtarın karakter kodunu içerir.

#define WM_CHAR                         0x0102

Parameters

wParam

Anahtarın karakter kodu.

lParam

Aşağıdaki tabloda gösterildiği gibi yineleme sayısı, tarama kodu, genişletilmiş anahtar bayrağı, bağlam kodu, önceki anahtar durumu bayrağı ve geçiş durumu bayrağı.

Bitler Anlamı
0-15 Geçerli ileti için yineleme sayısı. Değer, kullanıcının anahtarı basılı tutmasının sonucu olarak tuş vuruşunun otomatik olarak yeniden değerlenme sayısıdır. Tuş vuruşu yeterince uzun tutulursa, birden çok ileti gönderilir. Ancak yineleme sayısı kümülatif değildir.
16-23 Tarama kodu. Değer OEM'ye bağlıdır.
24 Anahtarın gelişmiş bir 101 veya 102 tuşlu klavyede görünen sağ alt ve CTRL tuşları gibi genişletilmiş bir tuş olup olmadığını gösterir. Genişletilmiş anahtarsa değer 1'dir; aksi takdirde 0 olur.
25-27 Saklı -dır; kullanmayın.
28 Menü modu bayrağı. Menü etkinse değer 1'dir; aksi takdirde, değer 0'dır.
29 Bağlam kodu. Tuşa basıldığında ALT tuşu basılı tutulursa değer 1'dir; aksi takdirde, değer 0'dır.
30 Önceki anahtar durumu. Değer, ileti gönderilmeden önce anahtarın kapanması durumunda 1 veya anahtar yukarı olduğunda 0 olur.
31 Geçiş durumu. Anahtar serbest bırakılıyorsa değer 1 veya tuşa basılıyorsa 0 olur.

Daha fazla ayrıntı için bkz. Tuş Vuruşu İleti Bayrakları.

Dönüş değeri

Bir uygulama bu iletiyi işlerse sıfır döndürmelidir.

Example

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

GitHub'da Windows Klasik Örnekleri örneği.

Açıklamalar

WM_CHAR iletisi, window sınıfını kaydetmek için RegisterClass işlevinin Unicode sürümü kullanıldıysa, wParam'ında UTF-16 (16 bit Unicode Dönüştürme Biçimi) kod birimlerini kullanır. Aksi takdirde sistem, geçerli işlem kodu sayfasında, Windows Sürüm 1903 (Mayıs 2019 Güncelleştirmesi) ve daha yeni sürümlerde UTF-8 olarak ayarlanabilen karakterler sağlar. Daha fazla bilgi için bkz. Windows uygulamalarında Pencere Sınıflarını Kaydetme ve UTF-8 kod sayfalarını kullanma.

Windows Vista'den başlayarak, WM_CHAR ileti Unicode pencerelere UTF-16 vekil çiftleri gönderebilir. Gerekirse bu tür durumları algılamak için IS_HIGH_SURROGATE, IS_LOW_SURROGATE ve IS_SURROGATE_PAIR makrolarını kullanın.

Basılan tuşlar ile oluşturulan karakter iletileri arasında bire bir yazışma olması şart değildir ve bu nedenle lParam parametresinin yüksek sıralı sözcüğündeki bilgiler genellikle uygulamalar için yararlı değildir. Yüksek sıralı sözcükteki bilgiler yalnızca WM_CHAR iletisinin gönderilmeden önceki en son WM_KEYDOWN iletisi için geçerlidir.

Gelişmiş 101 ve 102 tuşlu klavyeler için, genişletilmiş tuşlar klavyenin ana bölümünde sağ ALT ve sağ CTRL tuşlarıdır; sayısal tuş takımının solundaki kümelerde INS, DEL, HOME, END, PAGE UP, PAGE DOWN ve ok tuşları; ve sayısal tuş takımındaki bölme (/) ve ENTER tuşlarını seçin. Diğer bazı klavyeler lParam parametresinde genişletilmiş tuş bitini destekleyemeyebilir.

WM_UNICHAR iletisi, UTF-32 kullanması dışında WM_CHAR ile aynıdır. ANSI pencerelerine Unicode karakterleri göndermek veya göndermek için tasarlanmıştır ve Unicode Tamamlayıcı Düzlem karakterlerini işleyebilir.

Requirements

Requirement Value
Desteklenen en düşük düzeydeki istemci
Windows 2000 Professional [yalnızca masaüstü uygulamaları]
Desteklenen en düşük sunucu
Windows 2000 Server [yalnızca masaüstü uygulamaları]
Header
Winuser.h (Windows.h dahil)

Ayrıca bakınız