MFC笔记-----menu

菜单消息响应顺序

凡是从CCmdTarget派生的类都可以响应COMMAND消息,菜单、控件产生的消息都是COMMAND消息;
在源文件中,应当存在ON_COMMAND( )来进行消息与响应函数的关联;

响应顺序是:

Created with Raphaël 2.1.0 WM_COMMAND CView响应? 结束 CDoc响应? CMianFrame响应? CWinApp响应? yes no yes no yes no yes no

CWnd 菜单更新机制

CWnd 的成员变量m_bAutoMenuEnable 决定是采用框架的菜单更新机制(==TRUE)还是由开发者自己维护菜单项的状态(==FALSE);

框架对菜单的更新:如需更新某个菜单项的状态,和消息响应一样需要3要素:

public:
    afx_msg void OnUpdateFileSave(CCmdUI *pCmdUI); //声明一个消息处理函数

ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, &CMainFrame::OnUpdateFileSave)
//把菜单项ID与 CN_UPDATE_COMMAND_UI消息处理函数关联

void CMainFrame::OnUpdateFileSave(CCmdUI *pCmdUI)
{
    pCmdUI->Enable(FALSE);//禁用ID_FILE_SAVE
}

其他常用

CWnd 类成员函数 :
GetMenu( )获取该窗口对象下拥有的CMenu指针;
SetMenu( ) 设置菜单或者取消菜单:

SetMenu(NULL); //去掉菜单

CMenu menu;
menu.LoadMenu(IDM_XXXX);
SetMenu(&menu);//更换自定义菜单
menu.Detach();  //menu是一个局部变量,在menu销毁前一定要把菜单句柄和这个对象分离;

CMenu 类 GetSubMenu( UINT index) 获取子菜单指针;

待补充。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值