【发布时间】:2013-03-01 06:05:12
【问题描述】:
我有一个带有一个主窗口的应用程序,它有一堆控件,包括空格键,它由一个名为onSpacebar() 的简单方法处理。在那个主窗口的顶部,我有一个持久的无模式对话框。
我需要空格键的行为完全相同,无论对话框是否具有焦点,或者主窗口是否具有焦点。
这个对话框由一个看起来像这样的 DialogProc 支持:
BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_NOTIFY:
std::cout<< "WM_NOTIFY" <<std::endl;
switch(LOWORD(wParam))
{
// which component caused the message?
case COMP_TREE:
if(((LPNMHDR)lParam)->code == NM_DBLCLK){
onDoubleclk()
}
//...
break;
// other components...
}
break;
case WM_CLOSE:
// the dialog can only be closed when the whole app is closed
//EndDialog(hDlg, IDCANCEL);
return TRUE;
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
}
return FALSE;
}
据我所知,我应该从 DialogProc 中调用我的 onSpacebar() 方法,这与我处理双击的方式类似。我可以看到按下空格键时对话框接收到WM_NOTIFY(短语 WM_NOTIFY 打印到 cout),但我似乎无法将空格键通知与对话框收到的其他众多通知区分开来。
请告诉我如何识别特定的WM_NOTIFY 是对空格键按键的响应。
【问题讨论】:
-
You're
cout消息可能会更有洞察力,如果您尝试打印 something 除了您刚刚放入的消息处理程序部分的名称之外。也许codeNMHDR 的成员可能会让您对键盘通知的怀疑有所了解,尤其是如果您确实显示它以便知道它是什么。