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

标签 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

有什么建议可以解决这个问题吗?

最佳答案

这些位图仅应用于简单的复选标记等,并且必须是单色位图。只要您只需要一种颜色,您的使用似乎就很好。

The selected and clear bitmaps should be monochrome. The system uses the Boolean AND operator to combine bitmaps with the menu so that the white part becomes transparent and the black part becomes the menu-item color. If you use color bitmaps, the results may be undesirable.

理想情况下,您应该动态生成位图,以便它与 CYMENUCHECK 匹配。 .

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

关于c - 选择项目后 Win32 菜单位图透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44847043/

相关文章:

c# - Bitmap.GetPixel() 不返回任何内容

c - 使用不同的数据类型逐行读取文件中的数据

c - SPARC 和 x86 GCC 一个 C 代码的不同结果

c++ - 右侧的非法 token ::

c++ - 从 winapi 套接字正确接收

c# - 将布局保存到位图(Xamarin)

我们可以使用不带 usleep() 的咨询记录锁定在父子之间交替吗?

c - 在 C 中如何 strcmp 只是开头的 2 个字符然后连接?

delphi - 创建透明位图并UpdateLayeredWindow

android - 如何在位图周围制作发光效果?