WTL 系统托盘模板






4.98/5 (23投票s)
2002 年 11 月 5 日
2分钟阅读

179407

6667
一个小型模板,
引言
这是一个小模板,你可以用它来为基于 WTL 的应用程序添加系统托盘图标支持。 必须向 Chris Maunder 致敬,因为在我使用 MFC 的时候,我使用了他优秀的 CSystemTray
类,它为这个 WTL 版本提供了灵感(尽管他的功能更加强大)。
这个模板可以用来为你的应用程序添加“默认”托盘图标行为。 当你右键单击图标时,会显示一个菜单,双击图标将执行默认菜单项。 请注意,第一个菜单项将被用作默认项,但你可以通过调用 SetDefaultItem
来更改它。
使用 CTrayIconImpl
要使用 CTrayIconImpl
模板,请执行以下操作
首先,包含头文件
#include "trayiconimpl"
接下来,从 CTrayIconImpl
派生你的主窗口类(通常是 SDI/MDI 应用程序的 CMainFrame
,或基于对话框的应用程序的 CMainDlg
)。
class CMainDlg :
...
CTrayIconImpl<CMainDlg>
接下来(这很重要),将 CHAIN_MSG_MAP
条目添加到你的窗口消息映射中(以确保正确处理 WM_TRAYICON 消息)。
BEGIN_MSG_MAP(CMainDlg) ... CHAIN_MSG_MAP(CTrayIconImpl<CMainDlg>) END_MSG_MAP()
要安装系统托盘中的图标,请从 OnCreate
(SDI/MDI 应用程序)或 OnInitDialog
(对话框应用程序)调用 InstallIcon
。 请注意,你需要向此调用提供三个参数 - 工具提示文本、图标句柄和弹出菜单的资源 ID,该菜单将在右键单击托盘图标时显示。
// Load a small icon HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); ... // Install tray icon InstallIcon(_T("Tooltip text"), hIconSmall, IDR_POPUP);
最后,为你的弹出菜单命令添加必要的 COMMAND_ID_HANDLERs
。 就这样了!
注释
通过调用 SetDefaultItem
更改默认菜单项
// Double-clicking the tray icon will display the "About" box
SetDefaultItem(ID_APP_ABOUT);
通过调用 SetTooltipText
更改工具提示文本。
SetTooltipText(_T("Yeeha!"));
重写 void PrepareMenu(HMENU hMenu)
函数,以便在显示弹出菜单之前初始化它。 例如,你可能想要禁用项目、选中项目等。(请参阅 WTLTrayIconWindow 示例以获取演示)。
void PrepareMenu(HMENU hMenu)
{
CMenuHandle menu(hMenu);
menu.EnableMenuItem(ID_TEST_DISABLED, MF_GRAYED);
menu.CheckMenuItem(ID_TEST_CHECKED, MF_CHECKED);
}