背景
本篇旨在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