菜单消息响应顺序
凡是从CCmdTarget派生的类都可以响应COMMAND消息,菜单、控件产生的消息都是COMMAND消息;
在源文件中,应当存在ON_COMMAND( )来进行消息与响应函数的关联;
响应顺序是:
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) 获取子菜单指针;
待补充。。。。。