MFC OnContextMenu



 

         WM_CONTEXTMENU消息 用来响应鼠标右键消息, 它响应的不是鼠标右键按下消息,也不是鼠标右键弹起消息

而是鼠标右键 依次按下弹起后触发的消息。

 

         因此,若程序还响应了鼠标右键按下的消息OnRButtonDown,且在此响应函数中有模特对话框出现的话,则不会响应WM_CONTEXTMENU消息。

         比如,有AfxMessageBox(L"Right Down"); 模特对话框出现在右键按下响应函数中, 则关闭此模特对话框后,不在响应右键菜单消息。

 

         原因在于:

         右键菜单 是在右键依次按下弹起时才被触发的。

        右键按下, 模特对话框产生时,消息只被发送到了模特对话框,因此,鼠标弹起消息未被发送到主窗口,因此,不会响应右键菜单消息。

 

        但是,如果在右键弹起响应函数OnRButtonUp中响应模特对话框消息的话, 右键菜单消息 不会被影响。

        原因是: 此时鼠标按下、弹起消息均已被发送到了主窗口,因此程序在关闭模特对话框后,仍会响应右键菜单消息。

 

  1. OnContextMenu(CWnd* pWnd, CPoint point)  
  2. {  
  3.     CPoint pt=point;  
  4.     CMenu menu;  
  5.     CMenu* PopupMenu=NULL;  
  6.   
  7.     ScreenToClient(&pt);  
  8.   
  9.     //加载菜单  
  10.     menu.LoadMenu(IDR_IMAGEVIEW);  
  11.   
  12.     //子菜单项  
  13.     //右键点击 弹出此子菜单项  
  14.     PopupMenu=menu.GetSubMenu(3);  
  15.     PopupMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);  
  16. }  
OnContextMenu(CWnd* pWnd, CPoint point)
{
	CPoint pt=point;
	CMenu menu;
	CMenu* PopupMenu=NULL;

	ScreenToClient(&pt);

	//加载菜单
	menu.LoadMenu(IDR_IMAGEVIEW);

	//子菜单项
	//右键点击 弹出此子菜单项
	PopupMenu=menu.GetSubMenu(3);
	PopupMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);
}


 

 参考资料:

http://topic.csdn.net/t/20061114/18/5157800.html 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC是Microsoft Foundation Classes的缩写,是一套用于开发Windows应用程序的类库。继承CListCtrl是指在MFC应用程序中创建一个类,该类从CListCtrl类派生而来,以实现自定义的列表控件功能。 继承CListCtrl的好处是可以通过重写基类的方法来实现自己的列表控件行为,从而满足特定的需求。通过继承CListCtrl,可以添加自定义的列和行,并对列表的显示和交互行为进行定制。 派生类可以重写CListCtrl提供的方法,如OnDraw和OnCustomDraw,来实现自己的绘制和定制绘制行为。也可以重写OnLButtonDown和OnLButtonDblClk等事件函数,来处理特定的鼠标操作。 此外,继承CListCtrl还可以添加自定义的成员变量和成员函数,以支持特定的功能。例如,可以添加成员变量来保存列表数据,并通过自定义的成员函数来更新和获取数据。 同时,继承CListCtrl还可以重写一些虚函数,如OnKeyDown和OnContextMenu,在特定的事件发生时处理相关的操作。这可以使得列表控件更加灵活和可扩展。 总之,通过继承CListCtrl,开发者可以根据具体需求对列表控件进行定制,并实现自定义的行为和功能。这种继承方式可以方便地重用MFC提供的基础功能,同时也能够满足特定的应用程序需求。 ### 回答2: MFC(Microsoft Foundation Classes)是微软公司开发的一组用于简化Windows应用程序开发的类库。继承CListCtrl是指在MFC中自定义一个类,使其从CListCtrl派生而来,以便于实现特定的功能或提供自定义的界面。 通过继承CListCtrl,我们可以重写一些函数以定制列表控件的行为。例如,可以重写OnKeyDown函数来处理键盘按键事件,重写OnLButtonDown函数来处理鼠标左键点击事件。这样我们就可以根据具体的需求来实现一些自定义的操作,比如特定的快捷键功能,或者对列表项的点击事件进行一些特殊处理等等。 此外,继承CListCtrl还可以通过重写DrawItem函数来实现自定义的绘制,例如修改列表项的背景色、文本颜色以及图标等。还可以重写OnCustomDraw函数来实现更加灵活的绘制功能,例如根据某些条件来动态改变列表项的外观。 继承CListCtrl同时也可以扩展一些新的功能。我们可以在自定义的类中添加一些新的成员函数和数据成员,来实现一些额外的操作。比如添加一个排序函数,根据某列的值对列表中的项进行排序,或者添加一个筛选函数,根据某些条件来过滤显示的列表项等等。 总之,通过继承CListCtrl,我们可以更加灵活地定制和扩展列表控件,以满足特殊的需求,并提供更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值