选择项目后Win32菜单位图透明度

时间:2017-06-30 12:56:08

标签: c winapi bitmap menu transparency

我正在尝试将图标图像添加到我的win32应用程序的上下文菜单中

这是我的代码

hMenu = LoadMenuIndirect( LoadResourceLang( RT_MENU, resID ) );

hMenu = ::GetSubMenu( hMenu, 0 );

HBITMAP hBitmap = (HBITMAP)LoadImage((HMODULE)g_hInst,MAKEINTRESOURCE(IDB_BM_PAUSE), IMAGE_BITMAP, 16, 16, LR_CREATEDIBSECTION );

SetMenuItemBitmaps( hMenu, 2, MF_BITMAP|MF_BYPOSITION, hBitmap, hBitmap );

::TrackPopupMenu( hMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, m_hWnd, 0 );

首次显示菜单时,一切正常。

但是当光标悬停在菜单项上并且绘制了选择矩形时,位图重绘不正确,透明度将被忽略。

以下是截图:

enter image description here

enter image description here

有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这些位图仅用于简单的复选标记等,必须为单色位图。只要你只需要一种颜色,你的用法就好了。

  

The selected and clear bitmaps should be monochrome。系统使用布尔AND运算符将位图与菜单组合在一起,使白色部分变为透明,黑色部分变为菜单项颜色。如果使用彩色位图,则结果可能不合适。

理想情况下,您应该动态生成位图,使其与CYMENUCHECK匹配。

在Windows Vista及更高版本中,也可以assign a 32bpp image到菜单项而不进行所有者绘制......