C++ 在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

我试图在我的应用程序中检测是否按下了Enter/Return按钮。我的问题是LVN_KEYDOWN事件(表示按键已按下)未检测到回车键

<>我看到了其他语言的类似问题,但是找不到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;
}
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,以便您可以处理它或继续。