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\n");
}
void CMenueditortestDlg::OnUpdateFileExit(CCmdUI *pCmdUI)
{
        // TODO: 在此添加命令更新用戶界面處理程序代碼
        // 注意此處的 pCmdUI這個指針。里面可以直接對對應的菜單UI進行操作。具體如何操作還有待研究。
        TRACE("Updatedlg\n");	
}
  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM