在實際操作電腦的過程中,我們常常可以看到一些應用程式可以最小化到桌面右下角的托盤中顯示,如一些防毒軟體等開機就顯示在托盤中,或是我們常用的qq等聊天工具,都可以最小化在托盤中,如圖-1。
在圖-1中,可以看到第乙個伺服器樣式的圖示,那個就是我編寫的伺服器程式最小化在托盤中的顯示。其實很簡單,只要在程式中加幾行**就可以了。我主要就mfc中基於dialog對話方塊的程式作一下簡單的介紹。以下是基本步驟:
1、首先建立乙個基於對話方塊的mfc程式;
2、在資源中的icon中匯入乙個自己喜歡的圖示,id命名為idr_mainframe,將先前的idr_mainframe的圖示刪除掉;
3、在自己的dialog標頭檔案中定義乙個變數 notifyicondata m_nid,關於該結構體的具體資訊可以查閱msdn;
4、新增訊息響應函式oninitdialog(),並在該函式中新增以下**,這樣程式一啟動,就在托盤中顯示出了自己應用程式的圖示。
//---------------------------托盤顯示---------------------------------//
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; // 自定義的訊息名稱
m_nid.hicon = loadicon(afxgetinstancehandle(),makeintresource(idr_mainframe));
strcpy(m_nid.sztip, "伺服器程式"); // 資訊提示條為"伺服器程式"
shell_notifyicon(nim_add, &m_nid); // 在托盤區新增圖示
這時候編譯,會報wm_showtask的錯,因為該訊息要自己定義。
5、在dialog標頭檔案中宣告訊息函式原型
lresult onshowtask(wparam wparam, lparam lparam);
6、在dialog原始檔中進行訊息對映
on_message(wm_showtask,onshowtask)
7、在dialog原始檔中新增自定義的訊息響應**,左鍵雙擊彈出應用程式主視窗,右鍵單擊彈出選單。
lresult cserverdlg::onshowtask(wparam wparam, lparam lparam)
break;
case wm_lbuttondblclk: // 雙擊左鍵的處理
break;
}return 0;
}8、新增onsize訊息響應函式,處理最小化時的操作。
void cserverdlg::onsize(uint ntype, int cx, int cy) }
9、新增關閉視窗時的訊息響應函式,將托盤中的應用程式圖示刪除
bool cserverdlg::destroywindow()
經過以上的步驟,就編寫出了乙個簡單的可以最小化到托盤的程式。該程式在一啟動時,在托盤創立應用程式的圖示,最小化程式時隱藏主視窗,雙擊托盤區的圖示時,顯示主視窗,右鍵點選托盤區視窗時,彈出選單進行相應的操作。
VC最小化程式到托盤
一 notifyicondata結構 notifyicondata結構包含了系統用來處理托盤圖示的資訊,它包括選擇的圖示 訊息 提示訊息 圖示對應的視窗等內容。其定義為 typedef struct notifyicondata notifyicondata,pnotifyicondata 該結構中...
最小化程式到托盤
引用 所謂的 托盤 在windows系統介面中,指的就是下面任務條右側,有系統時間等等的標誌的那一部分。在程式最小化或掛起時,但有不希望佔據工作列的時候,就可以把程式放到托盤區。一 托盤程式設計相關函式 把程式放到托盤上的本質就是先在托盤區繪製乙個圖示,然後把程式隱藏不見,再對托盤的圖示進行訊息處理...
最小化到托盤
notifyicon notifyicon1 void inittraymenu 在建構函式時呼叫此函式 void notifyicon1 click object sender,eventargs e private void menuitem1 click object sender,syste...