winapi – 在Windows中创建现代风格的动态菜单
发布时间:2020-12-14 05:41:26 所属栏目:Windows 来源:网络整理
导读:在我的基于MFC对话框的应用程序中,我使用Visual Studio资源编辑器创建了主菜单,并且在一个位置有动态菜单,在运行时创建.使用Visual Studio创建的菜单的所有部分都具有现代外观,我动态创建的子菜单具有旧外观,如下图所示. 我创建动态子菜单的代码是这样的(不
在我的基于MFC对话框的应用程序中,我使用Visual Studio资源编辑器创建了主菜单,并且在一个位置有动态菜单,在运行时创建.使用Visual Studio创建的菜单的所有部分都具有现代外观,我动态创建的子菜单具有旧外观,如下图所示.
我创建动态子菜单的代码是这样的(不是真正的代码,但真正的代码并不是那么重要): CMenu subMenu; subMenu.CreateMenu(); for (...) { subMenu.AppendMenu( MF_STRING | (isChecked ? MF_CHECKED : MF_UNCHECKED),<some menu ID>,<some menu text>); } 将此子菜单插入到它所属的位置就像这样(几乎是实际的代码): TCHAR szMenuString[256]; MENUITEMINFO mii; mii.cbSize = sizeof(mii); mii.fMask = MIIM_STATE | MIIM_ID | MIIM_SUBMENU | MIIM_CHECKMARKS | MIIM_DATA | MIIM_STRING | MIIM_BITMAP | MIIM_FTYPE; mii.dwTypeData = szMenuString; mii.cch = sizeof(szMenuString) / sizeof(szMenuString[0]); GetMenu()->GetMenuItemInfo(ID_SUBMENU,&mii); mii.fMask |= MIIM_SUBMENU; mii.hSubMenu = subMenu.GetSafeHmenu(); GetMenu()->SetMenuItemInfo(ID_SUBMENU,&mii); 如何创建子菜单,使其在样式上与主菜单的其余部分相同? 我的代码是用MFC编写的,但你的答案不一定是在MFC中(也可能不是). 解决方法
我发现了解决方案,但并不真正理解发生了什么.解决方案是防止在函数末尾调用subMenu的析构函数上的DestroyMenu.这可以通过调用subMenu.Detach()或使subMenu成为指向CMenu的指针来完成.
我不明白的是为什么DestroyMenu将新风格的菜单变成旧式.我希望菜单被销毁并且不显示,或者在SetMenuItemInfo中复制,因此保留了它的样式.谁提供这个答案得到我的投票:) 此外,我想知道我是否通过在此处调用Detach来产生资源泄漏,或者我的动态子菜单是否随主菜单一起被破坏.积分等待提供答案的人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 什么时候* Window焦点*会在Android中发生变化?
- Windows / DOS程序集 – 简单数学
- windows – C运行时对象,dll边界
- 如何在PowerShell中运行Windows安装程序并获取成功/失败的值
- windows-server-2008 – “其他”ntp文档(HP / Epson打印)
- winapi – 如何从Cygwin程序中调用Win32 API
- windows-server-2012 – Windows Server 2012默认RAM分配策
- remote-desktop – 如何从Windows远程桌面服务器2008 R2的登
- 基于Active Directory的SAML身份提供程序
- group-policy – 如何恢复在Windows服务器上完成的组策略编