为对话框程序增加托盘模式,左键双击托盘图标重新显示窗口,右键单击托盘图标显示下拉菜单,可点击关闭。
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);
}
3,注册消息:
ON_MESSAGE(WM_NC,OnNotifyIcon)
4,卸载托盘:
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);
5,托盘的调用:
如果需要程序运行时托盘一直出现,则在初始化函数中调用tray()即可。
如果要点击最小化按钮时转到托盘,则需在OnSysCommand()函数中拦截最小化事件:
if(nID==SC_MINIMIZE)
{
tray();
}