VS2010添加菜单
MFC class wizard(类向导)
project:当前工程名
class name:需要编辑消息映射(将消息与处理函数一一对应)的类名
object ID:该类中当前可以产生消息的对象ID。
Message:该对象能产生的消息
Member function:该类的成员函数。可以添加(Add function),删除(Delete fun…)。
Add class:添加新的类。右下有个小箭头,可以选择“new”或从类库中导入。
SDI:单文档 MDI:多文档
1. 创建MDI工程:
打开VS2010,文件,新建,project,选MFC应用程序(MFC AppWizard),填入名称:Menu1,确定。
选多个文档,完成。
编译运行一下,弹出的窗口是Menu11:
2.完成后在左侧点资源视图,Menu, IDR_Menu1TYPE,会发现,Menu框架中已经有了“文件,编辑,视图,帮助”等菜单。
单击“帮助”后面的“请在此处输入”,并输入“Movie(&M)”,输入(&M)的作用是用户可通过“Alt+m”直接打开该菜单项,输入后 ‘&’自动消失。
左下角的“菜单编辑项”中,enable和popup默认为true。
因为Popup为true,即允许有子菜单弹出,所以不用输入ID,下面杂项的ID为“无法编辑ID”。
2. 单击Movie下面的框,并在里面输入‘赤壁之战(&C)’。(&C)表示直接在键盘上按‘C’,即可选择“赤壁之战”。
这时,他变成了这个样子,并且左下角的‘菜单编辑器’里出现了内容。
在菜单编辑器里,注意到popup为false,这是可以编辑ID,向下拉菜单,在“杂项”中,将ID改为ID_MOVIE1,在Prompt中填入“打开赤壁电影”。此处,直接单击,就可以修改或输入。
3. 为菜单添加消息处理函数
直接在最上一行菜单栏选‘项目’,类向导,弹出class wizard。
类名为CMenu1App,对象(ID)选ID_MOVIE1,消息(S)选COMMAND。
添加处理程序,成员函数名“OnMovie1”,确定。
在成员函数中,出现了OnMovie1,选择它,点“编辑代码”。
自动进入Menu1.cpp,并出现了OnMovie1():
在OnMovie1函数中输入代码:
void CMenu1App::OnMovie1( )
{
MessageBox(0,“太经典了!”,“赤壁之战”,MB_OK);
}
此时编译运行,点这个。
如果此时 MessageBox有Error,可能是字符串的问题:
error C26: “MessageBoxW”不能将参数从”const char [9]”转换
为”LPCWSTR”与指向的类型无关。转换要求reinterpret_cast、C 样式转换或函数样式转换。
解决方法一:最上一行菜单,项目,Menu1属性,配置属性,常规,字符集“使用多自己字符集”
解决方法二:在新建项目时,将“使用Unicode库”的对号去掉。
若有错误:
LINK : fatal error LNK1168: 无法打开 “F:\\learn\\Menu1\\Debug\\Menu1.exe” 进行写入
解决方法:ctrl+alt+del,启动任务管理器,找到Menu1,结束进程。
运行程序,点movie 赤壁之战,弹出MessageBox“太经典了”:
删除菜单,按del键即可。