在全局头文件里面定义:
cpp代码
- #define WM_NOTIFYICON (WM_APP+100)
1:初始化
cpp代码
-
- NOTIFYICONDATA tnd;
- tnd.cbSize=sizeof(NOTIFYICONDATA);
- tnd.hWnd=this->m_hWnd;
- tnd.uID=IDR_MAINFRAME;
- tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
- tnd.uCallbackMessage=WM_NOTIFYICON;
- tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
- strcpy(tnd.szTip,"我的程序...");
- Shell_NotifyIcon(NIM_ADD,&tnd);
2.当explorer退出重启时重新显示托盘区图标,如果不处理则不会显示 重载回调函数DefWindowProc:
cpp代码
- LRESULT CMyDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
-
- static UINT s_uTaskbarRestart;
- if (message == WM_CREATE)
- s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
- if(message == s_uTaskbarRestart)
- {
- NOTIFYICONDATA tnd;
- tnd.cbSize=sizeof(NOTIFYICONDATA);
- tnd.hWnd=this->m_hWnd;
- tnd.uID=IDR_MAINFRAME;
- tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
- tnd.uCallbackMessage=WM_NOTIFYICON;
- tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),
- MAKEINTRESOURCE(IDR_MAINFRAME));
- strcpy(tnd.szTip,"我的程序...");
- Shell_NotifyIcon(NIM_ADD,&tnd);
- }
- return CDialog::DefWindowProc(message, wParam, lParam);
- }
3.程序退出时托盘区图标处理,如果不处理,则托盘区仍然有该无意义的图标
cpp代码
- NOTIFYICONDATA tnid;
- tnid.cbSize=sizeof(NOTIFYICONDATA);
- tnid.hWnd=this->m_hWnd;
- tnid.uID=IDR_MAINFRAME;
- Shell_NotifyIcon(NIM_DELETE,&tnid);
4.在托盘区图标上添加菜单 可以添加一个下拉式菜单:
cpp代码
-
- afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);
-
-
- ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)
-
-
- void CMyDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam)
- {
- UINT uID=(UINT)wParam;
- UINT uMouseMsg=(UINT)lParam;
- if(uID==IDR_MAINFRAME)
- {
- CMenu menu;
- CMenu *pPopup;
- CPoint pt;
- switch(uMouseMsg)
- {
- case WM_RBUTTONDOWN:
- menu.LoadMenu(IDR_TrayMenu);
- pPopup=menu.GetSubMenu(0);
- GetCursorPos(&pt);
- pPopup->TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
- break;
- case WM_LBUTTONDOWN:
- ShowWindow(SW_SHOWDEFAULT);
-
-
-
-
-
-
- break;
- }
- }
- }
实现菜单后,又可以对菜单的鼠标点击做出其他的动作,在此不在赘述。
|