背景
本篇旨在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
");
}
void CMenueditortestDlg::OnUpdateFileExit(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
// 注意此处的 pCmdUI这个指针。里面可以直接对对应的菜单UI进行操作。具体如何操作还有待研究。
TRACE("Updatedlg
");
}
- 动态改变
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