Visual studio C++ MFC之Menu editor

背景

本篇旨在MSDN帮助文档下总结Menu editor的使用,并列出碰到的具体问题。

正文

  1. 创建Menu Editor
    打开链接MSDN之Creating a Menu。按照文档的方法创建Menu Editor,最后点击编译,你会发现你添加的Menu资源文件并没有按照预想显示在你的窗口里。这是因为我们还少了一个步骤,此步骤在该文档里没有提及,也许在另一个我不清楚的文档里。回到正题,添加的Menu没有显示在你创建的窗口里,是因为没有建立MenuDialog的链接,建立连接的办法既是,先记住创建的MenuID号,接着点开Dialog的属性框,找到属性menu,在该栏选择新建的Menu资源ID,则编译后就会发现Menu出现在了对应的窗口了。

  2. 创建Menu下的Item的命令(Command)
    譬如说,Menu有个名为fileItem,点击file要能实现打开文件的操作。具体实现办法既是,在该Item右击添加事件处理程序,消息类型有COMMANDUpdate_Command_UI,前者是处理该菜单栏处理的实际内容,后者用改变UI显示。类列表就很好理解,该Menu在哪个窗口内则选择哪个窗口的类。创建完成后即会产生对应的一下两个函数:

void CMenueditortestDlg::OnFileExit()
{
        // TODO: 在此添加命令处理程序代码
        TRACE("Menudlg
");
}
void CMenueditortestDlg::OnUpdateFileExit(CCmdUI *pCmdUI)
{
        // TODO: 在此添加命令更新用户界面处理程序代码
        // 注意此处的 pCmdUI这个指针。里面可以直接对对应的菜单UI进行操作。具体如何操作还有待研究。
        TRACE("Updatedlg
");	
}
  1. 动态改变Menu的文字
    点击Menu的某个Item,希望其文本会随之改变,例如Item文本Connect,点击之后,让其改变为Disconnect。具体做法就是,如2 步骤生成一个消息类型为Update_Command_UI的函数,接着在该函数内实现改变Menu中某个Item的文字,具体代码如下:
void CMenueditortestDlg::OnUpdateSettingsDrawenable(CCmdUI *pCmdUI)
{
        // TODO: 在此添加命令更新用户界面处理程序代码
        CMenu *cMenu;             // CMenu类
        cMenu = this->GetMenu();        // 获得本窗口类的Menu指针(该步骤很重要)
/* 
        BOOL WINAPI ModifyMenu(
            _In_     UINT     uPosition,
            _In_     UINT     uFlags,
            _In_     UINT_PTR uIDNewItem,
            _In_opt_ LPCTSTR  lpNewItem
        );
*/
/*
此函数第一个参数根据第二个参数来变化。当第二个参数含有 MF_BYPOSITION 时,则第一个参数代表的是菜单的位置。菜单栏从左至右,0为起始值。当第二个参数为 MF_BYCOMMAND时,则第一参数代表的要改变的Menu的具体Item的ID号。其他参数参考MSDN,在参考链接会给出。
*/
        cMenu->ModifyMenuW(ID_SETTINGS_DRAWENABLE, MF_BYCOMMAND | MF_CHECKED | MF_STRING, 
        ID_SETTINGS_DRAWENABLE,_T("Draw Disable"));
        DrawMenuBar();    // MSDN指出,调用ModifyMenuW(...)函数后,一定要调用DrawMenuBar()函数。
}

参考链接

至此记录完毕。

记录时间:2017-2-13
记录地点:深圳WZ

原文地址:https://www.cnblogs.com/ChYQ/p/6384943.html