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

NTRAY 移植到 WTL (基于 CTrayNotifyIcon v1.55)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (7投票s)

2006年8月12日

19分钟阅读

viewsIcon

75643

downloadIcon

1363

CTrayNotifyIcon 是一个强大且易用的工具,特移植一份到 WTL。

Sample Image - wtlntray.jpg

引言

首先感谢 PJ Naughter,原始的 CTrayNotifyIcon 位于 http://www.naughter.com/ntray.html。我只是将一些代码从 MFC 更改为 WTL。

CTrayNotifyIcon 隐藏了直接调用 API 的繁琐,并提供了一个简洁的 C++ 接口来使用它。提供了重载成员函数来设置和获取工具提示文本、图标和通知窗口。该类还提供了显示上下文菜单的默认实现,并提供了一个默认菜单项,当双击图标时执行该菜单项。如果 shell 意外崩溃,该类还提供图标的自动清理和恢复。

WTL 移植版本保持所有接口不变,因此您可以阅读 CTrayNotifyIcon 文档。


来自 PJ Naughter 在 http://www.naughter.com/ntray.html 的好消息:更新了代码,使其可以独立于 MFC 运行(如果需要)。这需要 WTL,WTL 是 ATL 的一个开源库扩展,用于提供类似于 MFC 的 UI 支持。真是太棒了!
想要使用此包的人应从 http://www.naughter.com/ntray.html 下载,所有功劳归 PJ Naughter 所有。


CTrayNotifyIcon v1.55

欢迎使用 CTrayNotifyIcon,一个免费的 MFC 类,用于封装 Windows 上的托盘通知 API。

 

特点
用法
Copyright
历史
API 参考
联系作者

 

 

 

特性

  • 简洁的 C++ 接口。
  • 类完全符合 Unicode 标准,并在工作区文件中包含 Unicode 构建选项。
  • 所有代码在警告级别 4 下都能干净地编译。
  • 支持所有托盘功能,直到 Windows XP SP2,同时该类在低至 Windows 95 Gold 的 Windows 版本上也能正常工作。当然,如果您想使用气球托盘图标等新功能,那么这些功能将仅在较新版本的 Windows 上可用,因此如果您仍然支持旧版本的 Windows,可能仍需在客户端应用程序中处理此问题。
  • 隐藏了处理凌乱的 NOTIFYICONDATA 结构及其各种怪癖的复杂性,如果您直接使用 "Shell_NotifyIcon" API 进行编码,可能对此会很熟悉。

 

 

 

用法

  • 要在代码中使用该类,只需在项目中包含 NTray.cpp,并在任何需要调用该类的模块中 #include NTray.h。
  • 如果您使用 Visual C++ 6,您需要安装最新的 Platform SDK 才能编译代码(2003年2月是与 VC 6 兼容的最后一个版本)。
  • 从 v1.51 开始,代码现在优先使用 ATL 的 CWindowImpl 类而不是作者的 CHookWnd 类。这意味着对于仅 MFC 客户端项目,您需要为项目添加 ATL 支持。
  • 要查看该类的实际运行,请查看模块 "mainfrm.cpp" 中的代码。
  • 您的代码需要静态或动态地包含 MFC。

 

 

 

版权

  • 您的产品以二进制形式发布时,允许在任何产品(商业、共享软件、免费软件或其他)中包含源代码。
  • 您可以随意修改源代码,但不能修改每个模块顶部的版权详细信息。
  • 如果您想随应用程序分发源代码,则只允许分发作者发布的版本。这是为了维护源代码的单一分发点。

 

 

 

历史

v1.0 (1997年5月14日)

  • 首次公开发布。

v1.1 (1997年11月25日)

  • 添加了 HideIcon()、ShowIcon() 和 MoveToExtremeRight()
  • 支持动画托盘图标

v1.2 (1998年6月23日)

  • 类现在支持 IE 4 附带的新任务栏创建通知消息。这允许在 Explorer 重启(崩溃!!)时重新创建托盘图标。

V1.3 (1998年7月22日)

  • 代码现在在警告级别 4 下干净编译
  • 代码现在已启用 UNICODE + 提供构建配置
  • 类的文档已完全修改

V1.31 (1999年1月27日)

  • 代码现在正确加载 16*16 图标,以前它允许 Windows 将图标从 32*32 重新缩放,导致图像略微模糊。这是通过新的 LoadIconResource 方法实现的。

V1.32 (1999年1月28日)

  • 移除了多个发生的级别 4 警告。

V1.33 (1999年5月9日)

  • 修复了知识库文章“PRB: 通知图标的菜单无法正常工作”,文章 ID:Q135788 中记录的问题。

V1.4 (1999年5月16日)

  • 修改了示例程序,以确保在不使用托盘图标动画时使用 16*16 图标。
  • 现在使用作者的 hookwnd 类。这避免了创建两个隐藏窗口(即 CTrayRessurectionWnd 和 CTrayTimerWnd)来处理图标动画和托盘创建消息的需要。
  • 示例项目现在在警告级别 4 下编译。
  • 通用代码清理和重新排列。
  • 添加了大量 ASSERT 以提高代码的健壮性。
  • 添加了允许自定义上下文菜单的功能。

2000年5月21日

  • 文档进行了小幅更新。

V1.41 (2001年1月1日)

  • 现在源代码和文档中包含版权信息。 
  • 修复了双击托盘图标后窗口无法获得焦点的问题。
  • 现在完全支持 Windows 2000 气球式工具提示。
  • 修复了某些 ASSERT 中的“差一”问题。
  • 修复了 Unicode 构建配置的问题。
  • 提供了 Win2k 特定构建配置。

V1.42 (2001年2月10日)

  • 现在完全支持同时创建 2 个托盘图标。

V1.43 (2001年6月13日)

  • 现在在调用 RemoveIcon 时移除窗口钩子。

V1.44 (2001年8月26日)

  • 修复了 RemoveIcon 中的内存泄漏。
  • 通过删除对 Unhook 的调用,修复了 RemoveIcon 中的 GPF。

V1.45 (2001年8月28日)

  • 增加了直接访问系统托盘 HDC 的支持。这允许您使用 GDI 调用即时生成托盘图标。这个想法来自 Jeff Heaton 在 WDJ 四月刊上的文章。还添加了重载的 Create 方法,允许您在给定 BITMAP 而不是 ICON 的情况下轻松构建动态托盘图标。

2002年11月25日

  • 在 NTray.h 头文件中添加了一个注释,说明如果代码编译失败,在哪里可以获取 HookWnd.h 文件。

V1.46 (2003年3月21日)

  • 修复了 SetIcon(LPCTSTR lpIconName) 和 SetIcon(UINT nIDResource) 中的图标资源泄漏。感谢 Egor Pervouninski 报告此问题。
  • 修复了通知窗口关闭时托盘图标的取消钩取问题。

V1.47 (2003年3月31日)

  • 现在使用我的 Hookwnd 类的 V1.05 版本

V1.48 (2003年4月2日)

  • 现在使用我的 Hookwnd 类的 v1.06 版本
  • 修复了该类的示例应用程序中的一个错误,其中钩子应该创建为全局实例而不是主框架窗口的成员变量。这确保了即使在主框架上调用 DefWindowProc 后,钩子仍然有效。

V1.49 (2004年7月23日)

  • 小幅更新,移除了不必要的 "resource.h" 包含。

V1.50 (2006年3月3日)

  • 更新了版权信息。
  • 更新了文档以使用与网站相同的样式。
  • 对文档进行了拼写检查。
  • 修复了使用 /Wp64 编译代码时的一些问题。请注意,为了支持此功能,如果使用 Visual C++ 6 编译代码,现在需要安装较新的 Platform SDK。
  • 将所有对 ZeroMemory 的调用替换为 memset。
  • 修复了 SetBalloonDetails 未设置 cbSize 参数的问题。感谢 Enrique Granda 报告此问题。
  • 添加了对 NIIF_USER 和 NIIF_NONE 标志的支持。
  • 现在通过 SetVersion 支持 NIM_NIMSETVERSION。此外,如果设置了 Win2k 布尔参数,这现在会在 Create() 调用中自动设置。
  • 删除了对 CObject 的派生,因为它不再真正需要。
  • 现在包含对 NIM_SETFOCUS 的支持
  • 通过 ShowIcon 和 HideIcon 方法添加了对 NIS_HIDDEN 的支持。
  • 添加了对 NIIF_NOSOUND 的支持

V1.51 (2006年6月27日)

  • 代码现在在必要时使用新的 C++ 样式强制类型转换,而不是旧式 C 强制类型转换。
  • 如果使用 VC 6 编译,类框架现在需要 Platform SDK。
  • 更新了验证各种字符串长度的 ASSERT 逻辑。
  • 修复了 CTrayNotifyIcon::SetFocus() 中 cbSize 值未正确设置的错误。
  • CTrayIconHooker 类现在优先使用 ATL 的 CWindowImpl 类而不是作者的 CHookWnd 类。这意味着对于仅 MFC 客户端项目,您需要为项目添加 ATL 支持。
  • 优化了 CTrayIconHooker 构造函数代码。
  • 更新了代码,使其能够使用 VC 2005 干净编译。感谢“Itamar”促成了此更新。
  • 添加了 CTRAYNOTIFYICON_EXT_CLASS 和 CTRAYNOTIFYICON_EXT_API 宏,使该类更易于在扩展 dll 中使用。
  • 使 CTrayNotifyIcon 析构函数为虚函数。

V1.52 (2006年7月3日)

  • 修复了 Windows 2000 上 HideIcon 功能无法工作的错误。这与 NOTIFYICONDATA 结构的 cbSize 成员的初始化方式有关。代码现在根据 MSDN 文档中对该结构的说明,在运行时动态确定要设置的正确大小。因此,以前通过 CTrayNotifyIcon 公开的所有“bWin2k”参数现已移除,因为不再需要它们。感谢 Edwin Geng 报告此重要错误。客户端代码仍需智能地决定操作系统支持哪些功能。例如,气球托盘图标仅在 Shell v5(名义上是 Windows 2000 或更高版本)上受支持。如果例如在 Shell v5 以下的操作系统上调用 CTrayNotifyIcon 创建气球托盘图标,它将 ASSERT。

V1.53 (2006年7月5日)

  • 修复了 Windows 2000 上在选择菜单项后菜单可能会第二次弹出的错误。问题追溯到 CTrayNotifyIcon::OnTrayNotification 中的代码。在测试此错误期间,我无法在 Windows 2000 和 Windows XP 上使用新的 shell 消息 WM_CONTEXTMENU、NIN_KEYSELECT 和 NIN_SELECT 获得可行的解决方案。这意味着 CTrayNotifyIcon::OnTrayNotification 中的代码使用旧方式处理通知 (WM_RBUTTDOWN*)。这意味着默认情况下,使用 CTrayNotifyIcon 类的客户端应用程序将不支持托盘图标的新键盘和鼠标语义(恕我直言,这并非巨大损失!)。客户端代码当然可以自由处理自己的通知。如果您选择此路线,我建议您在 Windows 2000 和 Windows XP 上彻底测试您的应用程序,因为我的测试表明这两种操作系统上托盘图标处理其消息的方式存在显著差异。感谢 Edwin Geng 报告此问题。
  • 类现在根据当前消息的屏幕坐标显示菜单,而不是当前光标的屏幕坐标。
  • 修复了示例应用程序中的错误,即如果“关于”对话框已显示,并且从托盘菜单重新激活它,它不会将其自身带到前台。

V1.54 (2006年7月6日)

  • 恢复了 v1.53 中所做的更改,即用于显示上下文菜单的屏幕坐标使用当前消息的屏幕坐标。现在改用 pre v1.53 机制,该机制使用当前光标的屏幕坐标。感谢 Itamar Syn-Hershko 报告此问题。

V1.55 (2006年7月19日)

  • 现在可以通过 SetDefaultMenuItem 和 GetDefaultMenuItem 自定义默认菜单项。感谢 Mikhail Bykanov 建议此出色的更新。
  • 优化了 CTrayNotifyIcon 构造函数代码

 

 

 

API 参考

在图标的生命周期内实例化一个 CTrayNotifyIcon。示例程序在主框架中执行此操作,因为图标将在应用程序的生命周期内可用。在示例程序中,这是在主框架类中完成的。API 由 CTrayNotifyIcon 类的以下公共函数组成

 

CTrayNotifyIcon::CTrayNotifyIcon
CTrayNotifyIcon::~CTrayNotifyIcon
CTrayNotifyIcon::Create
CTrayNotifyIcon::SetTooltipText
CTrayNotifyIcon::GetTooltipText
CTrayNotifyIcon::SetIcon
CTrayNotifyIcon::SetStandardIcon
CTrayNotifyIcon::GetIcon
CTrayNotifyIcon::UsingAnimatedIcon
CTrayNotifyIcon::SetNotificationWnd
CTrayNotifyIcon::GetNotificationWnd
CTrayNotifyIcon::HideIcon
CTrayNotifyIcon::ShowIcon
CTrayNotifyIcon::RemoveIcon
CTrayNotifyIcon::SetMenu
CTrayNotifyIcon::GetMenu
CTrayNotifyIcon::OnTrayNotification
CTrayNotifyIcon::IsShowing
CTrayNotifyIcon::IsHidden
CTrayNotifyIcon::LoadIconResource

CTrayNotifyIcon::SetBalloonDetails
CTrayNotifyIcon::GetBalloonText
CTrayNotifyIcon::GetBalloonCaption
CTrayNotifyIcon::GetBalloonStyle
CTrayNotifyIcon::GetBalloonTimeout
CTrayNotifiyIcon::BitmapToIcon
CTrayNotifiyIcon::GetDynamicDCAndBitmap

 

CTrayNotifyIcon::CTrayNotifyIcon

CTrayNotifyIcon::CTrayNotifyIcon();

备注

标准构造函数,仅将所有成员变量初始化为安全值。

 

CTrayNotifyIcon::~CTrayNotifyIcon

CTrayNotifyIcon::~CTrayNotifyIcon();

备注

标准析构函数。在内部,这将调用 RemoveIcon 以从 UI 中移除图标。

 

CTrayNotifyIcon::Create

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT nID, LPCTSTR pszTooltipText, HICON hIcon, UINT nNotifyMessage, UINT uMenuID=0);

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, HICON* phIcons, int nNumIcons, DWORD dwDelay, UINT nNotifyMessage, UINT uMenuID=0);

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, LPCTSTR pszBalloonText, LPCTSTR pszBalloonCaption, UINT nTimeout, BalloonStyle style, HICON hIcon, UINT nNotifyMessage, UINT uMenuID=0, BOOL bNoSound = FALSE); 

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, LPCTSTR pszBalloonText, LPCTSTR pszBalloonCaption, UINT nTimeout, BalloonStyle style, HICON* phIcons, int nNumIcons, DWORD dwDelay, UINT nNotifyMessage, UINT uMenuID=0, BOOL bNoSound = FALSE);

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, CBitmap* pBitmap, UINT nNotifyMessage, UINT uMenuID=0);

BOOL CTrayNotifyIcon::Create(CWnd* pNotifyWnd, UINT uID, LPCTSTR pszTooltipText, LPCTSTR pszBalloonText, LPCTSTR pszBalloonCaption, UINT nTimeout, BalloonStyle style, CBitmap* pBitmap, UINT nNotifyMessage, UINT uMenuID=0, BOOL bNoSound = FALSE);

返回值

如果托盘图标成功创建,则为 TRUE,否则为 FALSE。

参数

pNotifyWnd:要发送通知消息的窗口。此后可以使用 SetNotificationWnd 方法更改。

uID:与每个托盘图标关联的应用程序定义值。这允许您从一个应用程序显示多个图标。CTrayNotifyIcon 还重写了其含义,使其用作上下文菜单的菜单资源 ID。

