您的位置:首页 > 其它

MFC实现程序托盘

2016-03-12 15:14 288 查看
        今天将程序托盘加入了正在开发的程序中,实现如下。

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

STRUCT NOTIFLYICONDATA
{
cbSize                 //结构体的大小,以字节为单位
hIcon                  //任务栏上显示的图标
hWnd                   //窗口句柄
uCallbackMessage       //自义定消息处理,当你对托管图标操作时,响应这消息
uFlags                 //作用标识,比如你想让图标起作用可以用NIF_ICON ,想显示提标信息可用NIF_TIP
uID                    //图标ID
szTip                  //鼠标放上去的提示信息
};
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: