好贷网好贷款

MFC为应用程序添加托盘(右键托盘,弹出菜单)

发布时间:2016-12-5 8:40:53 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"MFC为应用程序添加托盘(右键托盘,弹出菜单)",主要涉及到MFC为应用程序添加托盘(右键托盘,弹出菜单)方面的内容,对于MFC为应用程序添加托盘(右键托盘,弹出菜单)感兴趣的同学可以参考一下。

 源代码:http://download.csdn.net/detail/nuptboyzhb/4137784  原作:http://blog.csdn.net/nupt123456789/article/details/7350219 1.  导入一个托盘图标的资源(.ico)格式;资源ID为IDI_ICON1 2. 在框架程序的初始化函数中,初始化一个托盘图标的一个结构体      NOTIFYICONDATA notifyicondata;      //NOTIFYICONDATA结构      notifyicondata.cbSize = sizeof(NOTIFYICONDATA); //为notifyicondata结构体分配空间      //为notifyicondata结构体各个参数赋值      notifyicondata.hWnd = m_hWnd;//窗口的句柄      notifyicondata.uID = IDI_NOTIFYICON;  //ID标识      notifyicondata.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;      notifyicondata.uCallbackMessage = WM_ADDTRAYICON;  //回调消息的标识;我们要为回调消息的标识添加用户消息映射      notifyicondata.hIcon=AfxGetApp()->LoadIcon(IDI_ICON1); //加载托盘图标      wcscpy(notifyicondata.szTip, _T("为程序创建托盘图标"));      Shell_NotifyIcon(NIM_ADD, &notifyicondata);      //装载托盘图标      注意:在该步骤中有几个注意的变量: a.       m_hWnd是整个应用程序窗口的句柄 b.       IDI_NOTIFYICON是我们自己定义的一个常量;即在头文件上添加如下代码: #define IDI_NOTIFYICON 100      //托盘图标标识 c.       WM_ADDTRAYICON是我们自定义消息的标识,也是一个常量; #define WM_ADDTRAYICON  WM_USER+101        //自定义消息 3. 添加用户消息映射和消息处理函数 1.  添加成员函数: afx_msg LRESULT OnAddTrayIcon(WPARAM wParam,LPARAM lParam); 2.  添加消息映射 ON_MESSAGE(WM_ADDTRAYICON, OnAddTrayIcon)  //添加消息映射 注意:第一个参数是用户自定义消息的标识;第二个参数是消息响应处理函数 3.  实现消息响应处理函数OnAddTrayIcon LRESULT 类名::OnAddTrayIcon(WPARAM wParam, LPARAM lParam) {    if (wParam == IDI_NOTIFYICON)      //为创建的托盘图标    {             switch(lParam)       //消息的类型             {             case WM_LBUTTONDBLCLK: //双击左键               //实现窗口的隐藏或显示              AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);//隐藏窗口                      break;             case WM_RBUTTONDBLCLK://双击右键                      {                                AfxGetApp()->m_pMainWnd->DestroyWindow();   //关闭窗口                                break;                      }            case WM_RBUTTONDOWN://右击托盘,显示菜单            {               CMenu menu,*pSubMenu;//后面要用的CMenu对象               CPoint point;               menu.LoadMenu(IDR_POPUP_MENU);//装载自定义的右键菜单                pSubMenu = menu.GetSubMenu(0);//获取第一个弹出菜单               GetCursorPos(&point); //获取当前光标位置               pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);                break;            }           }    }    return 1; } 4.  卸载托盘。 当应用程序退出时,卸载    NOTIFYICONDATA notifyicondata;    notifyicondata.cbSize = sizeof(NOTIFYICONDATA);    notifyicondata.uFlags = 0;    notifyicondata.hWnd = m_hWnd;    notifyicondata.uID = IDI_NOTIFYICON;    Shell_NotifyIcon(NIM_DELETE, &notifyicondata);  //卸载托盘图标     NOTIFYICONDATA结构体的uCallbackMessage变量,使得用户消息响应与托盘的点击等消息关联在一起;托盘的标识IDI_NOTIFYICON,恰好是用户消息响应用来判断是否是托盘传递的消息的依据;     在基于多文档或单文档的应用程序,当用户点击最小化按钮时,我们可以讲界面隐藏; 具体是,添加OnSize()消息 void CMainFrame::OnSize(UINT nType, int cx, int cy) {    CFrameWnd::OnSize(nType, cx, cy);    if(nType == SIZE_MINIMIZED)    {       ShowWindow(SW_HIDE);// 当最小化时,隐藏主窗口    } }  对话框的最小化托盘于此很类似,可以参考:http://justtotry.blog.163.com/blog/static/446308122011622101427208/

上一篇:PYTHON 双引号 单引号 多引号区别
下一篇:物联网操作系统与易信模式的比较分析

相关文章

相关评论