第三章(2) 菜单资源--定义资源ID时的陷阱

本文探讨了在使用菜单资源时遇到的问题,特别是关于菜单按钮ID的定义方式。通过对比书中示例与实际代码,发现从0开始的ID会导致部分菜单项无法正常工作,并最终解决了这一问题。

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

        《大师技巧》接下来继续资源讲解,介绍了字符串资源,WAVE(声音)资源,菜单资源。


        注意,WAVE资源开始,需要包含mmsystem.h并且添加winmm.lib,我在VS2010里winmm.lib仅都找不到,于是学会用语句#pragma comment(lib,"winmm.lib")来添加LIB。

        接着,在使用菜单资源的时候出现了问题。

	case WM_COMMAND:
		switch(LOWORD(wparam)){
		case FuMenu_MusicStart:
			PlaySound("FuMusic_Pal4Open",ghinstance,SND_RESOURCE|SND_ASYNC|SND_LOOP);
			break;

		case FuMenu_MusicStop:
			//PostQuitMessage(0);
			//MessageBox(hwnd,"text1","About FuApp",MB_OK|MB_ICONEXCLAMATION);
			PlaySound(NULL,ghinstance,SND_PURGE);
			break;

		case FuMenu_About:
			MessageBox(hwnd,"text1","About FuApp",MB_OK|MB_ICONEXCLAMATION);
			break;

		case FuMenu_Exit:
			PostQuitMessage(0);
			break;

		default: break;
		}
		break;

上面是为菜单按钮添加到的事件,前两个按钮播放和停止音乐,接着ABOUT按钮弹出一个对话框,一切看起来都没有问题,但是编译后,点击About没有弹出消息。




   


反复检查,每句话都符合语法,将MessageBox移到播放音乐按钮除,能够成功弹出消息。

于是我照着原著,一句一句修改成书上的样子。终于发现错误所在:


#ifndef RESOURCE_H
#define RESOURCE_H

#define FuMenu_MusicStart 0001
#define FuMenu_MusicStop 0002
#define FuMenu_About 0101
#define FuMenu_Exit 0102

#endif

        这是RC包含的资源头文件,里面定义了按钮的ID,我的ID是从0开始的,而书上的是从1开始,而头两个ID,0001,0002,可以成功运行,但是这样就以为数字开头的0没有问题,那就错了,About,Exit不能运行就是因为0101前面的0,我重新将ID设置为平时的数字后:


#ifndef RESOURCE_H
#define RESOURCE_H

#define FuMenu_MusicStart 1101
#define FuMenu_MusicStop 1102
#define FuMenu_About 2101
#define FuMenu_Exit 2102

#endif

        程序正常运行了。

        虽然不知道怎么回事,但是这提醒我们,在定义数字的时候,最好取正常数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值