您的位置:首页 > 其它

MFC程序最小化到系统托盘

2010-03-13 20:39 337 查看
1.声明一个NOTIFYICONDATA类:

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
NOTIFYICONDATA NotifyIcon;


2.声明一个函数,用于响应鼠标操作:

afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM IParam);

该函数定义代码:

LRESULT CtestDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)


{   //如果鼠标左键托盘单击图标,则显示MFC程序


if (IParam == WM_LBUTTONDOWN)


{


ModifyStyleEx(0,WS_EX_TOPMOST);


ShowWindow(SW_SHOW);                            //显示MFC程序


Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);      //删除系统托盘图标


}else if(IParam == WM_RBUTTONDOWN)                   //鼠标右键单击托盘图标,则显示一个菜单


{


CMenu menu;


menu.LoadMenu (IDR_MENU1);                       //加载菜单资源


CMenu* pContextMenu = menu.GetSubMenu (0);       //取得指向menu菜单索引为0的子菜单的指针


POINT point;


GetCursorPos(&point);                            //取得鼠标坐标


  //显示菜单


pContextMenu->TrackPopupMenu (TPM_LEFTALIGN | TPM_LEFTBUTTON |


TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd ());


}


 


return LRESULT(0);


}


.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}

记得要定义一个菜单资源IDR_MENU1!

3.定义消息名称和消息号:

#define WM_NOTIFYICON (WM_USER+1001)

注册,在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加:

ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)

4.在要将MFC程序最小化到系统托盘的函数中添加以下代码:

NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);


NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_ICON1);      //加载图标,IDR_ICON1是图标资源的ID


NotifyIcon.hWnd=m_hWnd;


lstrcpy(NotifyIcon.szTip,_T("Test"));


NotifyIcon.uCallbackMessage=WM_NOTIFYICON;


NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;


Shell_NotifyIcon(NIM_ADD,&NotifyIcon);                  //显示托盘图标


 


//隐藏MFC程序窗体


ShowWindow(SW_HIDE);


.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}
.codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important}
.linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal}
.codearea pre.alt{ background-color:#f7f7ff !important}
.codearea .lnum{color:#4f81bd;line-height:18px}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: