2012-11-29 67 views
0

我一直在基本的用戶界面事情中掙扎了一段時間。我有一個父窗口和幾個子窗口。使用按鈕(BS_CHECKBOX樣式)等子窗口並編輯Im無法處理任何按ESC鍵事件的消息。我可以子類化子窗口,但它似乎是處理一個事件的矯枉過正。我也有一個listview孩子,出於某種原因,我可以正確處理VK_ESCAPE。我還檢查了spy ++並注意到按下ESC鍵(並且孩子被聚焦)時,沒有消息發送到父窗口。如果我設置spy ++只記錄子消息,則爲按鍵生成正確的消息 - 它們只是不傳遞給父級。任何想法什麼(不)做?如何處理父窗口中的所有按鍵

主窗口循環:

MSG Msg; 
    while (GetMessage(&Msg, NULL, 0, 0)) 
    { 
    TranslateMessage (&Msg); 
    DispatchMessage (&Msg); 
    } 

在父母的WndProc工作代碼用於處理列表視圖按鍵:

case WM_NOTIFY: 
    switch (((LPNMHDR)lParam)->code) 
    { 
    case LVN_KEYDOWN: 
     if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_ESCAPE) 
      Exit(); 
     break; 
    } 
    break; 

感謝,

克拉做到這一點

回答

1

的一種方法是在它被分派到焦點窗口之前在它的消息循環中捕獲它, g .:

MSG Msg; 
while (GetMessage(&Msg, NULL, 0, 0)) 
{ 
    if (Msg.message == WM_KEYDOWN && Msg.wParam == VK_ESCAPE) 
    { 
     // process escape key 
    } 
    else 
    { 
     TranslateMessage(&Msg); 
     DispatchMessage(&Msg); 
    } 
} 

還有其他的方法可以做到這一點,但這是一個非常簡單的解決方案。

+0

簡單&&真棒。謝謝! :) – Kra

相關問題