下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
一、NOTIFYICONDATA結(jié)構(gòu)NOTIFYICONDATA結(jié)構(gòu)包含了系統(tǒng)用來處理托盤圖標(biāo)的信息,它包括選擇的圖標(biāo)、回調(diào)消息、提示消息、圖標(biāo)對應(yīng)的窗口等內(nèi)容。其定義為:
typedefstruct_NOTIFYICONDATA{
DWORDcbSize;
//以字節(jié)為單位的這個結(jié)構(gòu)的大小
HWNDhWnd;
//接收托盤圖標(biāo)通知消息的窗口句柄
UINTuID;//應(yīng)用程序定義的該圖標(biāo)的ID號
UINTuFlags;
//設(shè)置該圖標(biāo)的屬性
UINTuCallbackMessage;
//應(yīng)用程序定義的消息ID號,此消息傳遞給hWnd
HICONhIcon;
//圖標(biāo)的句柄
charszTip[64];
//鼠標(biāo)停留在圖標(biāo)上顯示的提示信息
}NOTIFYICONDATA,*PNOTIFYICONDATA;
該結(jié)構(gòu)中,成員uFlags可以使下列之一或組合:
NIF_ICON
設(shè)置成員hIcon有效
NIF_MESSAGE
設(shè)置成員uCallbackMessage有效
NIF_TIP
設(shè)置成員szTip有效二、Shell_NotifyIcon函數(shù)
全局函數(shù)Shell_NotifyIcon()用于在托盤上增加、刪除或修改圖標(biāo)。其原型為:
WINSHELLAPIBOOLWINAPIShell_NotifyIcon(DWORDdwMessage,PNOTIFYICONDATApnid);Pnid是上面的NOTIFYICONDATA結(jié)構(gòu)的指針;dwMessage是被傳遞的消息,可以是以下消息之一:
NIM_ADD
增加圖標(biāo)
NIM_DELETE
刪除圖標(biāo)
NIM_MODIFY
修改圖標(biāo)三、托盤圖標(biāo)程序設(shè)計示例
首先我們用AppWizard創(chuàng)建一個基于對話框的應(yīng)用程序CUserDlg。m_nid為類成員變量voidCUserDlg::ToTray()
{
m_nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
m_nid.hWnd=this->m_hWnd;
m_nid.uID=IDR_MAINFRAME;
m_nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
m_nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱WM_SHOWTASK頭函數(shù)中定義為WM_USER+1
m_nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_nid.szTip,"托盤圖標(biāo)");//當(dāng)鼠標(biāo)放在上面時,所顯示的內(nèi)容
Shell_NotifyIcon(NIM_ADD,&m_nid);//在托盤區(qū)添加圖標(biāo)
}四.添加消息WM_SHOWTASK的響應(yīng)函數(shù)afx_msgLRESULTonShowTask(WPARAMwParam,LPARAMlParam);在BEGIN_MESSAGE_MAP(CUserDlg,CDialog)和END_MESSAGE_MAP()之間加代碼:ON_MESSAGE(WM_SHOWTASK,onShowTask)編寫該函數(shù):LRESULTCUserDlg::onShowTask(WPARAMwParam,LPARAMlParam)//wParam接收的是圖標(biāo)的ID,lParam接收的是鼠標(biāo)的行為
{
if(wParam!=IDR_MAINFRAME)
return1;
switch(lParam)
{
caseWM_RBUTTONUP://右鍵起來時彈出快捷菜單,這里只有一個“關(guān)閉”
{
LPPOINTlpoint=newtagPOINT;
::GetCursorPos(lpoint);//得到鼠標(biāo)位置
CMenumenu;
menu.CreatePopupMenu();//聲明一個彈出式菜單
//增加菜單項(xiàng)“關(guān)閉”,點(diǎn)擊則發(fā)送消息WM_DESTROY給主窗口(已
//隱藏),將程序結(jié)束。
menu.AppendMenu(MF_STRING,WM_DESTROY,"退出");
//確定彈出式菜單的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//資源回收
HMENUhmenu=menu.Detach();
menu.DestroyMenu();
deletelpoint;
}
break;
caseWM_LBUTTONDBLCLK://雙擊左鍵的處理
{
this->ShowWindow(SW_SHOWNORMAL);//簡單的顯示主窗口
}
break;
}
return0;
}然后在OnInitDialog函數(shù)中調(diào)用ToTray();五為使應(yīng)用程序退出時圖標(biāo)消失,映射WM_DESTROY消息,在OnDestroy()函數(shù)中加入:
::Shell_NotifyIcon(NIM_DELETE,&m_tnid);六。至此,托盤圖標(biāo)程序的常規(guī)功能我們均已實(shí)現(xiàn)。我們還可以通過Shell_NotifyIcon()函數(shù)的調(diào)用實(shí)現(xiàn)不同狀態(tài)下圖標(biāo)的改變,就象金山詞霸在主窗口打開與暫停取詞時圖標(biāo)有所改變一樣。它常用來顯示一些系統(tǒng)的狀態(tài)。如:系統(tǒng)時間,音量控制以及其它的一些圖標(biāo)總體的思想就是這樣的在VC++中,想實(shí)現(xiàn)將MFC最小化到系統(tǒng)托盤,需要調(diào)用NOTIFYICONDATA類,并注冊相應(yīng)的消息,以下詳細(xì)講解如何實(shí)現(xiàn):
第一步,聲明一個NOTIFYICONDATA類,也就是NOTIFYICONDATANotifyIcon;該句可以放在Dlg類的聲明中,作為Dlg類的一個成員;也可以放在Dlg類的實(shí)現(xiàn)中,作為全局變量來使用。
第二步,聲明一個響應(yīng)函數(shù)afx_msgvoidOnNotifyIcon(WPARAMwParam,LPARAMIParam);用于響應(yīng)鼠標(biāo)操作。將這個函數(shù)放入Dlg類的聲明中,作為Dlg類的一個成員。
第三步,定義消息名稱以消息號,并注冊消息,該步很重要!我就是因?yàn)闆]有注冊消息,導(dǎo)致調(diào)試了很久都找不到問題所在。該步都是在Dlg.cpp(Dlg的實(shí)現(xiàn)中)中操作。定義消息名稱和消息號:#defineWM_NC(WM_USER+1001),1001只是用于指定一個消息號,可以隨便指定。注冊則是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之間添加ON_MESSAGE(WM_NC,OnNotifyIcon)。
第四步,在要將MFC最小化到系統(tǒng)托盤的函數(shù)中添加如下代碼:
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,"NotifyIconTest");
NotifyIcon.uCallbackMessage=WM_NC;
NotifyIcon.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon);
有了上面的代碼,當(dāng)程序運(yùn)行到含有如上代碼的函數(shù)時就會在系統(tǒng)托盤處添加一個圖標(biāo),想隱藏主對話框,就再添加一句ShowWindow(SW_HIDE);這樣就實(shí)現(xiàn)了將MFC最小化到系統(tǒng)托盤。但還要添加點(diǎn)擊托盤圖標(biāo)時響應(yīng)鼠標(biāo)的函數(shù),也就是第二步中的函數(shù)OnNotifyIcon。
第五步,OnNotifyIcon函數(shù),如下:
voidCDlg::OnNotifyIcon(WPARAMwParam,LPARAMIParam)
{
if((IParam==WM_LBUTTONDOWN)||(IParam==WM_RBUTTONDOWN))
{
ModifyStyleEx(0,WS_EX_TOPMOST);
ShowWindow(SW_SHOW);
//Shell_NotifyIcon(NIM_DELETE,&NotifyIcon);
}
}
以上函數(shù)寫的很簡單,因?yàn)槲叶x的是基于對話框的MFC,沒有添加menu,所以只是實(shí)現(xiàn)了簡單的點(diǎn)擊托盤圖標(biāo)就彈出主對話框。對于右鍵點(diǎn)擊托盤圖標(biāo)彈出小menu,然后選擇操作,最好是建立工程的時候就選擇基于菜單的MFC,這樣會容易很多,詳細(xì)的我自己還沒有研究,就不亂講了。對于上面函數(shù)中Shell_NotifyIcon(NIM_DELETE,&NotifyIcon)一句,是清除托盤圖標(biāo),在這里可以沒有,但在退出整個程序的時候一定要加上,不然程序退出了,托盤處還有一個圖標(biāo),只有鼠標(biāo)指到那里時系統(tǒng)才會發(fā)現(xiàn)是進(jìn)程殘留而清除,這種做法很不好!
轉(zhuǎn)自:/s/blog_55f9aac501008gql.html
/hejiady/blog/item/44b730cfb0b0ed38f9dc6163.html
/bester/archive/2009/04/03/78842.html
/course/3_program/vc/vc_js/2007930/75148.html
有了這個是不是還不知道代碼放到哪里那?請看下面
vc響應(yīng)最大化最小化按鈕的事件或消息方法一。在OnSize消息事件中處理
最小化SIZE_MINIMIZED,
最大化SIZE_MAXIMIZED,
還原SIZE_RESTORED,例如:voidCMainDlg::OnSize(UINTnType,intcx,intcy)
{
CDialog::OnSize(nType,cx,cy);//TODO:Addyourmessagehandlercodehere
//::SendMessage(g_hMain,WM_FORM_RESIZE,0,0);
if
(nType==SIZE_MAXIMIZED)
{
//在這里添加最小化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三角形中位線教學(xué)精粹
- 河的第三條岸探索
- 《GB-T 17780.2-2012紡織機(jī)械 安全要求 第2部分:紡紗準(zhǔn)備和紡紗機(jī)械》專題研究報告
- 云平臺升級運(yùn)維合同
- 智能電網(wǎng)調(diào)度工程師招聘筆試考試試卷和答案
- 2025年海洋測量儀器項(xiàng)目合作計劃書
- 遼寧省2025秋九年級英語全冊Unit4Iusedtobeafraidofthedark易錯考點(diǎn)專練課件新版人教新目標(biāo)版
- 幽門狹窄的飲食護(hù)理方案
- 腹瀉與免疫力:護(hù)理干預(yù)措施
- 護(hù)理實(shí)習(xí)中的常見問題及對策
- 2025年沈陽華晨專用車有限公司公開招聘筆試歷年參考題庫附帶答案詳解
- 2026(蘇教版)數(shù)學(xué)五上期末復(fù)習(xí)大全(知識梳理+易錯題+壓軸題+模擬卷)
- 2024廣東廣州市海珠區(qū)琶洲街道招聘雇員(協(xié)管員)5人 備考題庫帶答案解析
- 蓄電池安全管理課件
- 建筑業(yè)項(xiàng)目經(jīng)理目標(biāo)達(dá)成度考核表
- 2025廣東肇慶四會市建筑安裝工程有限公司招聘工作人員考試參考題庫帶答案解析
- 第五單元國樂飄香(一)《二泉映月》課件人音版(簡譜)初中音樂八年級上冊
- 簡約物業(yè)交接班管理制度
- 收購摩托駕校協(xié)議書
- 2025年浙江省中考數(shù)學(xué)試卷(含答案)
- 汽車行業(yè)可信數(shù)據(jù)空間方案
評論
0/150
提交評論