MFC实现程序托盘

来源:互联网 发布:mac os x sierra bug 编辑:程序博客网 时间:2024/05/16 19:49

        今天将程序托盘加入了正在开发的程序中,实现如下。

        使程序托盘我们这里要用到了一个结构体NOTIFYICONDATA,它包含了系统需要用来传递托盘区域信息的消息;还有需要用到一个函数Shell_NotifyIcon,它的作用是对拖盘图标进行显示与删除。

STRUCT NOTIFLYICONDATA{cbSize                 //结构体的大小,以字节为单位hIcon                  //任务栏上显示的图标hWnd                   //窗口句柄uCallbackMessage       //自义定消息处理,当你对托管图标操作时,响应这消息uFlags                 //作用标识,比如你想让图标起作用可以用NIF_ICON ,想显示提标信息可用NIF_TIPuID                    //图标IDszTip                  //鼠标放上去的提示信息};BOOL Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA lpdata);/**dwMessage:执行的操作,可选参数为:NIM_ADD(创建托管图标,NIM_DELETE(删除托管图标),NIM_MODIFY(修改托管图标)**/

现在开始实现,首先定义NOTIFYICONDATA,在OnInitDialog对其初始化。

nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this-> m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP   ; nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip, _T("xxx"));//信息提示条 Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标

自定义消息供NOTIFYICONDATA结构使用。

#define WM_SHOWTASK (WM_USER + 100)afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);LRESULT CQueueServerDlg::OnShowTask(WPARAM wParam,LPARAM lParam) //wParam是图标的ID,lParam是鼠标的行为 { if(wParam != IDR_MAINFRAME) {return   1; }switch(lParam) { case WM_RBUTTONUP://右键起来时弹出快捷菜单{ LPPOINT   lpoint=new   tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu   menu; menu.CreatePopupMenu();//声明一个弹出式菜单 menu.AppendMenu(MF_STRING,WM_DESTROY, "Close"); //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏)将程序结束。 SetForegroundWindow(); menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //确定弹出式菜单的位置HMENU   hmenu=menu.Detach();  //资源回收 menu.DestroyMenu(); delete   lpoint; } break; case WM_LBUTTONDBLCLK:{ this-> ShowWindow(SW_SHOW);} break; case  WM_LBUTTONDOWN:this-> ShowWindow(SW_SHOW);break;} return   0; } 

最后在OnDestroy函数删除托盘图标。

Shell_NotifyIcon(NIM_DELETE,&nid);

1 0
原创粉丝点击