昨天做一个新功能,获取桌面的图标并在自己的窗口上显示。开始做了一个demo,wtl的gdi实现的界面一切顺利,但换到gdi+的工程里面的时候,在绘制icon的时候遇到了麻烦,图标显示直接把alpha通道给丢失了,图标出现了好多黑色的阴影。
网上搜索了半天,发现很多人都遇到了这个问题Bitmap::FromHICON转化之后造成的icon的alpha通道丢失了,这种情况出现很多是绘制imagelist里面的item。网上有人提到是“问题在bitmap=Gdiplus::Bitmap::FromHICON(rInfo.hIcon); ,在这里对alpha的处理有问题,再转换成Format32bppArgb格式的就可以了。”,很遗憾转换完成之后还是老样子,猜想FromHICON已经把数据丢失了,再转似乎也不会有什么意义了,不知道是不是还有其他的转换方式。网上又搜了半天,老外也提到了一些解决办法,基本上都是围绕Format32bppArgb的方案,尝试之后还是没有效果。
最终,不得已之下,只好在绘制icon的时候换成gdi了。