VC++ MFC 系统菜单添加子菜单 CMENU submenu GetSystemMenu

本文详细介绍了如何在Windows系统中自定义菜单及子菜单的方法,包括使用AppendMenu和InsertMenu函数来添加菜单项,并通过响应WM_SYSCOMMAND消息来处理用户选择。还提供了具体的代码实现,帮助开发者轻松实现菜单功能。
部署运行你感兴趣的模型镜像

在系统菜单怎么添加一个菜单我就不说了,网上比较多,但是也比较笼统,后面会有代码放出。这里主要说的是怎么添加子菜单,使用AppendMenu和InsertMenu都可以,然后在处理的时候判断ID就可以了,只要ID不一样就可以识别点击的是哪个菜单。Step by step:

1、定义一个菜单列表,我喜欢这样搞,比较方便:

struct MenuIDAndString_s {
	UINT MenuId;
	UINT bd;
	char *str;
};
static struct MenuIDAndString_s G_bdMenuIDList[] = {
	{IDI_SYS_MENU_9600,9600,"9600"},
	{IDI_SYS_MENU_115200,115200,"115200"},
	{IDI_SYS_MENU_460800,460800,"460800"},
	{IDI_SYS_MENU_921600,921600,"921600"}
};

其中,IDI这些要去resource.h进行定义。

2、在initdialog里加上新的menu:

if (pSysMenu != NULL){
		pSysMenu->AppendMenu(MF_SEPARATOR);
		pSysMenu->AppendMenu(MF_STRING, IDI_SYS_MENU_ONTOP, LocalString(IDS_ALWAYS_ON_TOP));

		// 把新菜单加上去
		CMenu mnuBD;
		mnuBD.CreateMenu();
		for (int i = 0; i < ARRAYSIZE(G_bdMenuIDList); i++) {
			mnuBD.AppendMenu(MF_STRING, G_bdMenuIDList[i].MenuId, G_bdMenuIDList[i].str);
		}
		pSysMenu->AppendMenu(MF_POPUP|MF_STRING, (UINT)mnuBD.m_hMenu, LocalString(IDS_BAUDRATE));
		
		//pSysMenu->InsertMenu(pSysMenu->GetMenuItemCount(),MF_POPUP|MF_STRING,(UINT)mnuBD.m_hMenu, LocalString(IDS_BAUDRATE));
		mnuBD.DestroyMenu();

如上所示,AppendMenu和InsertMenu都是可以用的。

3、响应系统消息ON_WM_SYSCOMMAND():

/* 响应系统菜单 */
void CCANDaemon::OnSysCommand(UINT nID, LPARAM lParam)
{
	static bool bIsOnTop = false;
	CMenu* pSysMenu = GetSystemMenu(FALSE);

	// 所有预定义的窗口菜单项的标识符数大于0xF000。如果一个应用程序增加命令到窗口菜单,应该使用小于0xF000的标识符数
	if (nID == IDI_SYS_MENU_ONTOP){
		TRACE("进到 常在上面 菜单了\r\n");
		
	}
	else if (nID>=IDI_SYS_MENU_9600 && nID<= IDI_SYS_MENU_921600) {
		
		for (int i = 0; i < ARRAYSIZE(G_bdMenuIDList); i++) {
			if (G_bdMenuIDList[i].MenuId == nID) {
				pSysMenu->CheckMenuItem(G_bdMenuIDList[i].MenuId, MF_CHECKED);
				G_Settings.uBaudRate = G_bdMenuIDList[i].bd;
			}
			else
				pSysMenu->CheckMenuItem(G_bdMenuIDList[i].MenuId, MF_UNCHECKED);
		}
	}
	
	else{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}
看到了吧,只要id是我们自定义的,就可以在里面对这个菜单项任意操作了,比如enable/disable等等。

就这么简单,妈的居然没发现有我写的这么详细的,都几把说如何插入、删除,tmad有个鸟用!




您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值