为对话框程序增加托盘模式,左键双击托盘图标重新显示窗口,右键单击托盘图标显示下拉菜单,可点击关闭。
1,在对话框类的头文件中添加:
#define WM_NC WM_USER+1
#define IDI_NOTIFYICON 100
//添加成员函数
afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM lParam);
void tray();
//添加成员变量
NOTIFYICONDATA NotifyIcon;
2,在类的源文件中实现两个成员函数:
LRESULT CBaiduAppStoreTestDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam) { if (wParam == IDI_NOTIFYICON)//为创建的托盘图标 { switch(lParam)//消息的类型 { case WM_LBUTTONDBLCLK://双击左键 { this->ShowWindow(SW_SHOWNORMAL); } break; case WM_RBUTTONDOWN://右击托盘,显示菜单 { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; menu.CreatePopupMenu();//声明一个弹出式菜单 menu.AppendMenu(MF_STRING,WM_DESTROY,L"close"); //确定弹出式菜单的位置 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //资源回收 HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; } break; } } return 0; } //创建及初始化托盘 void CBaiduAppStoreTestDlg::tray() { NotifyIcon.cbSize=sizeof(NOTIFYICONDATA); NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); NotifyIcon.hWnd=m_hWnd; NotifyIcon.uID = IDI_NOTIFYICON; lstrcpy(NotifyIcon.szTip,L"BaiduUserTestClient"); NotifyIcon.uCallbackMessage=WM_NC; NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIcon(NIM_ADD,&NotifyIcon); }