我在VS2005的对话框模式中, 放一个list control控件, 想增加鼠标在该控件上时候, 单击右键弹出一个菜单。
现在我在该对话筐中增加了.void page2::OnRButtonDown(UINT nFlags, CPoint point) 右键响应消息。
现在是当我鼠标不在control list上单击右键回进入该响应函数,一滑到list control控件上就不响应该函数。
求教

解决方案 »

  1.   

    你用page2::当然是这样,因为鼠标到list control时,page2收不到消息;
    需要派生:
    class CMyListCtrl : public CListCtrl
      

  2.   

    I have a solution。
    afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
      

  3.   

    请问控件如何派生? page2是一个对话框类. 控件事放在对话框上。
      

  4.   

    怎么让list control响应NM_RCLICK消息呢. 我只看到在对话框中可以增加响应消息函数.
    另外WM_NCRBUTTONDBCLK没有看到有NM_RCLICK消息啊
      

  5.   

    VC6.0  鼠标在对话框RC设计内面, 右键->事件-> 选择NM_RCLICK  后面和其他地方是一样的。
    VS2008  就是控件属性框最上面选择事件,然后在下面去找就好了。
    然后就是在响应函数内面添加你想干的事。还一个想法,或者说是思路,我没有去验证。说下,LZ看着自己实际情况考虑用不用吧就是在VM_RCLICK的响应函数:(void page2::OnRButtonDown(UINT nFlags, CPoint point))
    中添加一个过滤就好了, 条件判断下,
    可以是你的控件ID。 
    可以是你鼠标点击的point的区域,if(m_rcBtn.PtInRect(point))
    也可以自己认为一个合适的条件。 这样应该就不会在控件外面右键也弹出响应对话框
      

  6.   

    你应该在CListCtrl控件上添加NM_RCLICK事件响应
      

  7.   

    新创建一个MFC类,比如CMyListCtrl,让它继承自CListCtrl
    这个新的类(称为派生自CListCtrl的类,具有CListCtrl的全部功能),你给它附加或改变(重载)一些东西1、添加一些与菜单创建相关的变量(项目,可能是一个字符串数组:CStringArray m_astrMenuItem;)
    2、重载OnRButtonDown,在其中写上菜单创建与显示相关的代码,当用户选择菜单项后,发送一个消息给list的父窗口(page2),这个消息由你自定义,当然父窗口(page2)需要有一个响应该消息的函数3、你在page2建立的listCtrl,做一个关联的控件变量(m_list),在page2的头文件中,手工将变量类型改为(CListCtrl -> CMyListCtrl),在page2的初始化中,为m_list添加菜单的属性及项目定义瞧、MFC写界面,做一丁点事,就得费一老鼻子劲,这也是VC的乐趣所在:)
      

  8.   

    谢谢各位. 是我自己搞糊涂了. 直接在该控件上增加OnNMRclickList1就可以了.
      

  9.   

    可以和我说说嘛?我的list control 不响应拖动啊。