Visual studio C++ MFC之Menu editor
背景
本篇旨在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
Visual studio C++ MFC之Menu editor的更多相关文章
- Visual studio C++ MFC之点击按钮(菜单栏)生成新窗口
背景 当前做的APP有菜单栏,菜单栏有一项需要对下位机相关参数进行设置,则必须弹出一个窗口来实现设置操作.本篇即对点击菜单栏生成新的窗口,在新的窗口内完成相应计划后结束新窗口并返回原窗口的方法进行简述 ...
- Visual Studio C++ MFC界面常用参数更改(改变图标,添加控件,调试打印函数等等)
背景 需要使用Visual Studio C++做一些界面.此篇文章既是记录Visual Studio C++在调整界面时常常遇见的问题. 正文 一.如何更改窗体图标,以及生成的.exe图标 更改窗体 ...
- Visual studio C++ MFC的库函数末尾添加“A”和“W”的意义
背景 在使用Visual studio C++ MFC库函数ModifyMenu(...)函数,在Visual studio自动代码补全里提示没有ModifyMenu(...)这个函数,倒是有Modi ...
- Visual Studio 安装 MFC
**Visual Studio 安装 MFC 库** 打开 Visual Studio Installer //程序 选择对应的版本 (本人 VS2022)->修改 [点击]单个组件 ...
- Visual Studio 2015 MFC之Button颜色变化-断点调试(Debug)
软件开发,对自己的程序进行调试很重要,本次文章在上一边随笔的基础上,介绍一下Button控件做显示灯的用法,Button控件的添加和变量设置等可以参考下面的的链接:Visaul Studio 2015 ...
- Visual studio C++ MFC之列表控件CListCtrl Control
背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...
- Visual studio C++ MFC之树形控件Tree Control
背景 本篇旨在MSDN帮助文档下总结树形控件Tree Control的使用,并列出碰到的具体问题. 正文 树形控件Tree Control的类则是CTreeCtrl,具体成员对象详见链接,以下则描述一 ...
- 【Visual Studio】MFC编辑框自动换行,垂直滚动条自动下移(转)
原文转自 http://blog.csdn.net/wu_lai_314/article/details/8317395 1.新建一个编辑框控件(Edit Control),将其多行(Multilin ...
- How to: Run Tests from Microsoft Visual Studio
https://msdn.microsoft.com/en-us/library/ms182470.aspx Running Automated Tests in Visual Studio Visu ...
随机推荐
- java 时间格式化中的模式字母
java日期格式化中的模式字母有特定的意义,由于没有注意,今天在做工程的时候导致出现了奇怪的日期: 错误写法如下: 然而得到了错误的结果: 正确写法如下: 这样就得到了正确的结果 mm指的是分钟,MM ...
- Android学习--探究服务(二)
服务的基本用法 定义服务: 我们需要先创建服务,我们要使用就的利用一个类去继承它,然后重写它的几个方法,具体的我们看下面的代码: 我们重写了下面三个方法: * onCreate() ...
- Scala 实现快速排序和归并排序
def quickSort1(array: Array[Int]): Array[Int] = { def swap(x: Int, y: Int): Unit = { val tmp = array ...
- 利用 ildasm 修改被编译后DLL文件
在开发中遇到这样一个场景,需要修改一个dll文件(.NET程序集)中某些地方的类型名称,但没有源代码,只能修改IL代码. 操作步骤如下: 1. 运行ildasm ildasm是由微软提供的.NET程序 ...
- POJ 1912 A highway and the seven dwarfs (凸包)
[题目链接] http://poj.org/problem?id=1912 [题目大意] 给出一些点,表示一些屋子,这些屋子共同组成了村庄,现在要建一些高速公路 问是否经过了村庄. [题解] 这些屋子 ...
- 【后缀数组】【线段树】poj3974 Palindrome
考虑奇数长度的回文,对于字符串上的每个位置i,如果知道从i开始的后缀和到i为止的前缀反转后的字符串的lcp长度的话,也就知道了以第i个字符为对称中心的最长回文的长度了.因此,我们用在S中不会出现的字符 ...
- 【费用流】【Next Array】费用流模板(spfa版)
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> using ...
- 上传ipa文件时报错 Your account already has a valid iOS distribution certificate
这个问题是因为你本机的生产证书是在别人的电脑上创建的,所以才会提示你已经有一个有效的生产证书,但是没有安装到本地:
- RxJava 2.x 理解-2
操作符总结: http://reactivex.io/documentation/operators.html https://github.com/ReactiveX/RxJava/wiki Ope ...
- cssz中<a>标签鼠标选中去除选中边框
IE: <a href="#" hidefocus="true"></a> 非IE: a:focus { outline:none; } ...