【问题标题】:XP Popup Menu Icons not Transparent when highlighted突出显示时 XP 弹出菜单图标不透明
【发布时间】:2022-01-12 03:17:11
【问题描述】:

我知道 XP 已经过时了,但我只需要知道这里的问题。

我看不到一种方法可以提供带有图标或带有蒙版的位图之类的弹出菜单,只有位图。 So, if I use a compatible bitmap, it will look transparent when the selection bar is not highlighting it, but when highlighted the entire graphic still shows (with a square button face color around it).

如果我使用带 alpha 的 32 位 DIB,则透明项目只会显示黑色(而 Windows 10 可以很好地处理透明度 - 我认为 Vista 和 Win7 也可以)。

如果我在 DIB 中手动将所有 A 设置为 0,它仍然是黑色的(在 Win10 上,颜色通常显示为白色的图像 - 我原以为它会是透明的)。

无论如何,有没有办法为菜单提供一个图标(因为它有一个蒙版)或一个带蒙版的位图,这样 XP 之类的东西就可以自动处理它(没有所有者绘制)?

有没有办法强制将.ICO 文件加载为 256 色版本而不是 32 位 RGB/A 版本?我在.ICO 中没有 24 位 RGB 图形,所以如果它存在的话,也许 XP 会选择它?

我知道 GDI 并非在所有情况下都支持 alpha,但有时会支持,而且 Windows 版本似乎也很重要。

有人有这方面的背景,并且可以判断这是否是 32 位位图的已知 XP 问题?

【问题讨论】:

标签: winapi gdi


【解决方案1】:

在 XP 上,您必须自定义绘制,但不是全部,仅是位图/图标。

在 Windows 95/NT4 上,正确执行此操作的唯一方法是自定义绘制整个菜单项。在 Vista 之前菜单外观只改变了一次,XP 中加入了平面菜单,所以自定义绘制一切当然是可能的。

在 Windows 98/2000 前后,添加了将 MENUITEMINFO.hbmpItem 设置为 HBMMENU_CALLBACK 的功能。使用DrawIconEx 或图片列表。

Vista 添加了对 32 位 ARGB 位图的支持。你不应该在这里使用回调方法,因为这会禁用new visual style

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多