问题标签 [cmenu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
643 浏览

c++ - 如何在自绘的 MFC CMenu 派生菜单中显示复选框?

我有一个继承自 MFC CMenu 类的菜单类:MyMenu : public CMenu. MyMenu 从资源文件加载,然后更改为所有者绘制的菜单(使用CodeGuru中的代码示例,它适用于菜单项的样式)。现在我想激活菜单项左侧的复选框。

我希望复选框会出现,但它没有。首先,我尝试使用MSDN中的代码示例使用 SetMenuItemBitmaps(...) 设置复选框位图:

那没有成功。然后我尝试使用调用 SetMenuItemInfo 来设置 MENUITEMINFO,基于MSDN 上关于 MENUITEMINFO 结构的页面

最后,为了确保菜单项实际上可以更改,我添加了一行

...,这将导致使用指向 menuProperties 的 lpDrawItemStruct->itemData 调用 DrawItem:效果很好。

我的所有者绘制的菜单中仍然没有复选框。我错过了什么?如何将复选框添加到所有者绘制的 MFC PopupMenu?

0 投票
1 回答
339 浏览

checkbox - 如何在 VS2015 中获取系统默认复选框 BITMAP?

我想获取系统的默认复选框,以便在所有者绘制的 MFC 菜单中显示它。我已经阅读了这个问题,但这并没有回答我的问题。

我想实现这一行:

我从MSDN获得的,在菜单中模拟复选框部分

我收到此错误:错误 C2065 'OBM_CHECKBOXES': undeclared identifier 如果我自己定义它:#define OBM_CHECKBOXES 32759,然后运行代码,则 LoadBitmap 返回一个句柄。在 VS2015 我看到这个:hbmpCheckboxes 0xc305143c {unused=??? },所以对我来说似乎返回了一个无效的位图句柄。我认为缺少的不仅仅是 OBM_CHECKBOXES 定义,但我不知道是什么。

  • 有我应该包含的文件吗?
  • 是否有我需要链接的 DLL?
  • 有我应该设置的项目设置吗?
  • 或者...?
0 投票
1 回答
572 浏览

mfc - 如何在 MFC 应用程序中调整应用程序菜单栏的大小?

我正在使用 MFC,并且成功地创建了自定义绘制的菜单。每个菜单项都被正确测量和绘制,除了主级别项。我唯一无法完成的是重绘应用程序菜单栏。

我附上了两张图片:

  1. 第一个显示菜单栏的一部分。字体 Consolas 11pt 绘制正确。按钮的宽度计算正确,按钮需要分布在两行中。
  2. 第二张图片显示了相同的菜单栏,字体为 Consolas 20pt。现在菜单需要三行来包含所有菜单项。但是,每个单独行的高度不会更新。(在调试时,我看到 MeasureItem 覆盖计算每个菜单项的正确高度)。在菜单栏下方,有一个工具栏 (BCGToolBar),用于计算其栏的正确高度。

所以无论字体大小是什么,应用程序菜单栏永远不会改变它的高度?

如何在此 MFC 应用程序中调整应用程序菜单栏的大小?

两行正常字体大小的菜单 两行大字体菜单

到目前为止,我尝试过的事情是以不同的顺序遵循代码行:

0 投票
1 回答
196 浏览

mfc - 处理动态填充的 CMenu 消息

我正在一个 MFC 应用程序中实现一个右键菜单,其内容直到运行时才知道。

虽然将菜单项添加到CMenu对象很简单,但我还没有找到一种方法来处理每个菜单项发送的消息。

我正在研究的一种技术是为每个动态创建的菜单项分配相同的资源 ID,并通过一个回调处理所有消息,该回调将包含适当处理每条消息的逻辑。这种方法的问题在于,除了杂乱无章之外,CMenumenuitem 消息是使用ON_COMMAND需要无参数回调的宏捕获的,因此除了隐含信息被具有特定资源的资源调用之外,没有任何信息传递给它ID。

我尝试使用ON_MESSAGE宏来捕获消息,而不是作为它使用接收WPARAMLPARAM参数的回调,但从未调用过回调,因此该选项似乎已失效。

在我看来,必须有一种方法来实现我正在尝试做的事情,但到目前为止我还无法弄清楚。任何帮助深表感谢。

0 投票
2 回答
1410 浏览

mfc - 如何显示具有透明背景的菜单位图

我正在使用这段代码:

看起来像:

菜单

这只是一个测试图像:

位图

如何让我的图像看起来像具有透明背景?

它是 24 位图像。

我已经看到了,但我无法解决。

我调整为以 192/192/192 为背景的 8 位图像并加载如下:

如果我不运行 WindowsBlinds,这似乎更好:

菜单

但是当我重新打开 WindowsBlinds 并再次显示时:

菜单

我自己是色盲,但我可以看出背景实际上与对话框背景匹配,而不是菜单颜色背景。

这是我能做的最好的吗?

我怎样才能将 24 位或 32 位图像作为菜单位图?

0 投票
1 回答
244 浏览

c++ - C++ - MFC - 设置CMenu的高度

如果 a 有没有设置高度的选项CMenu

我知道可以绘制自定义菜单项并在那里使用自定义大小CMenu::MeasureItem,但是有没有办法设置/更改菜单(栏)本身的高度?

谢谢。

0 投票
2 回答
193 浏览

winapi - MFC:如何为 OnInitMenuPopup 上添加的 CMenu 项目添加位图?

我需要根据需要添加自定义菜单项。我发现OnInitMenuPopup(WM_INITMENUPOPUP) 可以满足我的需要,但我无法在菜单上的文本旁边显示一个图标?我尝试使用m_MyGraphicas a使用 16x16 png 图形CPngImage,尝试将其附加到 a CBitmap,尝试将图形保存为 .bmp 并加载为CBitmap. 我试过不在负载上设置图形,但随后尝试使用SetMenuItemBitmaps(),我尝试了 13x13 图形,我尝试了 15x15 图形(匹配GetMenuCheckMarkDimensions())。菜单项旁边永远不会显示图形?我做错了什么或错过了什么?

蒂亚!

0 投票
1 回答
86 浏览

visual-c++ - 有没有更简单的方法来确定没有菜单项设置为 MF_CHECKED

我的代码本身工作正常,我想知道是否有更简单的方法来确定是否至少检查了我的一个菜单项。


语境

菜单被 a 使用,CMFCMenuButton如下所示:

菜单

行为

菜单本质上是一组选中的菜单项,用户可以根据需要进行切换。然后,应用程序会根据这些菜单项的状态执行一些操作。基本的东西。

目前我有这个代码片段(工作正常):

我只是想知道是否有更快的方法来查看是否没有设置任何菜单项MF_CHECKED?因为如果可以检测到这种情况,我可以GetPublisher一起绕过代码并将它们添加到列表中。

if我意识到我可以在一个返回的专用函数中重复我现有的语句bool并这样做,但有没有更简单的方法?


更新

菜单项的资源 ID 值是连续的,如下所示:

但是菜单中确实有一个分隔符。


宏的问题

我想我会在测试项目中尝试宏观想法。我在头文件中插入了这个宏:

我添加m_menuExtraPublisherFilter为 a 的CMenu成员变量CDiialogEx。然后我创建了只使用标准条件的虚拟资源 ID ID_TEST,因为我无法访问演示中的工具库。在OnInitDialog我尝试过:

但它崩溃了。为什么?

在此处输入图像描述

0 投票
0 回答
85 浏览

c++ - 如何去除MFC中弹出菜单的边框

我有从类继承的自定义CMenu类。我正在尝试更改菜单项的背景颜色。但菜单项的边框保持不变。以下是我的重写功能:

如何删除边框或更改边框颜色?

我指的是弹出菜单周围的灰色边框

在此处输入图像描述