系统托盘图标支持的WTL应用程序模板

本文档提供了一个小型模板,用于在基于WTL的应用程序中添加系统托盘图标支持。在此,向Chris Maunder表示敬意,因为在MFC时代,使用了他出色的CSystemTray类,这个WTL版本的灵感来源于此(尽管他的版本提供了更多的功能)。

模板可用于为应用程序添加“默认”托盘图标行为。当右键单击图标时,会显示一个菜单,双击图标将执行默认菜单项。请注意,第一个菜单项将用作默认项,但可以通过调用SetDefaultItem来更改此设置。

使用CTrayIconImpl

要使用CTrayIconImpl模板,请按照以下步骤操作:

首先,包含头文件:

#include "trayiconimpl"

接下来,从CTrayIconImpl派生主窗口类(对于SDI/MDI应用程序通常是CMainFrame,对于基于对话框的应用程序是CMainDlg):

class CMainDlg : public CTrayIconImpl { ... };

然后(这一点很重要)在窗口消息映射中添加一个CHAIN_MSG_MAP条目(以确保WM_TRAYICON消息被正确处理):

BEGIN_MSG_MAP(CMainDlg) { ... CHAIN_MSG_MAP(CTrayIconImpl) END_MSG_MAP()}

要将图标安装到系统托盘,请在OnCreate(SDI/MDI应用程序)或OnInitDialog(对话框应用程序)中调用InstallIcon。注意,需要为这个调用提供三个参数 - 工具提示文本、图标句柄和当托盘图标被右键单击时显示的弹出菜单的资源ID。

HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); InstallIcon(_T("Tooltip text"), hIconSmall, IDR_POPUP);

最后,为弹出菜单命令添加必要的COMMAND_ID_HANDLERs。就是这样!

注意事项

通过调用SetDefaultItem更改默认菜单项:

SetDefaultItem(ID_APP_ABOUT);

通过调用SetTooltipText更改工具提示文本:

SetTooltipText(_T("Yeeha!")); void PrepareMenu(HMENU hMenu) { CMenuHandle menu(hMenu); menu.EnableMenuItem(ID_TEST_DISABLED, MF_GRAYED); menu.CheckMenuItem(ID_TEST_CHECKED, MF_CHECKED); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485