经常都会看到最小化程序后就会在任务栏的托盘中保留一个小图标,即把窗口最小化至托盘中。实现起来很简单,只要明白它使用到的结构和一个Shell函数即可完成。但是如果要制作其他的菜单,需要另外制作,今天暂且不讨论。 首先来看一下这个托盘的结构,定义如下所示。 1 typedef struct _NOTIFYICONDATAW { 2 DWORD cbSize; //一般为sizeof(NOTIFYICONDATA); 3 HWND hWnd; //this->m_hWnd;或theApp.m_pMainWnd->m_hWnd; 4 UINT uID; //一般为1,此处ID和前一个hWnd共同来识别窗口; 5 UINT uFlags; // NIF_ICON|NIF_MESSAGE; 6 UINT uCallbackMessage; //自定义消息 ( #define WM_TRAY_MESSAGE (WM_USER + 1) ),此处的WM_TRAY_MESSAGE 7 HICON hIcon; 8 #if (NTDDI_VERSION < NTDDI_WIN2K) 9 WCHAR szTip[ 64 ]; 10 #endif 11 #if (NTDDI_VERSION >= NTDDI_WIN2K) 12 WCHAR szTip[ 128 ]; 13 DWORD dwState; 14 DWORD dwStateMask; 15 WCHAR szInfo[ 256 ]; 16 union { 17 UINT uTimeout; 18 UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4 19 } DUMMYUNIONNAME; 20 WCHAR szInfoTitle[ 64 ]; 21 DWORD dwInfoFlags; 22 #endif 23 #if (NTDDI_VERSION >= NTDDI_WINXP) 24 GUID guidItem; 25 #endif 26 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 27 HICON hBalloonIcon; 28 #endif 29 } NOTIFYICONDATAW, * PNOTIFYICONDATAW; 以上结构作为参数被Shell函数 BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ); 调用。而其中的dwMessage有三个可选参数: NIM_ADD、NIM_DELETE和NIM_MODIFY
功能分别是 添加 、 删除 以及 修改 托盘中的图标.当然最后要把窗口给隐藏起来啦: 1 // 此处也可在其他地方调用。 2 theApp.m_pMainWnd -> ShowWindow(SW_MINIMIZE); 3 // this->ShowWindow(SW_MINIMIZE); 4 theApp.m_pMainWnd -> ShowWindow(SW_HIDE); 5 // this->ShowWindow(SW_HIDE); 将上述代码整理后,只要将Sheel_NotifyIcon的调用放到min按钮的事件中执行即可。
本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/11/15/vc_notifyicon.html,如需转载请自行联系原作者