Chr*_*ner 3 c++ keyboard winapi callback winforms
我不经常使用winapi,我写的几乎是.NET代码.但此时我必须使用winapi进行简单的对话.我想处理一些关键事件.因此我观察了相应的回调消息WM_KEYDOWN或WM_KEYUP在MSDN上并将其添加到我的回调函数中.
INT_PTR CALLBACK cbfunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
// ...
case WM_KEYUP:
MMsgBox("up"); // I never get here
return 0;
case WM_KEYDOWN:
MMsgBox("down"); // I never get here
return 0;
// ...
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但既WM_KEYUP不会WM_KEYDOWN触发也不会触发.然后我说找到解决这个问题的方法.我想我的对话可能会吃掉这些消息.所以我补充说:
case WM_GETDLGCODE:
return DLGC_WANTALLKEYS;
Run Code Online (Sandbox Code Playgroud)
结果它没有帮助.我发现的其他解决方案如下:
WM_GETDLGCODE事件来处理此键,如此处所示.PreTranslateMessage.但我甚至没有这个课,因为我只是通过使用创建我的对话框DialogBoxParam所以他们都没有为我工作.在那一刻我不知道如何处理它.我注意到的是,在按键时,WM_COMMAND似乎发生了一条消息.
问候内姆.
根据这个链接,某些消息很难用对话框捕获,因为Windows在内部处理它们并且它们永远不会到达DialogProc.以下是我能想到的两个选项:
GetAsyncKeyState在WM_COMMAND事件DialogProc其中将处理WM_KEYDOWN等消息.| 归档时间: |
|
| 查看次数: |
4152 次 |
| 最近记录: |