背景
本篇旨在MSDN幫助文檔下總結Menu editor的使用,並列出碰到的具體問題。
正文
-
創建Menu Editor
打開鏈接MSDN之Creating a Menu。按照文檔的方法創建Menu Editor,最后點擊編譯,你會發現你添加的Menu資源文件並沒有按照預想顯示在你的窗口里。這是因為我們還少了一個步驟,此步驟在該文檔里沒有提及,也許在另一個我不清楚的文檔里。回到正題,添加的Menu沒有顯示在你創建的窗口里,是因為沒有建立Menu與Dialog的鏈接,建立連接的辦法既是,先記住創建的Menu的ID號,接着點開Dialog的屬性框,找到屬性menu,在該欄選擇新建的Menu資源ID,則編譯后就會發現Menu出現在了對應的窗口了。 -
創建Menu下的Item的命令(Command)
譬如說,Menu有個名為file的Item,點擊file要能實現打開文件的操作。具體實現辦法既是,在該Item右擊添加事件處理程序,消息類型有COMMAND和Update_Command_UI,前者是處理該菜單欄處理的實際內容,后者用改變UI顯示。類列表就很好理解,該Menu在哪個窗口內則選擇哪個窗口的類。創建完成后即會產生對應的一下兩個函數:
void CMenueditortestDlg::OnFileExit()
{
// TODO: 在此添加命令處理程序代碼
TRACE("Menudlg\n");
}
void CMenueditortestDlg::OnUpdateFileExit(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用戶界面處理程序代碼
// 注意此處的 pCmdUI這個指針。里面可以直接對對應的菜單UI進行操作。具體如何操作還有待研究。
TRACE("Updatedlg\n");
}
- 動態改變
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()函數。
}
參考鏈接
- MSDN之Menu Editor;
- MSDN關於Menus的所有類成員;
- Menu類中的成員函數GetMenu(...);
- Menu類中的成員函數ModifyMenu(...);
至此記錄完畢。
記錄時間:2017-2-13
記錄地點:深圳WZ
