关于MFC LISTBOX右键菜单无法响应的问题,请指教~

han82457242 2013-10-09 04:59:52
我建立一个基于对话框的工程,我选中ListBox中的选项并修改该选项,我派生了一个CListBox类,重载一个WM_RBUTTONUP消息的响应函数,但运行程序时点击右键不能响应,调试时也不能进入消息响应函数,到底问题出在哪,请指点??
...全文
423 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
许文君 2013-10-10
  • 打赏
  • 举报
回复
我重载clistbox响应右键也没问题,稍后上传资源
Eleven 2013-10-10
  • 打赏
  • 举报
回复
CListBox派生类中添加处理WM_CONTEXTMENU消息
许文君 2013-10-10
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/xuddk727/6375969 这是我上传的测试资源的地址,右键删除选中的listbox项
许文君 2013-10-10
  • 打赏
  • 举报
回复
引用 15 楼 han82457242 的回复:
[quote=引用 13 楼 xuddk727 的回复:] 重载对话框的PreTranslateMessage 测试了下是可行的,你参照我这个先对区域进行判断一下,然后决定是否响应,回头我帮你看看重载clistbox是否可行

BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
	 if(WM_RBUTTONUP ==pMsg->message) 
	 {
		m_list.AddString(TEXT("aaaaa"));
	 }

	return CDialog::PreTranslateMessage(pMsg);
}

这种方法只在右键Listbox以外的空白区域时有效,在Listbox控件里面进行右键点击是没有响应的。我现在做的是在Listbox中选中一条记录,右键弹出删除菜单,所以这个方法没用。不过还是谢谢了~[/quote] 不会啊,我试了有效啊
han82457242 2013-10-10
  • 打赏
  • 举报
回复
引用 13 楼 xuddk727 的回复:

重载对话框的PreTranslateMessage 测试了下是可行的,你参照我这个先对区域进行判断一下,然后决定是否响应,回头我帮你看看重载clistbox是否可行

BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_RBUTTONUP ==pMsg->message)
{
m_list.AddString(TEXT("aaaaa"));
}

return CDialog::PreTranslateMessage(pMsg);
}


这种方法只在右键Listbox以外的空白区域时有效,在Listbox控件里面进行右键点击是没有响应的。我现在做的是在Listbox中选中一条记录,右键弹出删除菜单,所以这个方法没用。不过还是谢谢了~
han82457242 2013-10-10
  • 打赏
  • 举报
回复
引用 13 楼 xuddk727 的回复:
重载对话框的PreTranslateMessage 测试了下是可行的,你参照我这个先对区域进行判断一下,然后决定是否响应,回头我帮你看看重载clistbox是否可行

BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
	 if(WM_RBUTTONUP ==pMsg->message) 
	 {
		m_list.AddString(TEXT("aaaaa"));
	 }

	return CDialog::PreTranslateMessage(pMsg);
}

非常感谢,我先试下~
han82457242 2013-10-10
  • 打赏
  • 举报
回复
引用 22 楼 xuddk727 的回复:
好好检查下你的代码,我这弹出菜单没问题
问题出在temp.GetSubMenu(0)这个一句返回的是NULL,还不知道什么原因引起的
许文君 2013-10-10
  • 打赏
  • 举报
回复
好好检查下你的代码,我这弹出菜单没问题
han82457242 2013-10-10
  • 打赏
  • 举报
回复
引用 20 楼 xuddk727 的回复:
http://download.csdn.net/detail/xuddk727/6376475

我用了这个方法后出现了上面的问题:
许文君 2013-10-09
  • 打赏
  • 举报
回复

重载对话框的PreTranslateMessage 测试了下是可行的,你参照我这个先对区域进行判断一下,然后决定是否响应,回头我帮你看看重载clistbox是否可行

BOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_RBUTTONUP ==pMsg->message)
{
m_list.AddString(TEXT("aaaaa"));
}

return CDialog::PreTranslateMessage(pMsg);
}

许文君 2013-10-09
  • 打赏
  • 举报
回复
引用 11 楼 han82457242 的回复:
[quote=引用 9 楼 xuddk727 的回复:] 你先重载PreTranslateMessage把,我帮你试下这种
ListBox控件的消息列表里没有这个消息啊[/quote] 重载对话框的PreTranslateMessage
han82457242 2013-10-09
  • 打赏
  • 举报
回复
引用 9 楼 xuddk727 的回复:
你先重载PreTranslateMessage把,我帮你试下这种
ListBox控件的消息列表里没有这个消息啊
han82457242 2013-10-09
  • 打赏
  • 举报
回复
求大神指点,快来人啊~~
许文君 2013-10-09
  • 打赏
  • 举报
回复
你先重载PreTranslateMessage把,我帮你试下这种
许文君 2013-10-09
  • 打赏
  • 举报
回复
你先PreTranslateMessage把,我帮你试下这种
han82457242 2013-10-09
  • 打赏
  • 举报
回复
#include "CListbox.h" #include "MainFrameDlg.h" // CMyListBox1 dialog class CMyListBox1 : public CListbox { DECLARE_DYNAMIC(CMyListBox1) public: CMyListBox1(CWnd* pParent = NULL); // standard constructor virtual ~CMyListBox1(); // Dialog Data enum { IDD = IDD_MYLISTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() public: // afx_msg void OnRButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); }; 这是我的派生类的代码
han82457242 2013-10-09
  • 打赏
  • 举报
回复
引用 4 楼 xuddk727 的回复:
唔,我搜了下,还不是我想的那样,参见这个 http://blog.sina.com.cn/s/blog_3e5699ab0100mp7r.html
我就是参照这个网站上面做得,不行
han82457242 2013-10-09
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
你消息映射怎么写的?实在不行可以考虑WM_CONTEXTMENU ON_WM_CONTEXTMENU()
我用的是ON_WM_RBUTTONDOWN(),连右键的点击事件都没响应,还走不到弹出菜单那一步,我觉得就是我派生的CMyListBox没有绑定Listbox的原因,但我不知道怎么绑定
许文君 2013-10-09
  • 打赏
  • 举报
回复
唔,我搜了下,还不是我想的那样,参见这个 http://blog.sina.com.cn/s/blog_3e5699ab0100mp7r.html
加载更多回复(3)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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