系统托盘气泡提示和右键菜单的实现(1)
WTL嵌入类的架构可以使整个程序很清晰,系统托盘气泡提示、上下文菜单处理可以分别独立出来,以下是实现代码,很清晰就不注释了。基本上这两个类很少需要修改,因此我把它们放到了系统包含文件搜索路径中。
//ContextMenu.h#pragma oncetemplate <class T>class CContextMenu{public: BOOL CreateContextMenu(UINT ID_Menu) { T* pT = static_cast<T*>(this); CMenu menu; menu.LoadMenu(ID_Menu); CMenu SubMenu(menu.GetSubMenu(0)); POINT pos; GetCursorPos(&pos); SubMenu.TrackPopupMenu(TPM_LEFTALIGN TPM_RIGHTBUTTON, pos.x, pos.y, pT->m_hWnd); return TRUE; }};//ShellIcon.h#pragma once#define WM_ICON WM_USER + 180template <class T, class MenuT, int MenuID>class CShellIcon : public MenuT{private: NOTIFYICONDATA m_data; UINT m_msgTaskbarRestart; CString m_appName;public: CShellIcon() { m_appName.LoadString(IDS_APPNAME); m_msgTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));