• 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

  • 相关阅读:
    字符串中的不可见字符应该如何清除?
    字符/字段数据的合并
    分割字符串的应用
    几种分割字符串实现方法的比较
    linux的一些文件基本命令
    centos7安装es6.4.0
    Sql 语句中 IN 和 EXISTS 的区别及应用
    Springboot通过redisTemplate实现发布订阅
    代理模式
    单例模式的多种实现方法
  • 原文地址:https://www.cnblogs.com/ChYQ/p/6384943.html
Copyright © 2020-2023  润新知