把狀態(tài)欄放到對(duì)話框中_第1頁(yè)
把狀態(tài)欄放到對(duì)話框中_第2頁(yè)
把狀態(tài)欄放到對(duì)話框中_第3頁(yè)
把狀態(tài)欄放到對(duì)話框中_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、慢慢看吧:簡(jiǎn)要說(shuō)明: 信息產(chǎn)業(yè)部電子第二十二研究所青島分所郎銳摘要:本文介紹了在對(duì)話框程序基礎(chǔ)上通過(guò)程序控制來(lái)動(dòng)態(tài)添加工具條和狀態(tài)條的實(shí)現(xiàn)過(guò)程和方法。一、 引言對(duì)于不需要文檔/視圖結(jié)構(gòu)支持的程序一般都采用對(duì)話框做為程序的基礎(chǔ)框架。雖然在對(duì)話框程序上可以通過(guò)修改其屬性來(lái)添加系統(tǒng)菜單,但對(duì)比SDI和MDI程序的工具條和狀態(tài)欄未免使界面顯得簡(jiǎn)單、單調(diào)。雖然在Visual Basic 中提供有獨(dú)立的工具條和狀態(tài)欄標(biāo)準(zhǔn)控件可以直接在對(duì)話框上使用,但Visual C+ 6.0所提供的26種基本W(wǎng)indows標(biāo)準(zhǔn)控件卻沒(méi)有將它們包含其中。因此要在對(duì)話框程序中實(shí)現(xiàn)工具條和狀態(tài)欄只能通過(guò)編程來(lái)動(dòng)態(tài)實(shí)現(xiàn)。二、 工

2、具條的實(shí)現(xiàn)過(guò)程MFC對(duì)于工具條和狀態(tài)欄分別提供了CToolBar和CStatusBar兩個(gè)基本類庫(kù),但由于在實(shí)現(xiàn)時(shí)MFC對(duì)其做了過(guò)多的封裝,以至無(wú)法了解內(nèi)部的一些核心技術(shù)。因此本文在實(shí)現(xiàn)過(guò)程中放棄了相對(duì)比較方便的CToolBar和CStatusBar類的使用,而是通過(guò)SDK(Software Developers Kit,軟件開(kāi)發(fā)工具箱)式的WinAPI應(yīng)用程序接口來(lái)實(shí)現(xiàn)的。在API函數(shù)中經(jīng)常需要用到對(duì)話框的窗口句柄和當(dāng)前的實(shí)例句柄,在SDK程序設(shè)計(jì)中以上兩個(gè)句柄可以直接從入口函數(shù)WinMain()中引出,而在MFC下也對(duì)其做了封裝,不能直接獲取。但MFC也為其留有接口:CWnd窗口類提供的G

3、etSafeHwnd()可以返回對(duì)話框的窗口句柄;函數(shù)AfxGetInstanceHandle()則可以獲取當(dāng)前應(yīng)用程序的實(shí)例句柄。由于對(duì)話框和狀態(tài)欄屬于程序界面的一部分,需要程序啟動(dòng)時(shí)就顯示出來(lái),因此獲取句柄的代碼和后面創(chuàng)建顯示工具條、狀態(tài)欄的全部代碼都應(yīng)當(dāng)放在對(duì)話框初始化消息WM_INITDIALOG的響應(yīng)函數(shù)OnInitDialog()中進(jìn)行:HWND hDlg=GetSafeHwnd();HINSTANCE hInstance=AfxGetInstanceHandle(); 對(duì)于待添加的工具條按鈕可以根據(jù)情況細(xì)分為兩種:一種是Windows標(biāo)準(zhǔn)的一些工具條按鈕比如打開(kāi)文件、打印預(yù)覽、在

4、線幫助等等,這類工具條按鈕可以直接使用預(yù)定義好的按鈕圖標(biāo)的ID號(hào),在VC自帶的CommCtrl.h頭文件中有詳細(xì)定義;另一種就是用戶自己添加的工具欄按鈕,只能由用戶在資源視圖中為其指定相應(yīng)的圖標(biāo)。不論是那種工具條按鈕的創(chuàng)建都是通過(guò)對(duì)TBBUTTON結(jié)構(gòu)的設(shè)置來(lái)決定每一個(gè)工具條按鈕的狀態(tài),對(duì)于第一個(gè)填充好的工具條按鈕可以用CreateToolbarEx()來(lái)直接將其加入到工具條上,并返回指向工具條的窗口句柄,而對(duì)于以后工具條按鈕的添加則只能通過(guò)向工具條發(fā)送TB_ADDBUTTONS消息來(lái)實(shí)現(xiàn):/填充工具條按鈕結(jié)構(gòu):TBBUTTON ptoolbar30=STD_HELP, /指定Windows的

5、標(biāo)準(zhǔn)幫助圖標(biāo)MU_ONE, /工具條按鈕的IDTBSTATE_ENABLED, /可用狀態(tài)TBSTYLE_BUTTON, /指定創(chuàng)建一個(gè)可以下按的按鈕0, /保留,由應(yīng)用程序定義該參數(shù)意義0, /按鈕字串索引/創(chuàng)建一個(gè)分割按鈕用的豎線0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0;/在對(duì)話框上動(dòng)態(tài)創(chuàng)建工具條,并添加工具條按鈕:HWND hToolsWindow=:CreateToolbarEx(hDlg, /指定對(duì)話框?yàn)楦复翱冢瑢⒐ぞ邨l創(chuàng)建在對(duì)話框上WS_CHILD|WS_VISIBLE|TBSTYLE_WRAPABLE|TBSTYLE_TOOLTIPS|TBSTYLE

