淺析Visual C++開發(fā)實(shí)現(xiàn)方法
其實(shí)Visual C++不僅是一個(gè)C++編譯器,而且是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境,對(duì)于Visual C++這些組件通過(guò)一個(gè)很重要的組件集成為一個(gè)良好的開發(fā)環(huán)境,還有一些對(duì)Visual C++開發(fā)實(shí)現(xiàn)方法介紹。
這些程序運(yùn)行時(shí)不顯示運(yùn)行窗口,只在任務(wù)欄上顯示一個(gè)圖標(biāo),表示程序正在運(yùn)行,用戶可以通過(guò)鼠標(biāo)與應(yīng)用程序交互,程序開發(fā)人員有時(shí)也需要編制一些僅在后臺(tái)運(yùn)行的類似程序,為了不干擾前臺(tái)程序的運(yùn)行界面和不顯示不必要的窗口,應(yīng)使程序運(yùn)行時(shí)的主窗口不可見。
同時(shí)將一個(gè)圖標(biāo)顯示在任務(wù)欄右端靜態(tài)通告區(qū)中并響應(yīng)用戶的鼠標(biāo)動(dòng)作。本實(shí)例就介紹Visual C++開發(fā)這類程序的設(shè)計(jì)方法,該程序編譯運(yùn)行后,如果雙擊托盤圖標(biāo),程序會(huì)彈出一個(gè)消息列表窗口,只要鼠標(biāo)在托盤圖標(biāo)上移動(dòng)或點(diǎn)擊(無(wú)論是左右鍵的單擊或雙擊),產(chǎn)生的消息都會(huì)顯示在這個(gè)窗口。#t#
當(dāng)鼠標(biāo)光標(biāo)移到托盤圖標(biāo)上時(shí),在圖標(biāo)附近會(huì)顯示提示信息;單擊右鍵時(shí)彈出上下文菜單,這個(gè)菜單中應(yīng)包含打開屬性頁(yè)的命令或者打開與圖標(biāo)相關(guān)的其它窗口的命令,另外,該程序還可以動(dòng)態(tài)的改變托盤的圖標(biāo)。參照這個(gè)例子,相信讀者能輕松自如地在自己的程序中應(yīng)用系統(tǒng)托盤。
Visual C++開發(fā)實(shí)現(xiàn)方法
為了實(shí)現(xiàn)拖盤程序,首先要使程序的主窗口不可見,這點(diǎn)實(shí)現(xiàn)起來(lái)十分容易,只要調(diào)用ShowWindow(SW_HIDE)就可以了,本實(shí)例采用的就是這種方法,還有一種思路是通過(guò)分別設(shè)置主邊框窗口的風(fēng)格和擴(kuò)展風(fēng)格來(lái)隱藏主框架:
在任務(wù)條上顯示圖標(biāo)是利用系統(tǒng)API函數(shù)Shell_NotifyIcon()來(lái)將一個(gè)圖標(biāo)顯示在任務(wù)欄的通告區(qū)中。該函數(shù)的原型為:BOOL Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid); 該函數(shù)的第一個(gè)參數(shù)dwMessage類型為DWORD,表示要進(jìn)行的動(dòng)作,它可以是下面的值之一:
- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.style =WS_POPUP;//使主窗口不可見;
- cs.dwExStyle =WS_EX_TOOLWINDOW;//不顯示任務(wù)按鈕;
- return CFrameWnd::PreCreateWindow(cs);
- }
NIM_ADD:添加一個(gè)圖標(biāo)到任務(wù)欄。NIM_MODIFY:修改狀態(tài)欄區(qū)域的圖標(biāo)。NIM_DELETE:刪除狀態(tài)欄區(qū)域的圖標(biāo)。IM_SETFOCUS:將焦點(diǎn)返回到任務(wù)欄通知區(qū)域。當(dāng)完成用戶界面操作時(shí),任務(wù)欄圖標(biāo)必須用此消息。例如,如果任務(wù)欄圖標(biāo)正顯示上下文菜單,但用戶按下"ESCAPE"鍵取消操作,這時(shí)就必須用此消息將焦點(diǎn)返回到任務(wù)欄通知區(qū)域。
NIM_SETVERSION:指示任務(wù)欄按照相應(yīng)的動(dòng)態(tài)庫(kù)版本工作。第二個(gè)參數(shù)pnid是NOTIFYICONDATA結(jié)構(gòu)的地址,其內(nèi)容視dwMessage的值而定。這個(gè)結(jié)構(gòu)在SHELLAPI.H文件中定義如下:
- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- cs.style =WS_POPUP;//使主窗口不可見;
- cs.dwExStyle =WS_EX_TOOLWINDOW;//不顯示任務(wù)按鈕;
- return CFrameWnd::PreCreateWindow(cs);
- }