下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、慢慢看吧:簡要說明: 信息產(chǎn)業(yè)部電子第二十二研究所青島分所郎銳摘要:本文介紹了在對話框程序基礎(chǔ)上通過程序控制來動態(tài)添加工具條和狀態(tài)條的實(shí)現(xiàn)過程和方法。一、 引言對于不需要文檔/視圖結(jié)構(gòu)支持的程序一般都采用對話框做為程序的基礎(chǔ)框架。雖然在對話框程序上可以通過修改其屬性來添加系統(tǒng)菜單,但對比SDI和MDI程序的工具條和狀態(tài)欄未免使界面顯得簡單、單調(diào)。雖然在Visual Basic 中提供有獨(dú)立的工具條和狀態(tài)欄標(biāo)準(zhǔn)控件可以直接在對話框上使用,但Visual C+ 6.0所提供的26種基本W(wǎng)indows標(biāo)準(zhǔn)控件卻沒有將它們包含其中。因此要在對話框程序中實(shí)現(xiàn)工具條和狀態(tài)欄只能通過編程來動態(tài)實(shí)現(xiàn)。二、 工
2、具條的實(shí)現(xiàn)過程MFC對于工具條和狀態(tài)欄分別提供了CToolBar和CStatusBar兩個基本類庫,但由于在實(shí)現(xiàn)時MFC對其做了過多的封裝,以至無法了解內(nèi)部的一些核心技術(shù)。因此本文在實(shí)現(xiàn)過程中放棄了相對比較方便的CToolBar和CStatusBar類的使用,而是通過SDK(Software Developers Kit,軟件開發(fā)工具箱)式的WinAPI應(yīng)用程序接口來實(shí)現(xiàn)的。在API函數(shù)中經(jīng)常需要用到對話框的窗口句柄和當(dāng)前的實(shí)例句柄,在SDK程序設(shè)計中以上兩個句柄可以直接從入口函數(shù)WinMain()中引出,而在MFC下也對其做了封裝,不能直接獲取。但MFC也為其留有接口:CWnd窗口類提供的G
3、etSafeHwnd()可以返回對話框的窗口句柄;函數(shù)AfxGetInstanceHandle()則可以獲取當(dāng)前應(yīng)用程序的實(shí)例句柄。由于對話框和狀態(tài)欄屬于程序界面的一部分,需要程序啟動時就顯示出來,因此獲取句柄的代碼和后面創(chuàng)建顯示工具條、狀態(tài)欄的全部代碼都應(yīng)當(dāng)放在對話框初始化消息WM_INITDIALOG的響應(yīng)函數(shù)OnInitDialog()中進(jìn)行:HWND hDlg=GetSafeHwnd();HINSTANCE hInstance=AfxGetInstanceHandle(); 對于待添加的工具條按鈕可以根據(jù)情況細(xì)分為兩種:一種是Windows標(biāo)準(zhǔn)的一些工具條按鈕比如打開文件、打印預(yù)覽、在
4、線幫助等等,這類工具條按鈕可以直接使用預(yù)定義好的按鈕圖標(biāo)的ID號,在VC自帶的CommCtrl.h頭文件中有詳細(xì)定義;另一種就是用戶自己添加的工具欄按鈕,只能由用戶在資源視圖中為其指定相應(yīng)的圖標(biāo)。不論是那種工具條按鈕的創(chuàng)建都是通過對TBBUTTON結(jié)構(gòu)的設(shè)置來決定每一個工具條按鈕的狀態(tài),對于第一個填充好的工具條按鈕可以用CreateToolbarEx()來直接將其加入到工具條上,并返回指向工具條的窗口句柄,而對于以后工具條按鈕的添加則只能通過向工具條發(fā)送TB_ADDBUTTONS消息來實(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)建一個可以下按的按鈕0, /保留,由應(yīng)用程序定義該參數(shù)意義0, /按鈕字串索引/創(chuàng)建一個分割按鈕用的豎線0,0,TBSTATE_ENABLED,TBSTYLE_SEP,0,0;/在對話框上動態(tài)創(chuàng)建工具條,并添加工具條按鈕:HWND hToolsWindow=:CreateToolbarEx(hDlg, /指定對話框?yàn)楦复翱?,將工具條創(chuàng)建在對話框上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, /加入到工具條的按鈕的個數(shù)0,0,0,0,sizeof(TBBUTTON);/從IDR_TOOLBAR1資源中裝載按鈕圖標(biāo)到對話框的工具條上TBADDBITMAP tab;tab.hInst=hInstance;tab.nID=IDR_TOOLBAR1;iBmp=:SendMessage(hToolsWindow,T
7、B_ADDBITMAP,(WPARAM)3,(LPARAM)&tab); 向工具條添加工具條按鈕的關(guān)鍵在于對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開始記數(shù)的按
8、鈕圖象的索引;idCommand標(biāo)識了匹配的按鈕,當(dāng)按鈕被按下產(chǎn)生WM_COMMAND消息的時候會用到該標(biāo)識;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ì)說明;fsStyle成員指定了按鈕的風(fēng)格;dwData是應(yīng)用程序定義的值,通常為0;iString為從0開始技術(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; 完成對TBBUTTON結(jié)構(gòu)的設(shè)置后可以通過窗口句柄hToolsWindow向工具條發(fā)送TB_ADDBUTTONS消息來添加按鈕到工具條,如想添加按鈕之間的分割條,只需將TBBUTTON結(jié)構(gòu)的fsStyle成員變量取值為TBSTYLE_SEP即可::SendMessage(hT
10、oolsWindow,TB_ADDBUTTONS,(WPARAM)1,(LPARAM)&tb);三、 狀態(tài)欄的實(shí)現(xiàn)狀態(tài)欄的實(shí)現(xiàn)與工具條的實(shí)現(xiàn)相比非常簡單,只需在CreateStatusWindow()函數(shù)中對其參數(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 此時創(chuàng)建的狀態(tài)欄只是一個位于對話框底部的長條,如需要將其分割為幾部分可以在數(shù)組中設(shè)定好分
11、割點(diǎn)的X坐標(biāo),然后通過向狀態(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)填寫信息,可以通過hStatusWindow向狀態(tài)條發(fā)送消息SB_SETTEXT來完成,該消息的兩個參數(shù)分別用來標(biāo)識在第幾個窗格顯示和待顯示的信息內(nèi)容::SendMessage(hStatusWindow,SB_SETTEXT,1,(LPARAM)TEXT("信息一");小結(jié):本文以SDK的方式實(shí)現(xiàn)了在MFC對話框程序下工具條和狀態(tài)欄的動
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)械行業(yè)促銷計劃總結(jié)
- 健康行業(yè)采購工作總結(jié)
- 重要工程安保工作的系統(tǒng)總結(jié)計劃
- 科技產(chǎn)品設(shè)計師的智能體驗(yàn)與科技感
- 水務(wù)文化建設(shè)的探索計劃
- 中小學(xué)了解學(xué)習(xí)歷史英雄人物故事主題班會:紅色人物1
- 2023年云南省臨滄市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年浙江省舟山市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年山西省忻州市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2022年浙江省麗水市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 長期照護(hù)服務(wù)流程
- 精心打造東北大學(xué)近四年C語言理論考試試題及答案
- 醫(yī)院規(guī)劃發(fā)展部社會工作科職責(zé)
- 《Power Bi應(yīng)用》課程標(biāo)準(zhǔn)
- 《瘋狂動物城》全本臺詞中英文對照
- 幼兒園的品格與道德教育主題班會課件
- 2024抗菌藥物分級管理及臨床合理應(yīng)用考核試題及答案
- 儲能系統(tǒng)的應(yīng)急預(yù)案措施
- 論海瀾之家存貨管理的問題、成因及其對策
- 醫(yī)院長期醫(yī)囑單(模板)
- 班主任育人故事(通用17篇)
評論
0/150
提交評論