6、_FLAT|CCS_ADJUSTABLE,/指定工具條的創(chuàng)建風(fēng)格IDB_TOOLBAR,/預(yù)定義的工具條資源ID30,HINST_COMMCTRL, /包含圖片資源的可執(zhí)行文件的實(shí)例句柄IDB_STD_SMALL_COLOR,/圖片的資源IDptoolbar, /待添加的按鈕2, /加入到工具條的按鈕的個(gè)數(shù)0,0,0,0,sizeof(TBBUTTON);/從IDR_TOOLBAR1資源中裝載按鈕圖標(biāo)到對(duì)話框的工具條上TBADDBITMAP tab;tab.hInst=hInstance;tab.nID=IDR_TOOLBAR1;iBmp=:SendMessage(hToolsWindow,T

7、B_ADDBITMAP,(WPARAM)3,(LPARAM)&tab); 向工具條添加工具條按鈕的關(guān)鍵在于對(duì)TBBUTTON數(shù)據(jù)結(jié)構(gòu)的填充,該數(shù)據(jù)結(jié)構(gòu)也是在CommCtrl.h頭文件中定義的,原形為:typedef struct _TBBUTTON int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; DWORD dwData; int iString; TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON; 該結(jié)構(gòu)的數(shù)據(jù)成員包含了處在工具條里的按鈕的相關(guān)信息:成員iBitmap是從0開(kāi)始記數(shù)的按

8、鈕圖象的索引;idCommand標(biāo)識(shí)了匹配的按鈕,當(dāng)按鈕被按下產(chǎn)生WM_COMMAND消息的時(shí)候會(huì)用到該標(biāo)識(shí);fsState指定了按鈕的狀態(tài)標(biāo)志,可以是以下8種標(biāo)志的邏輯組合TBSTATE_CHECKED、TBSTATE_ELLIPSES、TBSTATE_ENABLED、TBSTATE_HIDDEN、TBSTATE_INDETERMINATE、TBSTATE_MARKED、TBSTATE_PRESSED、TBSTATE_WRAP。至于以上各標(biāo)志的具體含義在MSDN的在線幫助中有詳細(xì)說(shuō)明;fsStyle成員指定了按鈕的風(fēng)格;dwData是應(yīng)用程序定義的值,通常為0;iString為從0開(kāi)始技術(shù)的

9、按鈕字串的索引。下面這段代碼用于向工具條添加自定義的工具條按鈕:TBBUTTON tb; tb.iBitmap=iBmp+0;tb.idCommand=MU_TWO;tb.fsState=TBSTATE_ENABLED;tb.fsStyle=TBSTYLE_BUTTON;tb.dwData=0;tb.iString=0; 完成對(duì)TBBUTTON結(jié)構(gòu)的設(shè)置后可以通過(guò)窗口句柄hToolsWindow向工具條發(fā)送TB_ADDBUTTONS消息來(lái)添加按鈕到工具條,如想添加按鈕之間的分割條,只需將TBBUTTON結(jié)構(gòu)的fsStyle成員變量取值為T(mén)BSTYLE_SEP即可::SendMessage(hT

10、oolsWindow,TB_ADDBUTTONS,(WPARAM)1,(LPARAM)&tb);三、 狀態(tài)欄的實(shí)現(xiàn)狀態(tài)欄的實(shí)現(xiàn)與工具條的實(shí)現(xiàn)相比非常簡(jiǎn)單,只需在CreateStatusWindow()函數(shù)中對(duì)其參數(shù)進(jìn)行設(shè)置即可實(shí)現(xiàn):HWND hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_BORDER,TEXT("狀態(tài)欄"),/顯示在狀態(tài)欄上的信息hDlg, /父窗口句柄IDS_STATUS); /預(yù)定義的資源ID 此時(shí)創(chuàng)建的狀態(tài)欄只是一個(gè)位于對(duì)話框底部的長(zhǎng)條,如需要將其分割為幾部分可以在數(shù)組中設(shè)定好分

11、割點(diǎn)的X坐標(biāo),然后通過(guò)向狀態(tài)欄發(fā)送SB_SETPARTS消息即可,該消息的wParam參數(shù)指定了要將狀態(tài)欄分割為幾部分,lParam參數(shù)指定了各分割點(diǎn)的坐標(biāo)值:int pint4=110,250,300,-1;/110,250,300設(shè)定間隔:SendMessage(hStatusWindow,SB_SETPARTS,4,(LPARAM)pint);如需向分割后的狀態(tài)欄內(nèi)填寫(xiě)信息,可以通過(guò)hStatusWindow向狀態(tài)條發(fā)送消息SB_SETTEXT來(lái)完成,該消息的兩個(gè)參數(shù)分別用來(lái)標(biāo)識(shí)在第幾個(gè)窗格顯示和待顯示的信息內(nèi)容::SendMessage(hStatusWindow,SB_SETTEXT,1,(LPARAM)TEXT("信息一");小結(jié):本文以SDK的方式實(shí)現(xiàn)了在MFC對(duì)話框程序下工具條和狀態(tài)欄的動(dòng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論