⑴ 怎麼設置程序啟動後最小化到托盤
要實現將程序最小化到托盤,就要截獲WM_SIZE消息,並作出相應的消息響應。(WM_SIZE在窗口大小改變時被拋出)
可以重載OnSize()方法,實現托盤圖標。
數據結構NOTIFYICONDATA用來儲存托盤圖標的信息,結構如下:
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
WCHAR szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
首先要在對話框類中加入NOTIFYICONDATA變數:
NOTIFYICONDATA nid;
然後要在OnInitDialog()中對nid進行一些初始化:
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); //數據的大小
nid.hWnd = this->GetSafeHwnd(); //獲取當前窗口句柄
nid.uID = 100; //指定該nid的ID
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; //定義圖標的屬性:圖標有效|自定義消息有效|滑鼠指向顯示文字有效
nid.uCallbackMessage = WM_TRAYICON_RESTORE; //定義CALLBACK消息名稱,用來響應對托盤圖標的操作
nid.hIcon = m_hIcon; //指定顯示的圖標
wcscpy(nid.szTip, _T("TrayIcon")); //滑鼠指向圖標時的提示框
當然在頭文件中要定義好WM_TRAYICON_RESTORE,
#defined WM_TRAYICON_RESTORE WM_USER+101 //這個值一般要大於100
重載OnSize()方法,假如對話框類是CTrayIconDlg;
void CTrayIconDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (nType==SIZE_MINIMIZED) //如果事件為最小化
{
Shell_NotifyIcon(NIM_ADD,&nid); //在托盤區添加圖標
ShowWindow(SW_HIDE); //隱藏主窗口
}
}
運行程序,最小化窗口,是不是成功將窗口藏到系統托盤了。
現在還不能讓程序窗口還原,無論單擊,雙擊小圖標都沒反應,那是因為沒有對其消息進行處理。
首先在CTrayIconDlg類中加入方法:
afx_msg LRESULT OnRestore(WPARAM wParam, LPARAM lParam);
實現如下:
LRESULT CTrayIconDlg::OnRestore(WPARAM wParam, LPARAM lParam)
{
if( lParam == WM_LBUTTONDOWN ) //如果在圖標中單擊左鍵則還原
{
ShowWindow(SW_SHOWNORMAL); //顯示主窗口
this->SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//使窗口總是在最前面
//Shell_NotifyIcon(NIM_DELETE,&nid); //若加入這行,則在窗口還原後刪除托盤圖標,否則保留托盤圖標
}
return 0;
}
把該方法加入消息映射表:
將ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)插到映射表中
BEGIN_MESSAGE_MAP(CForexDemoDlg, CDialog)
...
...
ON_MESSAGE(WM_TRAYICON_RESTORE, OnRestore)
END_MESSAGE_MAP()
⑵ 鏄撹璦鎬庝箞璁╃▼搴忔渶灝忓寲鍒版墭鐩樺尯鍩燂紵鍗曟満鎵樼洏鍥炬爣鏃跺脊鍑鴻彍鍗曪紝鑿滃崟涓鏈夐夐」鑳芥樉紺虹▼搴忛潰鏉匡紵
鎵樼洏鍏跺疄寰堢畝鍗曪紝灝辨槸鍙瑙嗙殑闂棰樸傗拡瀵煎叆浣犵殑鎵樼洏鍥炬爣鍒板浘鐗囨垨鍥劇墖緇勮祫婧愰噷錛屽懡鍚嶄負鍥劇墖1騫跺姞鍏ヤ互涓嬩唬鐮侊細
======================================================================
.鐗堟湰 2.瀛愮▼搴 __鍚鍔ㄧ獥鍙_鍒涘緩瀹屾瘯緗鎵樼洏鍥炬爣 (#鍥劇墖1, )
======================================================================
鈷夌劧鍚庝負鍚鍔ㄧ獥鍙e壋寤轟竴涓鑿滃崟錛岃彍鍗曢噷鍒涘緩涓や釜瀛愰」涓烘樉紺虹晫闈㈠拰闅愯棌鐣岄潰錛屽苟涓旀妸浠栦滑鍙瑙嗗睘鎬х殑鍕懼幓鎺夛紱鈷婂姞鍏ヤ互涓嬩唬鐮侊細
=======================================================================
.鐗堟湰 2.瀛愮▼搴 __鍚鍔ㄧ獥鍙_鎵樼洏浜嬩歡
.鍙傛暟 鎿嶄綔綾誨瀷, 鏁存暟鍨.鍒ゆ柇寮濮 (_鍚鍔ㄧ獥鍙.鍙瑙 錛 鐪)
闅愯棌鐣岄潰.鍙瑙 錛 鐪
鏄劇ず鐣岄潰.鍙瑙 錛 鍋
.榛樿
_鍚鍔ㄧ獥鍙.鍙瑙 錛 鍋
鏄劇ず鐣岄潰.鍙瑙 錛 鐪
闅愯棌鐣岄潰.鍙瑙 錛 鍋
.鍒ゆ柇緇撴潫
寮瑰嚭鑿滃崟 (鑿滃崟, , )
=======================================================================鈷嬩負闅愯棌鐣岄潰鍜屾樉紺虹晫闈㈡坊鍔犱互涓嬩唬鐮侊細
=======================================================================
.鐗堟湰 2.瀛愮▼搴 _鏄劇ず鐣岄潰_琚閫夋嫨_鍚鍔ㄧ獥鍙.鍙瑙 錛 鐪.瀛愮▼搴 _闅愯棌鐣岄潰_琚閫夋嫨_鍚鍔ㄧ獥鍙.鍙瑙 錛 鍋
=======================================================================
PS錛氳繖涓鍙鏄涓鎬濊礬錛屽彲浠ユ牴鎹闇瑕佽嚜宸辨敼鏀癸紝娌℃湁鎺т歡錛屽浘鎴戝氨涓嶄笂浜嗐
⑶ 鎬庝箞鎶婁竴涓紼嬪簭闅愯棌鎴栬呭紕鍒版墭鐩橀噷鍘伙紵
浣犲傛灉瑕佸交搴曢殣鈃忚蔣浠惰繍琛岋紝鍙浠ュ幓緗戜笂涓嬭澆涓涓鍙鈥滄棤蹇ч殣鈃忊濈殑杞浠訛紝錛堟よ蔣浠舵槸鏀惰垂鐨勶紝涓嶈繃緗戜笂宸叉湁鐮磋В鐨勪簡錛夛紝鍏堝惎鍔ㄤ綘瑕侀殣鈃忕殑杞浠訛紝鐒跺悗鍚鍔ㄢ滄棤蹇ч殣鈃忊濓紝鍦ㄥ叾涓葷晫闈浣跨敤榧犳爣鍙抽敭鍗曞嚮浣犺侀殣鈃忕殑紼嬪簭錛岄夋嫨鈥滃皢鏈紼嬪簭娣誨姞鑷沖揩閫熼殣鈃忓垪琛ㄢ濓紝浠ュ悗鍙瑕侀嗗兼潵浜嗭紝鍙瑕佹寜涓嬮紶鏍囨粴杞鍗沖彲銆
瑕佹仮澶嶏紝鎸変綇宸﹂敭涓嶆斁錛岀劧鍚庡崟鏈哄彸閿灝辮屼簡銆傚傛灉浣犺佹妸紼嬪簭鏈灝忓寲鍒扮郴緇熸墭鐩橈紝鎺ㄨ崘浣跨敤Alltotray錛屽湪澶氱壒鏈夌殑涓嬶紝鏄奼夊寲鐨勩傚叿浣撲嬌鐢ㄦ柟娉曞氨涓嶈翠簡錛屽緢鏂逛究鐨勶紝濡傛灉鎵句笉鍒幫紝鎴戝彲浠ュ彂鍒頒綘閭綆便傛湁闂棰樺啀闂鎴戝惂錛屽笇鏈涙垜鐨勫洖絳斿逛綘鏈夋墍甯鍔┿⑷ 楂樺痙鍦板浘濡備綍鏈灝忓寲鍒版墭鐩橈紵
鍦ㄩ珮寰峰湴鍥句腑錛岃佽劇疆鏈灝忓寲灝忕獥鍙o紝鍙浠ユ寜鐓т互涓嬫ラよ繘琛屾搷浣滐細
鎵撳紑楂樺痙鍦板浘搴旂敤紼嬪簭錛岃繘鍏ュ湴鍥鵑〉闈銆
鍦ㄥ湴鍥鵑〉闈涓婃柟錛屽彲浠ョ湅鍒頒竴涓"鏈灝忓寲"鎸夐挳錛屽畠浣嶄簬宸︿笂瑙掋傜偣鍑昏ユ寜閽鍚庯紝鍦板浘紿楀彛浼氳鏈灝忓寲錛屽苟涓斿湪灞忓箷鍙充笅瑙掍細鍑虹幇涓涓灝忕獥鍙c
濡傛灉鎯寵佹仮澶嶅湴鍥劇獥鍙o紝鍙浠ョ偣鍑誨皬紿楀彛錛岀劧鍚庡湴鍥劇獥鍙e氨浼氭仮澶嶅埌鍘熸潵鐨勫ぇ灝忋
闇瑕佹敞鎰忕殑鏄錛屾寜鐓т笂榪版ラよ劇疆鏈灝忓寲灝忕獥鍙g殑鍓嶆彁鏄錛屼綘宸茬粡瀹夎呭苟鎵撳紑浜嗛珮寰峰湴鍥懼簲鐢ㄧ▼搴忋傚傛灉浣犳槸絎涓嬈′嬌鐢ㄩ珮寰峰湴鍥撅紝闇瑕佸厛鍦ㄥ簲鐢ㄥ晢搴楁垨鑰呭畼鏂圭綉絝欎笅杞藉苟瀹夎呰ュ簲鐢ㄧ▼搴忋