我们知道在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色的图标了,也就是说,它不是通过判断系统版本来进行加载的。
解决方案 »
- C/C++实现画图铅笔功能 怎么做? 最好考虑到画图效果清晰
- wireshark分析.cap文件问题?
- CString数据转到BYTE数组
- 向所有还在用VC的兄弟们问声新年好,恭祝大家新春进步,家和万事兴!
- p2p中问题?NAT把数据报丢弃的问题(在线等)
- 想请教关于界面的一些问题
- VC中如何调用VB写的 DLL中的函数?
- 怎样可以让CMainFrame的成员m_cDialog,用ShowWindow(SW_SHOW)显示?
- 请问:我看关于COM的接口的书上讲:接口的定义中没有数据成员、构造函数和析构函数,但是怎么紧接着的例子里却有,这是为什么?我好痛苦啊:(
- 为什么B样条曲面没有显示
- 怎样把一个int变量转换成一个CString变量(谢谢)
- win2000 中 wininit.ini 还好用吗? 我要重启机器后删除文件
HWND hWndDTop = ::GetDesktopWindow();
HDC hDCDTop = ::GetDC(hWndDTop);
int nBitsPerPixel = ::GetDeviceCaps(hDCDTop, BITSPIXEL);然后我照葫芦画瓢,找到System Tray的窗口(类似于AnimateToTray的步骤,很多文章有介绍),结果发现得到的值跟用上面的方法得到的桌面的“颜色质量”的值是一样的。然后在显示属性中进行修改,这两个值也一起发生变化。很明显,如果这种方法有作用的话,在Win2k下获取的系统托盘的色深值应该永远是4才对。
Handle to the icon to be added, modified, or deleted. To avoid icon distortion, be aware that notification area icons have different levels of support under different versions of Microsoft Windows. Windows 95, Windows 98, and Microsoft Windows NT 4.0 support icons of up to 4 bits per pixel (BPP). Windows Millennium Edition (Windows Me) and Windows 2000 support icons of a color depth up to the current display mode. Windows XP supports icons of up to 32 BPP.来自MSDN