NM_RETURN去火星了?

worldy 2015-04-24 08:38:34
想要响应ListView控件的的NM_RETURN事件,但是居然接收不到该消息;MSDN上很明白的、并且有针对LV控件的说明:
NM_RETURN (list view)
NM_RETURN
lpnmh = (LPNMHDR) lParam;

Notifies a list view control's parent window that the control has the input focus and that the user has pressed the ENTER key. NM_RETURN is sent in the form of a WM_NOTIFY message.

The return value for this notification is not used.
lpnmh
Address of an NMHDR structure that contains additional information about this notification message.

但是无论我如何的努力,就是接收不到它。
查遍了百度、google也有零星的帖子和我一样在追寻NM_RETURN去哪里le ?可是没有答案。

潭里的如云高手,谁能告诉我,如何才能收到NM_RETURN消息?难道它去了火星,地球人无法找到了她的踪影?
难道非得subclass才行?ms的工程师是边打瞌睡边写msdn的?


...全文
229 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2015-04-26
  • 打赏
  • 举报
回复
"把控件变成视图" http://download.csdn.net/detail/schlafenhamster/6218655 通过 CCtrlView 类 把自己派生的类, 变成 View。
worldy 2015-04-25
  • 打赏
  • 举报
回复
引用 14 楼 schlafenhamster 的回复:
CMFCShellListCtrl 不是view, 是ctrl 1, 把 ctrl 变成view 2. 子类化ctrl
CMFCShellListCtrl 是 MFC扩展库的东东,如何变成View?
schlafenhamster 2015-04-25
  • 打赏
  • 举报
回复
CMFCShellListCtrl 不是view, 是ctrl 1, 把 ctrl 变成view 2. 子类化ctrl
worldy 2015-04-25
  • 打赏
  • 举报
回复
引用 8 楼 xiaohuh421 的回复:
control has the input focus and that the user has pressed the ENTER key 看到这句没有。 你的listview需要有输入焦点, 然后按enter才会有这个消息。 你可以尝试让你的listview处于可编辑状态,然后这时按回车看看。
ls没有说对, 没有找对拦截回车的方法,LVN_KEYDOWN居然屏蔽了回车。除非subclass
worldy 2015-04-25
  • 打赏
  • 举报
回复
引用 7 楼 oyljerry 的回复:
直接父窗口中拦截回车消息,然后判断控件ID。结合起来判断。
没有找对拦截回车的方法,LVN_KEYDOWN居然被屏蔽。除非subclass
worldy 2015-04-25
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
是 CMFCShellListCtrl 的问题 ?
还没搞明白是咋回事,4L给的代码,使用ClistView类,可以获得NM_RETURN,但CMFCShellListCtrl 是派生于ListCtrl; CMFCShellListCtrl 本身(非派生类)如果使用鼠标双击文件夹能在CMFCShellListCtrl 中打开对应的文件夹,但是如果使用回车,啥动作都没有,按照Ms一贯保持键盘和鼠标都能使用的角度看,这点很奇怪;或许M$本身就明白无法响应NM_RETURN?
schlafenhamster 2015-04-25
  • 打赏
  • 举报
回复
是 CMFCShellListCtrl 的问题 ?
worldy 2015-04-25
  • 打赏
  • 举报
回复
引用 8 楼 xiaohuh421 的回复:
control has the input focus and that the user has pressed the ENTER key 看到这句没有。 你的listview需要有输入焦点, 然后按enter才会有这个消息。 你可以尝试让你的listview处于可编辑状态,然后这时按回车看看。
那是必须的,我是操作文件夹,上下键能工作的情况下,按回车键的
xiaohuh421 2015-04-25
  • 打赏
  • 举报
回复
control has the input focus and that the user has pressed the ENTER key 看到这句没有。 你的listview需要有输入焦点, 然后按enter才会有这个消息。 你可以尝试让你的listview处于可编辑状态,然后这时按回车看看。
oyljerry 2015-04-25
  • 打赏
  • 举报
回复
直接父窗口中拦截回车消息,然后判断控件ID。结合起来判断。
Sping 2015-04-24
  • 打赏
  • 举报
回复
对了,忘记了。 回车里面你可以用 if (GetDlgItem(IDC_MYLIST) == GetFocus())或者其他的做处理,然后就能得到了
Sping 2015-04-24
  • 打赏
  • 举报
回复
如果是对话框程序的话我建议还是放在父对话框的virtual BOOL PreTranslateMessage(MSG* pMsg);里面处理比较好。

BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if ( pMsg->message == WM_KEYDOWN )
{
    if( nKey == VK_ESCAPE ) //ESC键盘
    {
        return TRUE;
   }
   else if( nKey == VK_RETURN  )//回车键
  {
      //do......
       return TRUE;
  }
}
}
Sping 2015-04-24
  • 打赏
  • 举报
回复
引用 3 楼 worldy 的回复:
@tpnndhqc 对了,我是用CreateWIndowEx创建的,你是用对话框的?
代码下载地址:http://download.csdn.net/detail/tpnndhqc/8629465
worldy 2015-04-24
  • 打赏
  • 举报
回复
@tpnndhqc 对了,我是用CreateWIndowEx创建的,你是用对话框的?
worldy 2015-04-24
  • 打赏
  • 举报
回复
引用 1 楼 tpnndhqc 的回复:
楼主试试 afx_msg void OnReturn(NMHDR* pNMHDR, LRESULT* pResult); ON_NOTIFY_REFLECT(NM_RETURN, OnReturn) void CTestView::OnReturn(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; } 我测试是正常的。
就是不正常啊 BEGIN_MESSAGE_MAP(CxFileList, CMFCShellListCtrl) ON_NOTIFY_REFLECT(LVN_KEYDOWN, &CxFileList::OnLvnKeydown)//居然屏蔽了Return按键消息 ON_NOTIFY_REFLECT(LVN_ITEMACTIVATE, &CxFileList::OnLvnItemActivate) ON_NOTIFY_REFLECT(NM_RETURN, &CxFileList::OnNMReturn) END_MESSAGE_MAP() void CxFileList::OnNMReturn(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0;//执行不到 } #1L能否将你测试正常的代码贴出来学习一下啊,谢谢
Sping 2015-04-24
  • 打赏
  • 举报
回复
楼主试试 afx_msg void OnReturn(NMHDR* pNMHDR, LRESULT* pResult); ON_NOTIFY_REFLECT(NM_RETURN, OnReturn) void CTestView::OnReturn(NMHDR* pNMHDR, LRESULT* pResult) { *pResult = 0; } 我测试是正常的。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