pszTooltipText:要显示的初始工具提示文本。此后可以使用 SetTooltipText 方法更改。

hIcon:要显示的图标。此后可以使用 SetIcon 方法更改。

nNotifyMessage:这是用于通知窗口鼠标消息的通知消息。这应定义为某个 WM_USER 消息,并在通知窗口消息映射中使用 ON_MESSAGE 宏处理。要了解如何连接此功能,请查看 mainfrm.cpp

phIcons:指向用于执行图标动画的图标句柄数组的指针。

nNumIcons:phIcons 指向的图标数量。

dwDelay:图标动画帧之间的间隔(以毫秒为单位)。

pszBalloonText:气球样式工具提示中显示的文本。

pszBalloonCaption:气球样式工具提示的标题。

nTimeout:与气球样式工具提示关联的超时时间。在此时间(以毫秒为单位)后,气球工具提示将消失。

style:气球工具提示中显示的图标。它可以是枚举值 CTrayNotifyIcon::Info、CTrayNotifyIcon::Error、CTrayNotifyIcon::Warning、CTrayNotifyIcon::None 或 CTrayNotifyIcon::User 中的一个。请注意,CTrayNotifyIcon::User 仅在 XP SP2 或更高版本上可用。另请注意,气球样式工具提示本身仅在 shell 版本 5 或更高版本(Windows 2000 或更高版本)上可用。

uMenuID 将此值设置为非零值以使用不同的菜单资源,而不是 uID 指定的默认菜单资源

pBitmap 要显示为图标的位图。在内部,代码在显示位图之前将其转换为图标。

bNoSound 将此值设置为 TRUE(默认为 FALSE)将导致 shell 在显示气球样式工具提示时不播放弹出音。请注意,此功能仅在 XP SP2 或更高版本上可用。

备注

创建一个托盘通知图标。指定气球工具提示的两个重载版本仅在 Shell v5(名义上为 Windows 2000 及更高版本)上可用。

 

CTrayNotifyIcon::SetTooltipText

BOOL CTrayNotifyIcon::SetTooltipText(LPCTSTR pszTooltipText);

BOOL CTrayNotifyIcon::SetTooltipText(UINT nID);

返回值

如果工具提示文本成功更改,则为 TRUE,否则为 FALSE

参数

pszTooltipText 要设置的文本

nID 要设置的文本的 Windows 字符串资源 ID

备注

设置与托盘图标关联的工具提示文本

 

CTrayNotifyIcon::GetTooltipText

CString CTrayNotifyIcon::GetTooltipText() const

返回值

当前工具提示文本

 

CTrayNotifyIcon::SetIcon

BOOL SetIcon(HICON hIcon);

BOOL SetIcon(CBitmap* pBitmap);

BOOL SetIcon(LPCTSTR lpIconName);

BOOL SetIcon(UINT nIDResource);

BOOL SetIcon(HICON* phIcons, int nNumIcons, DWORD dwDelay);

返回值

如果图标成功更改,则为 TRUE,否则为 FALSE

参数

hIcon 要设置的图标句柄

lpIconName 要使用的图标的 Windows 图标资源字符串

nIDResource 要使用的图标的 Windows 图标资源 ID

phIcons:指向用于执行图标动画的图标句柄数组的指针。

nNumIcons:phIcons 指向的图标数量。

dwDelay:图标动画帧之间的间隔(以毫秒为单位)。

pBitmap 用作图标的位图

备注

设置与托盘图标关联的图标。通常,您应该优先调用 LoadIconResource 来加载图标以供 CTrayNotifyIcon 使用。

 

CTrayNotifyIcon::SetStandardIcon

BOOL CTrayNotifyIcon::SetStandardIcon(LPCTSTR lpIconName);

BOOL CTrayNotifyIcon::SetStandardIcon(UINT nIDResource);

参数

lpIconName 要使用的图标的 Windows 图标资源字符串

nIDResource 要使用的图标的 Windows 图标资源 ID

备注

使用标准图标标识符设置与托盘图标关联的图标。

