(五)给窗口添加菜单
给窗口添加菜单要用到资源文件,资源文件的扩展名为.rc,保存有各种可集成在程序内部的资源(如图标、光标、位图、菜单模板、对话框模板、快捷键、字符串表等),可以在程序中方便地加载。
一、新建资源文件
右击“解决方案资源管理器”中的“资源文件”,选择添加-》添加新项
在对话框中选择Visual C++-》资源-》资源文件(.rc),点击“添加”
再次转到“解决方案资源管理器”,可以发现多了两个文件:resource.h和resource.rc,其中前者为符号定义文件,后者为资源文件的主体
二,添加菜单资源
双击resource.rc,将转到“资源视图”,右击顶层项目“Win32Project1”,选择添加-》添加资源
在对话框中,选择Menu,双击或点击“新建”
在打开的菜单编辑器中编辑刚刚插入的菜单资源,这里菜单结构如下,其中字符&可以指定助记键:
通用(&G) - Popup菜单项
关于(&A) - 编号ID_ABOUT
退出(&X) - 编号ID_EXIT
三、修改代码加载菜单
转到“解决方案资源管理器”,双击打开myfirst.c源文件,添加一行导入资源符号
<code class="lang-cpp">#include "resource.h"</code>
加载菜单有若干种方法,其中最方便的是直接在窗口类中指定菜单的编号。
转到wWinMain函数,找到我们的窗口类,修改菜单字段为我们的编号,要注意需要转换为(wchar_t*):
<code class="lang-cpp">// 窗口类设定
// 样式、函数
// 类增、窗增 (高级参数)
// 模块、图标、光标 (光标=鼠标指针)
// 背景、菜单、类名
WNDCLASS wc = {
CS_HREDRAW | CS_VREDRAW, // 样式:横向、纵向改变大小时重绘
WndProc, // 窗口消息处理函数
0, 0,
hInst, // 模块句柄
LoadIcon(NULL, IDI_APPLICATION), // 图标:默认图标
LoadCursor(NULL, IDC_ARROW), // 光标:箭头
GetStockObject(WHITE_BRUSH), // 背景画刷:白色
(wchar_t*)IDR_MENU1, // 菜单:IDR_MENU1
L"MyWindow", // 窗口类名称
};</code>
四、处理菜单消息
和按钮一样,菜单的项的消息也是WM_COMMAND,因此处理方法也是一样的,这里就不多讲了:
<code class="lang-cpp">case WM_COMMAND: // 接收到命令消息
switch (LOWORD(wp)) // 判断来源编号(包含在参数wp的低16位中)
{
case ID_BUTTON: // 来自ID_BUTTON按钮
MessageBox(hWnd, L"欢迎来到Win32编程世界", L"消息框", 0); // 弹出消息框
return 0;
case ID_ABOUT: // 来自ID_ABOUT菜单项
MessageBox(hWnd, L"我的第一个Win32程序", L"关于", 0); // 弹出消息框
return 0;
case ID_EXIT: // 来自ID_EXIT菜单项
SendMessage(hWnd, WM_CLOSE, 0, 0); // 关闭窗口
return 0;
}
break; // 消息未处理</code>
五、运行
运行效果: