在CMenu中显示具有正确透明度的菜单项旁边的位图的简单方法

时间:2013-10-10 22:19:18

标签: c# winapi bitmap cmenu

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

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

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

enter image description here

如您所见,菜单项上有白色背景。这真是令人沮丧地接近我想要的。如何让透明度问题消失?我在下面的菜单项中附上了我使用的确切图像:

enter image description here

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

  

选定且清除的位图应为单色。系统使用   布尔AND运算符,用于将位图与菜单组合在一起   白色部分变得透明,黑色部分变成透明   菜单项颜色。如果您使用颜色位图,结果可能是   不希望的。

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

修改

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

在调用SetMenuItemInfo之前,这就是MENUITEMINFO结构的样子:

enter image description here

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

hMenu - ContextMenu的句柄?

uItem - 0(第一项索引?)

fByPosition - true

lpmii - (上面的结构内容)

1 个答案:

答案 0 :(得分:1)

添加菜单项时,只需设置MIIM_BITMAP标记,然后在HBITMAP结构的hbmpItem成员中传递MENUITEMINFO即可。如果您的位图是32bpp并预先乘以alpha,那么它将正确显示。