C++ 在C+中检测按键按下事件的输入/返回+;
我试图在我的应用程序中检测是否按下了Enter/Return按钮。我的问题是LVN_KEYDOWN事件(表示按键已按下)未检测到回车键 <>我看到了其他语言的类似问题,但是找不到C++的解决方案。 我阅读按键的事件是:C++ 在C+中检测按键按下事件的输入/返回+;,c++,mfc,keypress,C++,Mfc,Keypress,我试图在我的应用程序中检测是否按下了Enter/Return按钮。我的问题是LVN_KEYDOWN事件(表示按键已按下)未检测到回车键 我看到了其他语言的类似问题,但是找不到C++的解决方案。 我阅读按键的事件是: void ListOption::OnLvnKeydownList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMH
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;
}
void list选项::OnLvnKeydownList1(NMHDR*pNMHDR,LRESULT*pResult)
{
LPNMLVKEYDOWN pLVKeyDow=重新解释铸件(pNMHDR);
//TODO:在此处添加控件通知处理程序代码
如果(pLVKeyDow->wVKey==VK\u返回)
{
1(pNMHDR,预设);
*预设值=1;
}
*预设值=0;
}
此代码适用于几乎任何键,Enter键的EXCEPT
我的对话框只有一个按钮,它的“默认按钮”值为FALSE。如何检测按键
更新:我的应用程序使用模式对话框。。它包含一个包含CImagePages(选项卡)的CImageSheet。这是一张更好的解释图片(我放置了灰色块来隐藏一些私人数据)。按Enter键时,我希望打开一个新对话框来更改选项。目前,这是通过LVN\u itemtivate事件完成的(当用户双击一个项目时):您可以在拥有ListView的窗口中覆盖
预翻译消息。在这种情况下,它似乎是一个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);
}
您需要提供更多关于这方面的上下文,因为我已经在CListView上测试过了,它确实有效。请添加类声明、消息映射等。。。也许,尝试在一个简单的应用程序中重现您的问题,创建一个新的项目,尽可能少的麻烦。您可能需要响应消息并返回相应的标志。@Robson我更新了问题,以便更好地解释。请注意,我使用的是MFC的列表控件,而不是CListView。@ForestandeTrees谢谢,但这是一个不同的问题。另外,你链接到的问题因[范围太广]而被关闭。我已经做了一些测试,这似乎是唯一的方法。谢谢。此事件不会检测到“返回”键。但是,我仍然不知道如何调用我的方法。在这个事件中有什么方法可以做到这一点吗?LVN\u itemactive
如果ListView的父项是非对话的,则可以正常工作。但若它是dialog,那个么dialog将使用Return和Esc键作为默认按钮和Cancel按钮。从技术上讲,你可以不去管它,因为这是标准行为。或者你可以覆盖它。我做了一些更改来查找GetNextItem,以便您可以处理它或继续。