要使用 Windows 预定义的图标之一,请将 lpIconName 参数设置为以下值之一

描述
IDI_APPLICATION 默认应用程序图标。
IDI_ASTERISK 与 IDI_INFORMATION 相同。
IDI_ERROR 手形图标。
IDI_EXCLAMATION 与 IDI_WARNING 相同。
IDI_HAND 与 IDI_ERROR 相同。
IDI_INFORMATION 星号图标。
IDI_QUESTION 问号图标。
IDI_WARNING 感叹号图标。
IDI_WINLOGO Windows 徽标图标。

 

CTrayNotifyIcon::GetIcon

HICON CTrayNotifyIcon::GetIcon() const;

返回值

当前显示的图标的图标句柄

 

CTrayNotifyIcon::UsingAnimatedIcon

BOOL UsingAnimatedIcon() const;

返回值

如果正在显示动画图标,则为 TRUE;如果正在使用普通静态图标,则为 FALSE。

 

CTrayNotifyIcon::SetNotificationWnd

BOOL CTrayNotifyIcon::SetNotificationWnd(CWnd* pNotifyWnd);

返回值

如果通知窗口成功设置,则为 TRUE,否则为 FALSE

参数

pNotifyIcon 与此托盘图标关联的通知窗口

 

CTrayNotifyIcon::GetNotificationWnd

CWnd* GetNotificationWnd() const;

返回值

与此托盘图标关联的通知窗口

 

CTrayNotifyIcon::HideIcon

void CTrayNotifyIcon::HideIcon();

备注

暂时隐藏托盘通知图标。如果该类检测到它在 Shell v5 或更高版本(名义上是 Windows 2000 或更高版本)上运行,则此方法将使用 NIS_HIDDEN 功能隐藏图标,而不是实际销毁托盘图标。使用此功能意味着重新显示的图标位置将得以保留,而不是在完全重新创建时出现在最左侧。

 

CTrayNotifyIcon::ShowIcon

void CTrayNotifyIcon::ShowIcon();

备注

HideIcon 的对应函数

 

CTrayNotifyIcon::RemoveIcon

void CTrayNotifyIcon::RemoveIcon();

备注

完全移除托盘图标并重置类成员变量。这是 CTrayNotifyIcon::Create 的对应函数。

 

CTrayNotifyIcon::SetMenu

void CTrayNotifyIcon::SetMenu(HMENU hMenu);

参数

hMenu 用作托盘图标上下文菜单的菜单资源。

 

CTrayNotifyIcon::GetMenu

CMenu& CTrayNotifyIcon::GetMenu();

返回值

当前与托盘图标关联的菜单资源。

 

CTrayNotifyIcon::OnTrayNotification

virtual LRESULT CTrayNotifyIcon::OnTrayNotification(WPARAM uID, LPARAM lEvent);

返回值

消息处理程序返回的标准结果

参数

uID:您在调用 CTrayNotifyIcon::Create 时指定的值

lEvent:是一个鼠标事件(例如 WM_LBUTTONDOWN)。

备注

当您的处理程序获得控制时,WPARAM 是您创建 CTrayNotifyIcon 时指定的 ID。LPARAM 是鼠标事件(例如,WM_LBUTTONDOWN)。您可以根据需要处理通知。提供的示例应用程序不执行任何操作,并将所有工作委托给 CTrayNotifyIcon 中的默认实现。此虚拟(因此您可以重写它)函数实现了“Windows 界面软件指南”中概述的默认 UI 行为。

 

CTrayNotifyIcon::IsShowing

BOOL CTrayNotifyIcon::IsShowing() const;

返回值

如果托盘图标当前正在显示,则为 TRUE,否则为 FALSE。

 

CTrayNotifyIcon::IsHidden

BOOL CTrayNotifyIcon::IsHidden();

返回值

如果托盘图标当前隐藏,则为 TRUE,否则为 FALSE。

 

CTrayNotifyIcon::LoadIconResource

static HICON CTrayNotifyIcon::LoadIconResource(LPCTSTR lpIconName);

