MFC最小化到系统托盘
在VC++中,想實(shí)現(xiàn)將MFC最小化到系統(tǒng)托盤(pán),需要調(diào)用NOTIFYICONDATA類(lèi),并注冊(cè)相應(yīng)的消息,以下詳細(xì)講解如何實(shí)現(xiàn):
??? 第一步,聲明一個(gè)NOTIFYICONDATA類(lèi),也就是NOTIFYICONDATA NotifyIcon;該句可以放在Dlg類(lèi)的聲明中,作為Dlg類(lèi)的一個(gè)成員;也可以放在Dlg類(lèi)的實(shí)現(xiàn)中,作為全局變量來(lái)使用。
??? 第二步,聲明一個(gè)響應(yīng)函數(shù)afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);用于響應(yīng)鼠標(biāo)操作。將這個(gè)函數(shù)放入Dlg類(lèi)的聲明中,作為Dlg類(lèi)的一個(gè)成員。
??? 第三步,定義消息名稱(chēng)以消息號(hào),并注冊(cè)消息,該步很重要!我就是因?yàn)闆](méi)有注冊(cè)消息,導(dǎo)致調(diào)試了很久都找不到問(wèn)題所在。該步都是在Dlg.cpp(Dlg的實(shí)現(xiàn)中)中操作。定義消息名稱(chēng)和消息號(hào):#define WM_NC (WM_USER+1001),1001只是用于指定一個(gè)消息號(hào),可以隨便指定。注冊(cè)則是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之間添加ON_MESSAGE(WM_NC,OnNotifyIcon)。
??? 第四步,在要將MFC最小化到系統(tǒng)托盤(pán)的函數(shù)中添加如下代碼:
void MinDialog()
{
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,_T("NotifyIcon Test"));
NotifyIcon.uCallbackMessage=WM_NC;
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon);
}
??? 有了上面的代碼,當(dāng)程序運(yùn)行到含有如上代碼的函數(shù)時(shí)就會(huì)在系統(tǒng)托盤(pán)處添加一個(gè)圖標(biāo),想隱藏主對(duì)話(huà)框,就再添加一句ShowWindow(SW_HIDE);這樣就實(shí)現(xiàn)了將MFC最小化到系統(tǒng)托盤(pán)。但還要添加點(diǎn)擊托盤(pán)圖標(biāo)時(shí)響應(yīng)鼠標(biāo)的函數(shù),也就是第二步中的函數(shù)OnNotifyIcon。
??? 第五步,OnNotifyIcon函數(shù),如下:
void CDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam)
{
if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
//Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);//消除托盤(pán)圖標(biāo)
}
}
??? 以上函數(shù)寫(xiě)的很簡(jiǎn)單,因?yàn)槲叶x的是基于對(duì)話(huà)框的MFC,沒(méi)有添加menu,所以只是實(shí)現(xiàn)了簡(jiǎn)單的點(diǎn)擊托盤(pán)圖標(biāo)就彈出主對(duì)話(huà)框。對(duì)于右鍵點(diǎn)擊托盤(pán)圖標(biāo)彈出小menu,然后選擇操作,最好是建立工程的時(shí)候就選擇基于菜單的MFC,這樣會(huì)容易很多,詳細(xì)的我自己還沒(méi)有研究,就不亂講了。對(duì)于上面函數(shù)中Shell_NotifyIcon(NIM_DELETE,&NotifyIcon)一句,是清除托盤(pán)圖標(biāo),在這里可以沒(méi)有,但在退出整個(gè)程序的時(shí)候一定要加上,不然程序退出了,托盤(pán)處還有一個(gè)圖標(biāo),只有鼠標(biāo)指到那里時(shí)系統(tǒng)才會(huì)發(fā)現(xiàn)是進(jìn)程殘留而清除,這種做法很不好!
轉(zhuǎn)載于:https://www.cnblogs.com/flonlen/archive/2011/09/12/2174259.html
總結(jié)
以上是生活随笔為你收集整理的MFC最小化到系统托盘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HTTP 错误 404.13 - Not
- 下一篇: Fedora 14下安装使用rarlin