My study of VC++ ( Command and Menu refered )

来源:互联网 发布:高达00剧场版知乎 编辑:程序博客网 时间:2024/05/22 13:44

1。命令处理

    • ON_COMMAND消息映射。派生类将继承父类的所有消息映射函数
    • ON_UPDATE_COMMAND_UI。更新命令用户界面处理程序。在第一次显示弹出式菜单时被调用,修改菜单项的外观。例子:

在头文件中加入: afx_msg void OnUpdateZoom(CCmdUI *pCmdUI);

在视中加入: ON_UPDATE_COMMAND_UI(IDM_ZOOM, OnUpdateZoom) 以及

void CMyView::OnUpdateZoom(CCmdUI *pCmdUI)

{

pCmdUI->SetCheck(m_bZoomed);

}

    • 对话框发送的命令。假定有一个弹出式对话框,上面有按钮,用按钮发送命令消息。 命令的ID必须在0x8000到0xDFFF的范围之内,这个范围与资源编辑器为菜单项使用的ID范围是相同的。如此,该按钮将产生一个可以传递的命令。应用程序框架首相将这个命令传递到主框架窗口,这是因为框架窗口拥有所有的弹出式对话框。命令传递随后正常进行;如果视图具有该按钮命令的处理程序,那么这就是处理它的地方。

2。应用程序框架的内置菜单项

    • 启用/禁止菜单项。如果应用程序框架没有在命令传递中找到命令消息,它可以禁止该菜单项。利用这一功能,我们就不必编写ON_UPDATE_COMMAND_UI了。

3。CMenu类

    • 菜单对象是由子菜单的嵌套结构组成的。可以使用GetSubMenu成员函数来获得指向弹出式菜单的CMenu指针,该菜单包含在主Menu对象中。CMenu::GetMenuString函数返回相应的菜单项字符串
    • 创建浮动的弹出式菜单。利用资源编辑器和MFC库的CMenu::TrackPopMenu函数,我们可以很容易的创建这些菜单。步骤如下

1. 插入一个新菜单

2. 增加弹出式菜单

3. 在视图类或某个接受鼠标消息的窗口类中添加WM_CONTEXTMENU消息。

void CMyView::OnContextMenu(CWen *pWnd, CPoint point)

{

CMenu menu;

menu.LoadMenu(IDR_MYFLOATINGMENU);

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

}

4。 扩展命令处理

    • ON_COMMAND消息提供了两个功能:1. 命令ID函数参数; 2. 在运行时拒绝接受命令
    • 在一个处理函数响应几个ID时有用