我试图在我的应用程序中检测是否按下 Enter / Return 按钮。我的问题是 LVN_KEYDOWN 事件(表示已按下某个键)未检测到 Enter / Return 键。
我见过其他语言的类似问题,但找不到C ++的解决方案。
我阅读按键的事件是:
void ListOption::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
// TODO: Add your control notification handler code here
if(pLVKeyDow->wVKey == VK_RETURN)
{
OnItemActivateList1(pNMHDR, pResult);
*pResult = 1;
}
*pResult = 0;
}
此代码适用于几乎所有键,但 Enter 键除外。
我的对话框只有一个按钮,它是&#34;默认按钮&#34;值为FALSE。如何检测按键?
更新:我的应用程序使用模式对话框..它包含一个包含CImagePages(标签)的CImageSheet。这是一个更好解释的图像(我已经放置了灰色块来隐藏一些私人数据)
当我按 Enter 时,我希望打开一个新对话框来更改选项。目前,这是通过 LVN_ITEMCTIVATE 事件完成的(当用户双击某个项目时):
答案 0 :(得分:3)
您可以在拥有ListView的窗口中覆盖PreTranslateMessage
。在这种情况下,它似乎是CPropertyPage
。
BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg)
{
//optional: you can handle keys only when ListView has focus
if (GetFocus() == &List)
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_RETURN)
{
//return 1 to eat the message, or allow for default processing
int sel = List.GetNextItem(-1, LVNI_SELECTED);
if (sel >= 0)
{
MessageBox("VK_RETURN");
TRACE("ListView_GetNextItem %d\n", sel);
return 1;
}
else
TRACE("ListView_GetNextItem not-selected, %d\n", sel);
}
if (pMsg->wParam == VK_ESCAPE)
{
//do nothing!
}
}
return CPropertyPage::PreTranslateMessage(pMsg);
}