2013-11-15 130 views
0

如果WM_KEYDOWNmessagebox()爲了瞭解這種情況的功能。WM_KEYDOWN沒有迴應

有人可以幫助我爲什麼這個案件沒有迴應?

我試圖做調試,而我插入一些字母從鍵盤和調試器不來WM_KEYDOWN的情況。

謝謝大家!

這是我的代碼:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch(msg) 
    { 
    case WM_CREATE: 
    break; 
    case WM_COMMAND: 
    break; 
    case WM_KEYDOWN: 
    MessageBox(NULL,L"test",L"Information",MB_ICONINFORMATION); 
    break; 
    case WM_DESTROY: 
    // DESTROY WINDOW 
    break; 
    default: 
    return DefWindowProc(hwnd, msg, wParam, lParam); 
    } 
    return 0; 
} 
+0

在這種情況下,你不會真的返回任何東西。我知道'MessageBox'返回一個'int',所以你也需要考慮這一點。 – noobProgrammer

+1

WM_KEYDOWN可能會轉到另一個窗口。你在文本框中按下了一個鍵嗎?如果是這樣,WM_KEYDOWN將進入文本框的WndProc。您也可以嘗試使用Spy ++並觀察郵件的發送位置。 – shf301

回答

3

MessageBox()顯示一個彈出式對話框,然後運行它自己的模式消息循環服務消息該對話框,直到它關閉。在對話框處於活動狀態時,您的按鍵將進入該對話框,而不是您的窗口,該窗口屬於您的窗口。這就是爲什麼你沒有收到更多WM_KEYDOWN消息。您不應該使用MessageBox()作爲UI消息的調試工具,因爲它會更改UI消息的流向。改爲使用OutputDebugString()。這樣,您的調試器(或SysInternals DebugView等外部查看器)可以顯示您的調試消息,而不會影響您的UI的行爲。