系统托盘图标色深的问题
lqbn 2005-06-28 02:40:39 我们知道在Win2k下系统托盘区只能显示16色的图标(当然打了第三方补丁的除外),而在WinXP和Win2k3下则没有这个限制。如果图标只包含一个256色的图像,那么系统就会按照一定的算法自动把这个图像转换成16色,然后再进行显示。有些图标经过这样的转换之后,就变得非常难看了。于是有些程序,比如说MSN Messenger,就专门作了16色的图标,用来在系统托盘无法显示256色图标的时候显示。这样就有一个问题,如何才能判断系统托盘最多可以显示多少位色的图标呢?
我自己写了一个测试程序,其中一个图标包含有两个图像,一个为16x16 256色的,一个为16x16 16色的。可问题是不管用何种方式(LoadImage和LoadIcon)加载,在Win2k下,系统好像加载的仍然是256色的图标。看了MSDN中的一篇文档,http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/icons/abouticons.asp,其中有这样一句话:
Note The system treats all color depths of 8 or more bpp as equal. Therefore, there is no advantage of including a 16x16 256-color image and a 16x16 16-color image in the same resource — the system will simply choose the first one it encounters. When the display is in 8-bpp mode, the system will choose a 16-color icon over a 256-color icon, and will display all icons using the system default palette.
就是说,如果让系统自己处理的话,它是不会区分16色和256色的图像的。但我如何才能达到MSN Messenger那样的效果呢?最好不要判断系统版本,然后再手动加载。因为最开头也说过了,在Win2k下,可以通过打第三方补丁的方法支持在系统托盘显示256色的图标。我试过了,打了这个补丁之后,MSN Messenger就会自动在系统托盘显示256色的图标了,也就是说,它不是通过判断系统版本来进行加载的。