static HICON CTrayNotifyIcon::LoadIconResource(UINT nIDResource);

参数

lpIconName 要加载的图标的 Windows 图标资源字符串

nIDResource 要加载的图标的 Windows 图标资源 ID

返回值

如果图标可以加载,则为图标句柄,否则为 NULL。

备注

您应该优先调用此函数而不是 MFC CWinApp::LoadIcon 或 SDK LoadIcon 来加载图标以供 CTrayNotifyIcon 使用。此函数将首先尝试加载 16*16 大小的图标。通常,当您要求 Windows 加载图标时,它会首先尝试将其加载为 32*32 资源,然后 Windows 会将其缩小到 16*16 用于托盘,这通常会导致图像略微模糊。

 

CTrayNotifyIcon::SetBalloonDetails

BOOL CTrayNotifyIcon::SetBalloonDetails(LPCTSTR pszBalloonText, LPCTSTR pszBalloonCaption, BalloonStyle style, UINT nTimeout, HICON hUserIcon=NULL, BOOL bNoSound=FALSE);

返回值

如果详细信息更新成功,则为 TRUE,否则为 FALSE

参数

pszBalloonText:气球样式工具提示中显示的文本。

pszBalloonCaption:气球样式工具提示的标题。

nTimeout:与气球样式工具提示关联的超时时间。在此时间(以毫秒为单位)后,气球工具提示将消失。

style:气球工具提示中显示的图标。有关可能值的更多详细信息,请参见 CTrayNotifyIcon::Create

hUserIcon:如果将“style”设置为 User,则此参数用于指定要在气球样式工具提示中显示的用户图标。

bNoSound:将此值设置为 TRUE(默认为 FALSE)将导致 shell 在显示气球样式工具提示时不播放弹出音。请注意,此功能仅在 XP SP2 或更高版本上可用。

备注

设置与托盘图标关联的气球工具提示详细信息

 

CTrayNotifyIcon::GetBalloonText

CString CTrayNotifyIcon::GetBalloonText() const

返回值

当前气球文本

 

CTrayNotifyIcon::GetBalloonCaption

CString CTrayNotifyIcon::GetBalloonCaption() const

返回值

当前气球标题

 

CTrayNotifyIcon::GetBalloonStyle

CTrayNotifiyIcon::BalloonStyle CTrayNotifyIcon::GetBalloonStyle() const

返回值

当前正在使用的气球工具提示样式

 

CTrayNotifyIcon::GetBalloonTimeout

UINT CTrayNotifyIcon::GetBalloonTimeout() const

返回值

当前正在使用的气球工具提示的超时时间(以毫秒为单位)

 

CTrayNotifyIcon::BitmapToIcon

HICON CTrayNotifyIcon::BitmapToIcon(CBitmap* pBitmap)

返回值

指定位图的 ICON 表示形式

参数

pBitmap:要转换为图标的位图

备注

将 Windows 位图转换为图标。当使用 CBitmap 而不是 HICON 调用 Create 方法时,此方法由 Create 方法使用。

 

CTrayNotifyIcon::GetDynamicDCAndBitmap

static BOOL CTrayNotifyIcon::GetDynamicDCAndBitmap(CDC* pDC, CBitmap* pBitmap)

返回值

如果成功获取 DC 和位图,则为 TRUE,否则为 FALSE

参数

pDC:DC 类的地址,将返回一个与托盘兼容的 DC。

pBitmap:位图的地址,将包含托盘图标的表示形式。

备注

应在准备使用动态托盘图标(即,通过绘制到内存设备上下文在运行时构建 ICON)时调用此函数。成功返回后,您应该保留这两个参数,直到需要它们。例如,在示例应用程序中,代码通过在 DC 中绘制新数字然后使用此数字更新托盘图标来定期更新 DC。有关使用动态托盘图标的更多信息,请参阅提供的示例应用程序。 

 

 

 

联系作者

PJ Naughter
电子邮件: pjna(at)naughter.com
网址: http://www.naughter.com
2006年7月19日


© . All rights reserved.