Wm_contextmenu ileti işleme

Uygulama penceresinin yordam wm_rbuttonup ya da wm_ncrbuttonup için DefWindowProc işlevi geçirmeden wm_contextmenu iletisi oluşturulur. Uygulama, onun ekranda belirli bir bölümünü uygun bir kısayol menüsü görüntülemek için bu iletiyi işleyebilir. Uygulama bir kısayol menüsü görüntülenmiyorsa, bu mesajı DefWindowProc için varsayılan işleme için geçirmesi gerekir.

Bu uygulama penceresinin yordam görünür olarak wm_contextmenu ileti işleme bir örnek aşağıdadır. LParam parametresinin düşük düzey ve yüksek sıralı ints belirtin (Not Bu koordinatlar negatif değerler sistemlerinde birden fazla monitör ile alabilir) ekran koordinatları farenin sağ fare tuşu ise serbest. Uygulama tanımlı OnContextMenu işlevi bir bağlam menüsü görüntüler, true false döner yoksa.

case wm_contextmenu: If (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) dönmek DefWindowProc (hwnd, uMsg, wParam, lParam); 
    sonu 

 

Aşağıdaki uygulama tanımlı OnContextMenu işlevi belirtilen fare pozisyonu pencerenin istemci alanı içinde bir kısayol menüsü görüntüler. Daha karmaşık fonksiyon birkaç farklı menüler, bağlı istemci kısmını alanında belirtilen birini görüntüleyebilir. Aslında kısayol menüsünü görüntülemek için bu örnek DisplayContextMenu adı verilen bir uygulama tanımlı işlevini çağırır. Bu fonksiyon tanımlaması için bkz: kısayol menüsünü görüntüleme.

Bool WINAPI OnContextMenu(HWND hwnd, int x, int y) {rect rc;                    / / istemci alanı pencere noktası NK = {x, y};        / / farenin konumunu tıklatın / istemci alanının sınırlayıcı dikdörtgenin almak. 
 
    GetClientRect (hwnd, amp; rc); 
 
    / / İstemci koordinatları farenin konumunu değiştirmek. 
 
    ScreenToClient (hwnd ve pt); 
 
    / / Ekran konumu istemci alanında ise, bir / / kısayol menüsü. 
 
    Eğer (PtInRect (& rc, pt)) {ClientToScreen (hwnd ve pt); 
        DisplayContextMenu (hwnd, pt); 
        true döndürür; 
    } / / Yok menüsü görüntüleniyorsa, false döner. 
 
    return false; 
} 

 

Index