65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.08/5 (10投票s)

2004 年 3 月 16 日

2分钟阅读

viewsIcon

114336

downloadIcon

1218

关于在系统托盘中显示超过 256 种颜色的图标的文章。

引言

我在 CodeProject 上找到很多关于显示系统托盘图标的文章,但没有一篇文章允许我显示超过 256 种颜色的图标(至少我没有找到任何一篇)。我需要显示包含超过 256 种颜色的图标。通过查阅 MSDN,我找到了正确的方向。由于系统托盘图标已经有很多现成的代码,我没有重新发明轮子,而是使用了 Chris MaunderCSystemTray 类,并进行了一些小的修改(与图标显示无关,而是为了使菜单更新处理程序能够正常工作。你可以将下面的代码插入 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);

就是这样。

© . All rights reserved.