1

首先,我不是 C++ 开发人员,我主要使用 C# 进行编程。我正在尝试使用 .NET 中的 ContextMenu(是的,我知道 ContextMenuStrip)类,它是我的应用程序中 CMenu 的包装器。

如何在具有适当透明度的菜单项旁边显示图像?

到目前为止,我所做的是在我的菜单项上调用SetMenuItemBitmaps,这是附加的结果:

在此处输入图像描述

如您所见,菜单项上有白色背景。这与我想要的非常接近。我怎样才能消除透明度问题?我已在此菜单项上附上了我在下面使用的确切图像:

在此处输入图像描述

我知道 SetMenuItemBitmaps 不适用于彩色图像。

选定的和清除的位图应该是单色的。系统使用布尔 AND 运算符将位图与菜单组合,使白色部分变为透明,黑色部分变为菜单项颜色。如果您使用彩色位图,结果可能不理想。

那么这样做的正确(希望是简单的)方法是什么?

编辑

我尝试的另一件事是调用 SetMenuItemInfo,但我不断收到错误 87(无效参数)。

这是我调用 SetMenuItemInfo 之前 MENUITEMINFO 结构的样子:

在此处输入图像描述

我在 SetMenuItemInfo 上调用的参数值为:

hMenu - ContextMenu 的句柄?

uItem - 0(第一项索引?)

fByPosition - 真

lpmii - (上面的结构内容)

4

1 回答 1

1

添加菜单项时,只需设置MIIM_BITMAP标志并传入结构成员即可HBITMAP。如果您的位图是 32bpp 并带有预乘 alpha,那么它将正确显示。hbmpItemMENUITEMINFO

于 2013-10-10T22:23:08.713 回答