MFC 托盘模式

来源:互联网 发布:中银e贷交易数据 编辑:程序博客网 时间:2024/05/18 22:44

为对话框程序增加托盘模式,左键双击托盘图标重新显示窗口,右键单击托盘图标显示下拉菜单,可点击关闭。


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();
}

0 0
原创粉丝点击