windows编程笔记【六】使用菜单和相应菜单事件

本文介绍在Windows游戏开发中如何创建并使用菜单。通过VS2017环境,讲解了三种关联菜单的方法:在窗口类中关联、在创建窗口函数中关联及使用SetMenu函数。此外,还介绍了如何响应菜单事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本笔记源自windows游戏编程大师技巧第二版3.2章,记做学习随笔。

使用vs2017环境编译。

 首先接上一篇笔记创建资源的办法,来新建一个Menu文件。

 

再输入一个二级菜单。

 

打开resource.h后系统帮我们创建了两个宏定义,其中IDR_MEUN1也就是三位数的就是菜单编号,五位数的选项ID,之后会用到。

使用菜单

1.关联在window类里:

使用我们刚刚创建的菜单有三种方式:

他可以直接在创建的Windows类里,也就是WNDCLASSEX类里使用,方式如下:

WNDCLASSEX winclass;					//新建窗口类
.
.
winclass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);			//用于加载和选用窗口
.
.

直接使用MAKEINTRESOURCE()填入宏定义即可。设置类的lpszMenuName属性,他就是用来加载菜单的。

效果如下:

 

2.关联在创建窗口函数里:

直接定义在菜单里有一个问题,对于这了类创建的所有窗口都会有这个菜单,所以我们也可以只设计某个窗口的菜单。

在创建窗口函数也是可以的,代码如下:

hwnd = CreateWindowEx(NULL,
		"WINCLASS1",	//winclass.lpszClassName设置的字符,是类的别名。
		"YouWindows",	//窗口的名称
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,	//一些窗口属性
		0, 0,			//窗口位置
		400, 400,		//窗口宽高
		NULL,			//父窗口句柄
		LoadMenu(hinstance, MAKEINTRESOURCE(IDI_ICON1)),			//附属窗口句柄
		hinstance,		//WinMain第一个实参,程序句柄。
		NULL			//null就可以了
	)
LoadMenu(hinstance, MAKEINTRESOURCE(IDI_ICON1)), 

使用这个函数也可以做到。

 

3.使用SetMenu()函数关联

HMENU hunmu = LoadMenu(hinstance, MAKEINTRESOURCE(IDR_MENU1)); //定义meun的句柄。
SetMenu(hwnd, hunmu);//参数为窗口句柄和meun句柄。

这样也可以,写在创建窗口之后即可。

 

相应菜单事件

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

对于菜单事件消息

msg——WM_COMMAND

lparam——发出消息的窗口句柄

wparam——选择中的菜单ID

case WM_COMMAND:
		{
			switch (LOWORD(wparam))
			{
			case ID_Menu:
			{
				MessageBox(NULL, "窗口", "窗口", MB_OK);
			}break;
			default:
				break;
			}
		}

即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值