




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VisualC面向?qū)ο缶幊探坛痰?章對 話框高級編程 第9章 對話框高級編程 版權(quán)所有版權(quán)所有 復(fù)制必究復(fù)制必究 l模態(tài)對話框在關(guān)閉之前,不允許用戶切換到程序 的其它窗口。因?yàn)楫?dāng)彈出模態(tài)對話框時(shí),它就獲 得了程序的控制權(quán),并且,模態(tài)對話框擁有自己 的消息循環(huán),因此其窗口中所有產(chǎn)生的消息都不 會送到主窗口的消息循環(huán)。 l非模態(tài)對話框彈出后,用戶不需要關(guān)閉它就可以 在非模態(tài)對話框和應(yīng)用程序其它窗口之間進(jìn)行切 換。常用的Find查找和Replace替換對話框就是非 模態(tài)對話框。如果關(guān)閉非模態(tài)對話框的父窗口, 非模態(tài)對話框一般也自動關(guān)閉。 l對于非模態(tài)對話框,使用對話框編輯器創(chuàng)建對話 框資源和使用Cl
2、assWizard類向?qū)砑訉υ捒蝾悺?成員變量和消息處理函數(shù)的方法與模態(tài)對話框一 樣,但創(chuàng)建和退出對話框的方式有所不同。 l創(chuàng)建模態(tài)對話框時(shí)是由系統(tǒng)自動分配內(nèi)存空間, 因 此 在 退 出 對 話 框 時(shí) , 系 統(tǒng) 自 動 調(diào) 用 CDialog:EndDialog()函數(shù)來刪除對話框。而創(chuàng)建 非模態(tài)對話框則需要用戶來分配內(nèi)存,退出時(shí)還 需用戶自己刪除非模態(tài)對話框。 l非模態(tài)對話框的實(shí)例應(yīng)聲明為全局對象,不能象 模態(tài)對話框那樣作為局部對象。一般用new操作 符生成,使用結(jié)束時(shí)用delete操作符將其刪除。 l區(qū)別于模態(tài)對話框,非模態(tài)對話框用new生成對 象后,不是調(diào)用CDialog:DoMo
3、dal()函數(shù),而是調(diào) 用CDialog:Create()函數(shù)裝入對話框資源,并創(chuàng)建 和顯示對話框。 lCreate()函數(shù)在顯示非模態(tài)對話框后就立即返回, 而DoModal()函數(shù)是在模態(tài)對話框被關(guān)閉之后才返 回。并且,由于Create()函數(shù)不會啟動新的消息循 環(huán),非模態(tài)對話框與應(yīng)用程序共用一個消息循環(huán), 這樣,非模態(tài)對話框就不會壟斷用戶的輸入。 lWindows將一些常用的對話框集成到操作系統(tǒng)中, 作為Windows通用對話框庫Commdlg.dll的一部分。 用戶在程序中可以直接使用這些通用對話框,不 必再創(chuàng)建對話框資源和對話框類,減少了大量的 編程工作。并且,用戶還可以定制通用對話框
4、的 外觀和性能。 l為了在MFC應(yīng)用程序中使用通用對話框,MFC提 供了封裝這些通用對話框的類。這些通用對話框 類都是從CCommonDialog類派生而來,而 CCommonDialog類又是CDialog類的派生類。 通用對話框通用對話框 MFC通用對話框類通用對話框類 CColorDialog C CFindReplaceDialog CFontDialog CPagesSetupDialog CPrintDialog COleDialog 說說 明明 顏色設(shè)定對話框,選擇不同的顏色 文件存取對話框,打開或保存文件 查找和替換對話框,查找和替換文本串 字體設(shè)定對話框,選擇不同的字體。 頁
5、面設(shè)置對話框,設(shè)置頁碼、頁眉等 標(biāo)準(zhǔn)的打印對話框,用于打印和打印設(shè)置 該類及其派生類用于生成OLE對話框 l在Window 95推出之前,只提供了靜態(tài)文本、按 鈕、編輯框、列表框和組合框等標(biāo)準(zhǔn)控件。在推 出Window 95時(shí),將其中一些較為流行的控件作 為公共控件引入到Windows中,如旋轉(zhuǎn)按鈕、進(jìn) 度條、滑塊、列表視控件、樹視控件、日期時(shí)間 選取器等公共控件。 l標(biāo)準(zhǔn)控件保存在System目錄下的User.exe文件中, 公共控件保存在System目錄下的Comctl32.dll中文 件。MFC對這些公共控件以類的形式進(jìn)行了封裝, 如CProgressCtrl、CListCtrl和CTr
6、eeCtrl等。 l旋轉(zhuǎn)旋轉(zhuǎn)(Spin)按鈕控件也稱微調(diào)控件或上下控件, 其形狀與滾動條類似,兩端也有兩個箭頭按鈕, 但中間沒有滾動塊。用戶單擊箭頭按鈕可以增加 或減少一個數(shù)值,這個值表示旋轉(zhuǎn)按鈕滾動位置 或另一個與旋轉(zhuǎn)按鈕相關(guān)聯(lián)的控件中的數(shù)據(jù)。 l當(dāng)程序需要用戶在某個范圍內(nèi)輸入一個值時(shí)可以 使用旋轉(zhuǎn)按鈕,其好處是無需當(dāng)心用戶輸入一個 無效值而導(dǎo)致程序的崩潰。 l旋轉(zhuǎn)按鈕控件經(jīng)常和一個關(guān)聯(lián)控件(如編輯框) 綁定在一起使用,用戶只需用鼠標(biāo)單擊旋轉(zhuǎn)按鈕 控件的上下箭頭,就能設(shè)置關(guān)聯(lián)控件中的數(shù)據(jù)內(nèi) 容。對用戶而言,一個旋轉(zhuǎn)按鈕和它的關(guān)聯(lián)控件 看起來就象一個控件。 l可以在程序中通過調(diào)用成員函數(shù)設(shè)置關(guān)
7、聯(lián)控件, 但常用的方法是通過控件Properties對話框直接設(shè) 置關(guān)聯(lián)控件。 l在Alignment下拉框設(shè)置旋轉(zhuǎn)按鈕與關(guān)聯(lián)控件的位 置關(guān)系,Right和Lift分別表示旋轉(zhuǎn)按鈕緊靠在關(guān) 聯(lián)控件窗口的右內(nèi)側(cè)或左內(nèi)側(cè),Unattached表示旋 轉(zhuǎn)按鈕的位置與關(guān)聯(lián)控件無關(guān);屬性Auto buddy 表示旋轉(zhuǎn)按鈕把它前一個控件(按TabOrder順序) 作為關(guān)聯(lián)控件;屬性Set buddy integer表示單擊旋 轉(zhuǎn)按鈕改變位置時(shí),關(guān)聯(lián)控件窗口能自動顯示這 個位置值。 l在控件Properties屬性對話框的Orientation下拉框中 設(shè)置垂直(Vertical)或水平(Horizonta
8、l)方向兩 種風(fēng)格;Wrapt表示當(dāng)旋轉(zhuǎn)按鈕達(dá)到最大(最?。?值時(shí)重新回繞到最?。ㄗ畲螅┲?;No thousands表 示取消顯示數(shù)值中的千分位分隔符;Arrow keys表 示可以使用鍵盤“”和“”鍵改變控件位置值。 l對 旋 轉(zhuǎn) 按 鈕 的 操 作 通 過 調(diào) 用 M F C 類 CSpinButtonCtrl的成員函數(shù)來完成,主要成員函數(shù) 有:SetRange()和GetRange()用于設(shè)置或獲得旋轉(zhuǎn) 按鈕的上下限范圍,SetPos()和GetPos()用于設(shè)置 或獲得旋轉(zhuǎn)按鈕的當(dāng)前位置值,函數(shù)SetBuddy()用 于動態(tài)設(shè)置關(guān)聯(lián)控件,函數(shù)GetBuddy()用于獲得關(guān) 聯(lián)控件窗口的
9、指針。 l滑塊滑塊(Slider)控件也稱滑動條或游標(biāo)控件,它由 滑杠、可沿著滑杠方向移動的滑塊和可選擇刻度 的標(biāo)尺組成。用戶可以通過鼠標(biāo)或鍵盤移動滑塊, 滑塊不同的位置代表了一個不同的數(shù)值。 l與滾動條相比,滑塊控件中間只有一個滑塊,兩 端箭頭按鈕。與旋轉(zhuǎn)按鈕相比,滑塊控件比旋轉(zhuǎn) 按鈕控件更具獨(dú)立性,一般不需要關(guān)聯(lián)控件。 l滑塊控件的屬性:Orientation下拉框設(shè)置滑塊控件 的垂直(Vertical)或水平(Horizontal)方向風(fēng)格。 Point設(shè)置刻度標(biāo)尺的位置,Both表示滑塊是一個 矩形塊,Top/Left表示標(biāo)尺位于滑桿的左邊或上方, Bottom/Right表示標(biāo)尺位于
10、滑桿的右邊或下方。 l當(dāng)滑動滑塊時(shí),滑塊控件將發(fā)送滾動消息來通知 父窗口,垂直滑塊發(fā)送消息WM_VSCROLL,水 平滑塊發(fā)送WM_HSCROLL。 l可調(diào)用封裝滑塊控件的MFC類CSliderCtrl的成員函 數(shù)設(shè)置滑塊的最小、最大值、刻度出現(xiàn)的疏密、 行和頁間距。如:GetLineSize()、SetLineSize()、 GetPageSize()、SetPageSize()、GetRange()、Set- Range()、GetPos()、SetPos()等。 l進(jìn)度條進(jìn)度條(Progress)是一個在進(jìn)行一系列費(fèi)時(shí)操作 時(shí)顯示反饋信息的控件,通過其狀態(tài)的動態(tài)變化 告訴用戶當(dāng)前的操作進(jìn)
11、度。進(jìn)度條也能表示某個 范圍內(nèi)的值,如溫度、水平面高度以及音響系統(tǒng) 頻率的模擬顯示。 l形狀上看,進(jìn)度條由一個細(xì)長的矩形窗口和一些 填充塊組成,其中的填充塊越多,表示任務(wù)越接 近于完成,當(dāng)藍(lán)色塊填滿時(shí),任務(wù)也就完成了。 l我們一般使用進(jìn)度條的默認(rèn)屬性,其常用的屬性 有:Border表示進(jìn)度條有一個邊框;Vertical表示 垂直進(jìn)度條;Smooth表示使用不間斷的藍(lán)色條填 充控件窗口。 l進(jìn)度條控件也有一個“范圍”和“當(dāng)前位置”, 范圍表示整個操作需要完成的工作量,當(dāng)前位置 表明該操作已完成了多少。初始化時(shí)只需設(shè)置進(jìn) 度條值的范圍、當(dāng)前值和使用步長。 l進(jìn)度條控件用于輸出,一般不需要進(jìn)行消息處
12、理。 l為了設(shè)置和獲得進(jìn)度條有關(guān)參數(shù),需要調(diào)用封裝 進(jìn)度條控件MFC類CProgressCtrl的有關(guān)成員函數(shù)。 函數(shù)SetRange()或GetRange()用于設(shè)置或獲取控件 值的范圍,函數(shù)SetPos()和GetPos()用于設(shè)置或獲 取控件的當(dāng)前位置,函數(shù)SetStep()用于設(shè)置步長, 函數(shù)StepIt()用于在控件窗口填充一個藍(lán)色塊。 1. 標(biāo)簽(標(biāo)簽(Tab)控件控件 l標(biāo)簽(Tab)控件也稱選項(xiàng)卡控件,它是一個分割 成多個頁面的窗口,每個頁面都配有一個帶有標(biāo) 題的標(biāo)簽,單擊一個標(biāo)簽就顯示對應(yīng)的頁面。 l標(biāo)簽控件在功能上等價(jià)一系列對話框窗口,但使 用起來更接近于我們的使用習(xí)慣。編
13、程時(shí)使用標(biāo) 簽控件,可以在一個窗口的相同區(qū)域內(nèi)定義多個 頁面,其中每個頁面(可以是一個對話框)上包 括一些不同的控件,以實(shí)現(xiàn)不同的對話功能。 l標(biāo)簽作為控件使用,它不是對話框,編程時(shí)不能 直接在各個標(biāo)簽頁上添加控件,只能在選中不同 標(biāo)簽時(shí)在相同位置顯示含有不同控件的對話框。 l標(biāo)簽控件的屬性有:Alignment下列框用于設(shè)置每 個標(biāo)簽的寬度為自動隨標(biāo)題長度調(diào)節(jié)(Right Justify) 或固定寬度(Fixed Width0,Buttons表示標(biāo)簽采用 按鈕形狀,Multiline表示標(biāo)簽可以多行的形式顯示, Bottom表示標(biāo)簽位于控件的底端,Vertical表示標(biāo) 簽以垂直的方式出現(xiàn)。
14、 l標(biāo)簽控件消息:單擊標(biāo)簽時(shí)發(fā)送消息NM_CLICK。 選擇不同標(biāo)簽時(shí)發(fā)送消息TCN_SELCHANGING (標(biāo)簽切換前)或TCN_SELCHANGE(標(biāo)簽切換后)。 lMFC類CTabCtrl提供了標(biāo)簽控件的各項(xiàng)服務(wù)功能, 通過其成員函數(shù)實(shí)現(xiàn)了對控件及其數(shù)據(jù)結(jié)構(gòu)進(jìn)行 操作的方法。編程時(shí)常用的成員函數(shù)有:函數(shù) InsertItem()或DeleteItem()用于插入或刪除一個標(biāo) 簽,函數(shù)GetCurlSel()或SetCurSel()用于獲取所選 擇標(biāo)簽的索引號或設(shè)置當(dāng)前標(biāo)簽。 l在CTabCtrl類的很多成員函數(shù)中都用到一個 TCITEM結(jié)構(gòu)(取代了TC_ITEM結(jié)構(gòu))的參數(shù), 該結(jié)構(gòu)用
15、于設(shè)置每一個標(biāo)簽的屬性, 2. 屬性表(屬性表(Property sheet) l屬性表屬性表(Property sheet)又稱屬性對話框,其形 式和功能都類似于前面介紹的標(biāo)簽對話框。一個 屬性表由一個CPropertySheet類對象和多個 CPropertyPage類對象構(gòu)成,CPropertySheet類或其 派生類對象代表一個屬性表,CPropertyPage派生 類對象代表每個不同的屬性頁。 l雖然CPropertySheet派生于CWnd,但屬性表的使 用方法與CDialog類似,即先調(diào)用構(gòu)造函數(shù)創(chuàng)建屬 性表,然后調(diào)用CPropertySheet:AddPage()函數(shù)將 屬性頁
16、加入屬性表中,最后調(diào)用CPropertySheet: DoModal()創(chuàng)建一個模態(tài)屬性表,或調(diào)用 CPropertySheet:Create()函數(shù)創(chuàng)建非模態(tài)屬性表。 l一個屬性頁對應(yīng)一個對話框,用于進(jìn)行數(shù)據(jù)的輸 入和輸出。CPropertyPage類派生于CDialog類,因 此,每個屬性頁實(shí)際上就是一個對話框。我們可 以利用對話框編輯器為每個屬性頁添加控件,并 可利用ClassWizard創(chuàng)建自己的派生類,添加與控 件關(guān)聯(lián)的成員變量和消息處理函數(shù)。 例例 利用屬性表實(shí)現(xiàn)與前例相同的功能。 l圖像列表圖像列表(Image list)是一個由一些大小相同的 圖像(如圖標(biāo)或位圖)組成的集合,如
17、圖所示。 圖像列表本身只是一種存儲結(jié)構(gòu),這種存儲結(jié)構(gòu) 與數(shù)組極為相似,存儲在圖像列表中的每個圖像 通過一個索引值識別。 l圖像列表不是控件,沒有對應(yīng)的控件窗口,我們 不能直接看見它,但可利用MFC圖像列表類或圖 像列表的關(guān)聯(lián)控件來顯示圖像列表中的圖像。 l圖像列表由MFC類CImageList支持。CImageList類 提供了創(chuàng)建、顯示和管理圖像列表的方法,調(diào)用 CImageList類的成員函數(shù)Create()創(chuàng)建圖像列表, 調(diào)用函數(shù)Add()或Remove()向圖像列表中添加或刪 除一個圖像,調(diào)用函數(shù)GetImageCount()獲得圖像 列表中圖像個數(shù),調(diào)用函數(shù)Draw()繪制圖像。 l
18、編程時(shí)可以直接使用圖像列表,但圖像列表最主 要的用途還是作為與其相關(guān)聯(lián)控件的顯示項(xiàng)的圖 形標(biāo)志,如圖片控件、列表視控件、樹視控件、 擴(kuò)展組合框、標(biāo)簽控件和屬性頁等。 l列表視列表視(List view)控件也稱列表控件,在需要以報(bào) 表形式顯示數(shù)據(jù)時(shí),列表視控件是最好的選擇。 區(qū)別于列表框,列表視控件可顯示由多個子項(xiàng)組 成的項(xiàng)目,并允許以多種方式顯示信息。列表視 控件還可以為顯示的項(xiàng)目增加一個圖標(biāo),但代表 項(xiàng)目的圖標(biāo)必須存儲在一個圖像列表中。 l列表視控件包含一個項(xiàng)目列表,而其中每一個項(xiàng) 目由圖標(biāo)、項(xiàng)目名稱(主項(xiàng))和多個子項(xiàng)組成, 每個項(xiàng)目所包含子項(xiàng)的數(shù)目必須相同,屬性相同 的每個子項(xiàng)顯示在同一
19、列中。列表視控件有兩個 重要的數(shù)據(jù)結(jié)構(gòu)LVCOLUMN和LVITEM。 列表視控件的屬性一般使用其默認(rèn)值,其常用 的屬性有:View指定程序運(yùn)行后列表視控件最初顯 示的方式,可設(shè)置為Icon(大圖標(biāo))、Small Icon (小圖標(biāo))、List(列表)或Report(報(bào)表); Single selection 表示每次只能選中一個項(xiàng);Auto arrange使得項(xiàng)目在Icon和Small Icon顯示方式下能夠 自動排列整齊;Edit Labels表示可以編輯項(xiàng)目的卷標(biāo), 即主項(xiàng)(第0列)的文本,這時(shí)需要添加控件通知消 息LVN_ENDLABELEDIT的處理函數(shù);No column head
20、er取消控件所有列的標(biāo)題。 列表視控件有多種顯示形式,其細(xì)節(jié)由控件本 身實(shí)現(xiàn)的。MFC提供了CListCtrl類用于實(shí)現(xiàn)列表視 控件的各種功能,如對項(xiàng)目進(jìn)行添加、刪除、修改 和檢索等。主要成員函數(shù):InsertItem()或DeleteItem() 插入或刪除一個主項(xiàng),GetItemText()或SetItemText() 獲得或添加子項(xiàng)文本;GetItemCount()獲取項(xiàng)目的總 數(shù)(行數(shù));FindItem()查找具有某些特征的項(xiàng)目; GetNextItem()查找并返回某些項(xiàng)目的索引,常用于 查找當(dāng)前選擇的項(xiàng)目;SetImageList()把圖像列表與 列表視控件關(guān)聯(lián);InsertColumn()或DeleteColumn() 插入或刪除一個列。 l樹視樹視(Tree view)控件也稱樹控件,用于表示有 層次關(guān)系的事物或能夠進(jìn)行分類劃分的對象。 l樹視圖控件中每個項(xiàng)目由項(xiàng)目名稱和一個可選擇 的圖標(biāo)組成,項(xiàng)目分為父項(xiàng)目和子項(xiàng)目,一個父 項(xiàng)目擁有一個子項(xiàng)目列表,雙擊父項(xiàng)目可以展開 或折疊其中的子項(xiàng)目。父項(xiàng)目位于子項(xiàng)目的上一 層,子項(xiàng)目又可以是低一層子項(xiàng)目的父項(xiàng)目。 l樹視控件編程時(shí)常用到的數(shù)據(jù)結(jié)構(gòu):TVITEM結(jié) 構(gòu)和TVINSERTSTRCT結(jié)構(gòu)。TVITEM結(jié)構(gòu)用于 定義項(xiàng)目,TVINS
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貼磚的施工方案
- 人教版七年級生物下冊 教學(xué)設(shè)計(jì):4.4.4 輸血與血型
- 七年級體育 體育與健康教育第26課教學(xué)設(shè)計(jì) 人教新課標(biāo)版
- 年產(chǎn)20000噸鹽酸產(chǎn)品項(xiàng)目可行性研究報(bào)告(模板范文)
- 佛山2024年廣東佛山市禪城區(qū)聚錦小學(xué)招聘臨聘教師筆試歷年參考題庫附帶答案詳解
- 初中美術(shù)8 地球·綠洲·家園教案及反思
- 麗水2024年浙江麗水青田縣招聘中小學(xué)體育教練員筆試歷年參考題庫附帶答案詳解
- 人教部編版二年級下冊語文園地七教案
- 勞務(wù)安全免責(zé)簡單協(xié)議書范例
- 材料裝修合同范例
- (二模)2025年深圳市高三年級第二次調(diào)研考試歷史試卷(含標(biāo)準(zhǔn)答案)
- 一年級信息技術(shù)下冊 在網(wǎng)上交流信息教學(xué)設(shè)計(jì) 清華版
- 廣西《疼痛綜合評估規(guī)范》(材料)
- 廣東省2024-2025學(xué)年佛山市普通高中教學(xué)質(zhì)量檢測政治試卷及答案(二)高三試卷(佛山二模)
- 11.1 杠桿 課件 2024-2025學(xué)年教科版物理八年級下學(xué)期
- 搶救工作制度課件
- LOGO更換普通夾板作業(yè)課件
- 2025年415全民國家安全教育日主題班會課件
- 美容師考試與法律法規(guī)相關(guān)知識及試題答案
- 山東省東營市東營區(qū)勝利第一初級中學(xué)2024-2025學(xué)年九年級下學(xué)期一模英語試卷(含答案無聽力原文及音頻)
- 臨床決策支持系統(tǒng)在路徑優(yōu)化中的實(shí)踐案例
評論
0/150
提交評論