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

WTL 系统托盘模板

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (23投票s)

2002 年 11 月 5 日

2分钟阅读

viewsIcon

179407

downloadIcon

6667

一个小型模板,让您可以轻松地为您的 WTL 应用程序添加系统托盘图标支持。

引言

这是一个小模板,你可以用它来为基于 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);
}
© . All rights reserved.