我正在尝试使用一些系统图标,如SIID_DOCNOASSOC
和SIID_FOLDER
并绘制它们。在Win10上没有HICON而没有Win7的面罩
我有问题,虽然我的代码在Windows 7中按预期工作,但在Windows 10上,检索到的图像缺少其掩码。我无法弄清楚为什么(PICONINFO.hbmMask
字段,我可以检索GetIconInfo
非空,表示确实有一个掩码)。
我的代码是用Xojo,它采用VB的方言,但应该几乎没有关系,因为我得到了它在Win 7个工作,我会想:
dim info as SHSTOCKICONINFO
info.cbSize = SHSTOCKICONINFO.Size
SHGetStockIconInfo (SIID_DOCNOASSOC, SHGSI_ICON, info)
dim iconHandle as Integer = info.hIcon
dim destDC as Integer = ... // intialized outside
DrawIconEx (destDC, 0, 0, iconHandle, 0, 0, 0, 0, DI_MASK)
上面的代码中取出的一个纯文件的图标,然后绘制其掩码。虽然Win 7上的蒙版是正确的,但蒙版在Win 10上的整个图标区域都是黑色的。
为什么会发生这种情况?
你似乎忽略返回值,所以没有错误检查 –
Win10更可能是64位版本,因此一个pinvoke声明错误可以轻松地字节。这是否是同一个图标也不明显,Win10会使用更多的更好的图标。嵌入PNG图像并且没有蒙版的那个。因为PNG已经支持透明度,所以没有必要。 –
[ICO文件格式的演变,第4部分:PNG图像](https://blogs.msdn.microsoft.com/oldnewthing/20101022-00/?p=12473)。 – IInspectable