MFC右键弹出菜单的创建

方法一;

OnContextMenu()函数:

a.在资源菜单中添加自定义菜单功能,记录菜单的ID号,此处以IDR_MENU1为例:


b.view类的OnContextMenu()函数添加对应的消息响应:

CMenu menu;
    menu.LoadMenu(IDR_MENU1); //读取资源
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, point.x, point.y,this);
c.弹出下拉菜单添加简单的消息响应:

void Ctest0120View::OnAdcCut()
{
	// TODO: Add your command handler code here

	MessageBox(L"cut is clicked!");
}


方法二:

a.同上创建资源菜单

b.OnRButtonDown()消息响应函数

void Ctest0120View::OnRButtonDown(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
	CMenu menu;
	menu.LoadMenu(IDR_MENU1);//使用ID
	CMenu *pPopup=menu.GetSubMenu(0);//获取菜单对象指针
	ClientToScreen(&point);//显示坐标转化
	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,GetParent());
}
c.同上


补充(转):MFC中菜单项ON_UPDATE_COMMAND_UI和ON_COMMAND消息区别

第一个是响应打开菜单的命令的 
第二个是你打开这个菜单时,处理这个菜单的状态,比如选中、变灰等等。


比如WINDOWS自带的记事本程序,它的"格式"菜单下有个"自动换行",那么在编写记事本这个程序时,对文本进行自动换行或不自动换行的操作就要放在ON_COMMAND消息响应函数里,而"自动换行"菜单项左边是否打勾的操作则放在ON_UPDATE_COMMAND_UI响应函数里.


UPDATE_COMMAND_UI: 处理菜单对应的用户界面显示状态
COMMAND:处理该菜单对应的功能


传统SDK程序要改变选单命令项状态,可以呼叫EnableMenuItem或是 CheckMenuItem,但这使得程序杂乱无章,因为你没有一个固定的位置和固定的原则处理命令项状态。MFC提供一种直觉并且仍旧依赖讯息观念的方式,解决这个问题,这就是UPDATE_COMMAND_UI讯息。其设计理念是,每当选单被拉并尚未显示之前,其命令项(以及对应之工具栏按钮)都会收到UPDATE_COMMAND_UI讯息,这个讯息和WM_COMMAND有㆒样的绕行路线,我们(程序员)只要在适当的类别上放置其处理函式,并在函式上做某些判断,便可决定如何显示命令项。
   这种方法的最大好处是,不但把问题的解决方式统化,更因为 Framework传给UPDATE_COMMAND_UI处理程序的参数是个(指向CCmdUI对象的指针),而CCmdUI对象就代表着对应的选单命令项,因此你只需呼叫    CCmdUI    所准备的,专门用来处理命令项外观的函式(如Enable或SetCheck)即可。我们的工作量大为减轻。  








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值