系统托盘中的 24 位彩色图标






2.08/5 (10投票s)
2004 年 3 月 16 日
2分钟阅读

114336

1218
关于在系统托盘中显示超过 256 种颜色的图标的文章。
引言
我在 CodeProject 上找到很多关于显示系统托盘图标的文章,但没有一篇文章允许我显示超过 256 种颜色的图标(至少我没有找到任何一篇)。我需要显示包含超过 256 种颜色的图标。通过查阅 MSDN,我找到了正确的方向。由于系统托盘图标已经有很多现成的代码,我没有重新发明轮子,而是使用了 Chris Maunder 的 CSystemTray
类,并进行了一些小的修改(与图标显示无关,而是为了使菜单更新处理程序能够正常工作。你可以将下面的代码插入 Chris 的类中,以提供一个重载函数)。所有功劳都归 Chris Maunder。
默认情况下,Visual Studio 不会在其编辑器中加载包含超过 256 种颜色的图标,如果导入这样的图标,它会将其加载为位图资源。你需要做的就是从该位图资源中提取图标。请参阅 “使用代码” 部分,了解详细信息。
背景
我从 CodeProject 上受益匪浅。我希望也能做出一些贡献。一个很小的机会摆在我面前,我抓住了它。我会尽快发布更多有用的文章。
使用代码
在你的类(这里是 CSysTray24Dlg
)中创建两个 CBitmap
类型和 HICON
类型的成员变量,以及一个 CSystemTray
对象。
CSystemTray m_TrayIcon; HICON m_hTrayIcon; CBitmap m_24bitBMP;
现在在 OnInitDialog
函数中,按照以下方式从位图资源中提取图标:
if(m_24bitBMP.LoadBitmap(IDB_BITMAP_24BIT)) { ICONINFO icInfo; icInfo.fIcon = TRUE; icInfo.hbmMask = (HBITMAP) m_24bitBMP; icInfo.xHotspot = 0; icInfo.yHotspot = 0; icInfo.hbmColor = (HBITMAP) m_24bitBMP; m_hTrayIcon = CreateIconIndirect(&icInfo); }
现在按如下方式显示图标:
if (!m_TrayIcon.Create(NULL,// Parent window WM_ICON_NOTIFY, // Icon notify message to use "24 bit Icon", // tooltip m_hTrayIcon, // Icon to use IDR_POPUP_MENU)) // ID of tray icon return FALSE;
记住在析构函数或不需要图标时销毁图标句柄,如下所示:
DestroyIcon(m_hTrayIcon);
就是这样。