




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第九章第九章 基于對(duì)話框的應(yīng)用基于對(duì)話框的應(yīng)用Visual C+ 程序設(shè)計(jì) 前一頁(yè) 休息2第九章第九章 基于對(duì)話框的應(yīng)用基于對(duì)話框的應(yīng)用l9.1 基于對(duì)話框的應(yīng)用概述基于對(duì)話框的應(yīng)用概述 l9.2 基于對(duì)話框應(yīng)用的制作流程基于對(duì)話框應(yīng)用的制作流程l9.3 幾種常用控件的編程方法幾種常用控件的編程方法l9.4 一個(gè)簡(jiǎn)單計(jì)算器的設(shè)計(jì)一個(gè)簡(jiǎn)單計(jì)算器的設(shè)計(jì) 前一頁(yè) 休息39.1 基于對(duì)話框的應(yīng)用概述基于對(duì)話框的應(yīng)用概述l9.1.1 基于對(duì)話框應(yīng)用的特點(diǎn)基于對(duì)話框應(yīng)用的特點(diǎn)l9.1.2 基于對(duì)話框應(yīng)用的生成基于對(duì)話框應(yīng)用的生成l9.1.3 基于對(duì)話框應(yīng)用中的類基于對(duì)話框應(yīng)用中的類 前一頁(yè) 休息49.1
2、.1 基于對(duì)話框應(yīng)用的特點(diǎn)基于對(duì)話框應(yīng)用的特點(diǎn)l1. 對(duì)話框的概念對(duì)話框的概念l2. 對(duì)話框的作用對(duì)話框的作用l3. 適于對(duì)話框應(yīng)用的場(chǎng)合適于對(duì)話框應(yīng)用的場(chǎng)合 前一頁(yè) 休息51. 對(duì)話框的概念對(duì)話框的概念l對(duì)話框是對(duì)話框是 Windows 應(yīng)用程序中的一種資應(yīng)用程序中的一種資源。所謂資源,是指可以被多個(gè)程序,或源。所謂資源,是指可以被多個(gè)程序,或一個(gè)程序的多處所使用的數(shù)據(jù)、代碼及其一個(gè)程序的多處所使用的數(shù)據(jù)、代碼及其它們的組合。一個(gè)編譯好的程序塊、對(duì)話它們的組合。一個(gè)編譯好的程序塊、對(duì)話框模板、字體、位圖等都屬于資源。使用框模板、字體、位圖等都屬于資源。使用Windows資源資源, 可以在不必
3、進(jìn)行源代碼編可以在不必進(jìn)行源代碼編譯的情況下改變程序的許多特征。譯的情況下改變程序的許多特征。l對(duì)話框資源在資源編輯器中編輯,它決定對(duì)話框資源在資源編輯器中編輯,它決定了對(duì)話框的組成和形態(tài),但不能決定它的了對(duì)話框的組成和形態(tài),但不能決定它的行為,后者必須由我們自己編程來(lái)實(shí)現(xiàn)。行為,后者必須由我們自己編程來(lái)實(shí)現(xiàn)。 前一頁(yè) 休息62. 對(duì)話框的作用對(duì)話框的作用l對(duì)話框的主要作用是輸出數(shù)據(jù)和接受用戶對(duì)話框的主要作用是輸出數(shù)據(jù)和接受用戶數(shù)據(jù)的輸入,即與用戶進(jìn)行數(shù)據(jù)的輸入,即與用戶進(jìn)行“對(duì)話對(duì)話”。數(shù)。數(shù)據(jù)的輸入輸出是在據(jù)的輸入輸出是在“控件控件”中完成的??刂型瓿傻?。控件是嵌在其它父窗口中的子窗口,每
4、種控件是嵌在其它父窗口中的子窗口,每種控件有其特殊的功能和用法,對(duì)話框就是依件有其特殊的功能和用法,對(duì)話框就是依靠這些控件與用戶進(jìn)行信息交互。控件的靠這些控件與用戶進(jìn)行信息交互??丶拇笮∈枪潭ǖ?,即不隨著對(duì)話框大小的變大小是固定的,即不隨著對(duì)話框大小的變化而變化,因此對(duì)話框一般不設(shè)置最大化化而變化,因此對(duì)話框一般不設(shè)置最大化和向下還原按鈕,通常也不用來(lái)顯示圖形。和向下還原按鈕,通常也不用來(lái)顯示圖形。 前一頁(yè) 休息73. 適于對(duì)話框應(yīng)用的場(chǎng)合適于對(duì)話框應(yīng)用的場(chǎng)合l基于對(duì)話框的應(yīng)用主要適合于輸入輸出都基于對(duì)話框的應(yīng)用主要適合于輸入輸出都是數(shù)據(jù)的簡(jiǎn)單情況。用戶通過(guò)某些控件輸是數(shù)據(jù)的簡(jiǎn)單情況。用戶通
5、過(guò)某些控件輸入數(shù)據(jù),通過(guò)這些控件中數(shù)據(jù)的變化或?qū)θ霐?shù)據(jù),通過(guò)這些控件中數(shù)據(jù)的變化或?qū)α硪恍┛丶牟僮骷ぐl(fā)事件的產(chǎn)生,發(fā)送另一些控件的操作激發(fā)事件的產(chǎn)生,發(fā)送消息給系統(tǒng),系統(tǒng)通過(guò)消息映射,對(duì)對(duì)話消息給系統(tǒng),系統(tǒng)通過(guò)消息映射,對(duì)對(duì)話框類中的消息驅(qū)動(dòng)函數(shù)產(chǎn)生調(diào)用來(lái)完成對(duì)框類中的消息驅(qū)動(dòng)函數(shù)產(chǎn)生調(diào)用來(lái)完成對(duì)數(shù)據(jù)的處理,并將處理結(jié)果通過(guò)另一些控?cái)?shù)據(jù)的處理,并將處理結(jié)果通過(guò)另一些控件顯示出來(lái)。在基于對(duì)話框的應(yīng)用中亦可件顯示出來(lái)。在基于對(duì)話框的應(yīng)用中亦可對(duì)文件和數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě),只不過(guò)讀寫(xiě)操對(duì)文件和數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě),只不過(guò)讀寫(xiě)操作不是通過(guò)作不是通過(guò)“文檔視圖文檔視圖”方式實(shí)現(xiàn)而已。方式實(shí)現(xiàn)而已。 前一頁(yè) 休息8
6、9.1.2 基于對(duì)話框應(yīng)用的生成基于對(duì)話框應(yīng)用的生成l在在 MFC AppWizard - Step 1 中選擇第三中選擇第三個(gè)單選按鈕個(gè)單選按鈕“Dialog based”,單擊,單擊Next。l在向?qū)Ы酉聛?lái)順序彈出的兩個(gè)對(duì)話框在向?qū)Ы酉聛?lái)順序彈出的兩個(gè)對(duì)話框Step 2 of 4,Step 3 of 4,Step 4 of 4中的各個(gè)選中的各個(gè)選項(xiàng)目前均暫可不改,前兩個(gè)僅單擊項(xiàng)目前均暫可不改,前兩個(gè)僅單擊 Next,后一個(gè)僅單擊后一個(gè)僅單擊Finish,或者在向?qū)У谝徊?,或者在向?qū)У谝徊綄?duì)話框中直接單擊對(duì)話框中直接單擊Finish。在最后彈出的。在最后彈出的New Project Info
7、rmation對(duì)話框中單擊對(duì)話框中單擊OK。此時(shí)在屏幕右半部出現(xiàn)一個(gè)對(duì)話框模板。此時(shí)在屏幕右半部出現(xiàn)一個(gè)對(duì)話框模板。 前一頁(yè) 休息99.1.3 基于對(duì)話框應(yīng)用中的類基于對(duì)話框應(yīng)用中的類l我們暫不去對(duì)該對(duì)話框模板進(jìn)行編輯,先我們暫不去對(duì)該對(duì)話框模板進(jìn)行編輯,先來(lái)觀察一下向?qū)槲覀兩闪四男╊悺T趤?lái)觀察一下向?qū)槲覀兩闪四男╊?。在左邊窗口之下的三個(gè)選項(xiàng)卡中選擇左邊窗口之下的三個(gè)選項(xiàng)卡中選擇 Class View,雙擊窗口中的,雙擊窗口中的 “Mypro classes”,稍后在其下出現(xiàn)稍后在其下出現(xiàn)CAboutDlg, CMyproApp和和CMyproDlg三個(gè)類名。再選擇三個(gè)類名。再選擇Fi
8、leView選項(xiàng)卡,分別雙擊窗口中的選項(xiàng)卡,分別雙擊窗口中的Header Files和和Source Files,下分別出現(xiàn),下分別出現(xiàn)CMyproApp和和CMyproDlg兩個(gè)類的定義和實(shí)現(xiàn)文件:兩個(gè)類的定義和實(shí)現(xiàn)文件:Mypro.h, Mypro.cpp, MyproDlg.h, MyproDlg.cpp 前一頁(yè) 休息109.2 基于對(duì)話框應(yīng)用的制作流程基于對(duì)話框應(yīng)用的制作流程l9.2.1 總體設(shè)計(jì)總體設(shè)計(jì)l9.2.2 擺放控件擺放控件l9.2.3 定義屬性定義屬性l9.2.4 建立成員變量建立成員變量l9.2.5 建立消息處理函數(shù)建立消息處理函數(shù)l9.2.6 生成代碼框架生成代碼框架l
9、9.2.7 編寫(xiě)用戶代碼編寫(xiě)用戶代碼 前一頁(yè) 休息119.2.1 總體設(shè)計(jì)總體設(shè)計(jì)l制作一個(gè)基于對(duì)話框的應(yīng)用,首先要做好制作一個(gè)基于對(duì)話框的應(yīng)用,首先要做好應(yīng)用的總體設(shè)計(jì):輸入什么,怎樣輸入?應(yīng)用的總體設(shè)計(jì):輸入什么,怎樣輸入?輸出什么,怎樣輸出?用哪些控件來(lái)完成輸出什么,怎樣輸出?用哪些控件來(lái)完成輸入、輸出功能?各種控件怎樣配合,才輸入、輸出功能?各種控件怎樣配合,才能使操作更加方便?各個(gè)控件怎樣擺放,能使操作更加方便?各個(gè)控件怎樣擺放,才能使用戶界面更加美觀?等等。應(yīng)當(dāng)注才能使用戶界面更加美觀?等等。應(yīng)當(dāng)注意,對(duì)于完成同一種功能的對(duì)話框而言,意,對(duì)于完成同一種功能的對(duì)話框而言,它的設(shè)計(jì)方案
10、不是唯一的,最終應(yīng)用的質(zhì)它的設(shè)計(jì)方案不是唯一的,最終應(yīng)用的質(zhì)量完全取決于設(shè)計(jì)者的美學(xué)和編程水平。量完全取決于設(shè)計(jì)者的美學(xué)和編程水平。 前一頁(yè) 休息129.2.2 擺放控件擺放控件l設(shè)計(jì)方案確定之后,制作的第一步就是在設(shè)計(jì)方案確定之后,制作的第一步就是在對(duì)話框中擺放控件。在左邊的對(duì)話框中擺放控件。在左邊的workspace窗口選中窗口選中ResourceView選項(xiàng)卡,雙擊選項(xiàng)卡,雙擊Dialog,再雙擊,再雙擊IDD_MYPRO_DIALOG打打開(kāi)對(duì)話框模板,從控件工具欄中選中一種開(kāi)對(duì)話框模板,從控件工具欄中選中一種控件拖動(dòng)到對(duì)話框中,或單擊控件選中,控件拖動(dòng)到對(duì)話框中,或單擊控件選中,再在對(duì)
11、話框中畫(huà)出一個(gè)矩形。操作鼠標(biāo)改再在對(duì)話框中畫(huà)出一個(gè)矩形。操作鼠標(biāo)改變控件的大小和位置,或選中一組控件,變控件的大小和位置,或選中一組控件,再運(yùn)行菜單再運(yùn)行菜單Layout下的幾個(gè)菜單項(xiàng)加以自下的幾個(gè)菜單項(xiàng)加以自動(dòng)擺放。仔細(xì)調(diào)整格局,直到滿意為止。動(dòng)擺放。仔細(xì)調(diào)整格局,直到滿意為止。 前一頁(yè) 休息139.2.3 定義屬性定義屬性l制作的第二步就是分別定義對(duì)話框本身以制作的第二步就是分別定義對(duì)話框本身以及各個(gè)控件的屬性。在對(duì)話框或選定的控及各個(gè)控件的屬性。在對(duì)話框或選定的控件上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇件上單擊鼠標(biāo)右鍵,在彈出的菜單中選擇Properties,或選中對(duì)話框或控件,再運(yùn),或選中
12、對(duì)話框或控件,再運(yùn)行行 View-Properties 菜單命令,在彈出的菜單命令,在彈出的Xxx Properties對(duì)話框中定義對(duì)話框或控對(duì)話框中定義對(duì)話框或控件的各種屬性,包括標(biāo)識(shí)件的各種屬性,包括標(biāo)識(shí)ID, 標(biāo)題標(biāo)題Caption以及由復(fù)選框定義的各個(gè)選項(xiàng)以及由復(fù)選框定義的各個(gè)選項(xiàng)(一般不需要一般不需要改動(dòng)改動(dòng))。ID應(yīng)當(dāng)大寫(xiě),并且取名應(yīng)便于記憶應(yīng)當(dāng)大寫(xiě),并且取名應(yīng)便于記憶.某些某些Caption之后可以用之后可以用(&X)定義快捷鍵。定義快捷鍵。 前一頁(yè) 休息149.2.4 建立成員變量建立成員變量l制作的第三步是對(duì)某些存放數(shù)據(jù)的控件定義制作的第三步是對(duì)某些存放數(shù)據(jù)的控件定義
13、成員變量。與成員變量。與VB不同,不同,Visual C+ 中所有中所有與控件對(duì)應(yīng)的變量都不會(huì)自動(dòng)建立,而必須與控件對(duì)應(yīng)的變量都不會(huì)自動(dòng)建立,而必須在類向?qū)е刑砑印_\(yùn)行在類向?qū)е刑砑?。運(yùn)行View-ClassWizard,選中選中Member Variables 選項(xiàng)卡,在下方的選項(xiàng)卡,在下方的列表框中選中待建立成員變量的控件,單擊列表框中選中待建立成員變量的控件,單擊Add Variable按鈕,在按鈕,在Member variable name下的編輯框中填入成員變量名下的編輯框中填入成員變量名m_xxx,從從 Category 下的下拉列表中選定一個(gè)變量下的下拉列表中選定一個(gè)變量種類,如
14、果是種類,如果是Value,還需從,還需從Variable type下拉列表中選定一個(gè)類型。然后單擊下拉列表中選定一個(gè)類型。然后單擊OK。 前一頁(yè) 休息159.2.5 建立消息處理函數(shù)建立消息處理函數(shù)l在第三步對(duì)某些控件建立成員變量之前或在第三步對(duì)某些控件建立成員變量之前或之后,還需對(duì)另一些控件建立消息處理函之后,還需對(duì)另一些控件建立消息處理函數(shù)。在數(shù)。在 MFC ClassWizard 對(duì)話框中選中對(duì)話框中選中Message Maps選項(xiàng)卡,在左邊的選項(xiàng)卡,在左邊的Object IDs列表框中選定一個(gè)控件,在列表框中選定一個(gè)控件,在Messages列表框中選一個(gè)消息,單擊列表框中選一個(gè)消息,
15、單擊Add Function按鈕,修改按鈕,修改Add Member Function對(duì)話框?qū)υ捒蛑兄?Member function name 編輯框中的函編輯框中的函數(shù)名或保持原名,單擊數(shù)名或保持原名,單擊OK按鈕。按鈕。 前一頁(yè) 休息169.2.6 生成代碼框架生成代碼框架l經(jīng)過(guò)上述兩步,已經(jīng)用經(jīng)過(guò)上述兩步,已經(jīng)用ClassWizard在對(duì)話框在對(duì)話框類中建立了成員變量和消息處理成員函數(shù),此類中建立了成員變量和消息處理成員函數(shù),此時(shí)別忘了單擊時(shí)別忘了單擊 OK 按鈕加以確認(rèn),或單擊按鈕加以確認(rèn),或單擊Edit Code按鈕直接進(jìn)入代碼編輯。按鈕直接進(jìn)入代碼編輯。l選中左邊選中左邊Work
16、space窗口的窗口的FileView選項(xiàng)卡選項(xiàng)卡,雙擊雙擊Header Files下的下的MyproDlg.h和和Source Files下的下的MyproDlg.cpp將它們打開(kāi),可觀察將它們打開(kāi),可觀察到在到在CMyprodlg類定義中已生成了你所建立的類定義中已生成了你所建立的數(shù)據(jù)成員和成員函數(shù)聲明,在數(shù)據(jù)成員和成員函數(shù)聲明,在 MyproDlg.cpp中已生成了對(duì)應(yīng)的成員函數(shù)實(shí)現(xiàn)代碼框架。中已生成了對(duì)應(yīng)的成員函數(shù)實(shí)現(xiàn)代碼框架。 前一頁(yè) 休息179.2.7 編寫(xiě)用戶代碼編寫(xiě)用戶代碼l最后一步就是在最后一步就是在ClassWizard為我們生成的類為我們生成的類和成員函數(shù)代碼框架下編寫(xiě)我
17、們自己的用戶代和成員函數(shù)代碼框架下編寫(xiě)我們自己的用戶代碼,以實(shí)現(xiàn)所設(shè)計(jì)的功能。編寫(xiě)用戶代碼是最碼,以實(shí)現(xiàn)所設(shè)計(jì)的功能。編寫(xiě)用戶代碼是最難的一步,編寫(xiě)中需注意以下兩個(gè)問(wèn)題:難的一步,編寫(xiě)中需注意以下兩個(gè)問(wèn)題: a. 除了控件所對(duì)應(yīng)的成員變量和消息處理函數(shù)外,除了控件所對(duì)應(yīng)的成員變量和消息處理函數(shù)外,還可以在類定義中手工加入其它必要的數(shù)據(jù)成員和還可以在類定義中手工加入其它必要的數(shù)據(jù)成員和成員函數(shù)聲明,如這些成員是我們自己類的對(duì)象,成員函數(shù)聲明,如這些成員是我們自己類的對(duì)象,則必須在則必須在.h文件頭部包含這些類的定義頭文件。文件頭部包含這些類的定義頭文件。 b. 處理代碼主要添加在源文件的處理代碼
18、主要添加在源文件的OnInitDialog() 成成員函數(shù)及其它新建的消息處理函數(shù)中。這些函數(shù)的員函數(shù)及其它新建的消息處理函數(shù)中。這些函數(shù)的實(shí)現(xiàn)代碼框架中都有注釋,告訴我們?cè)谀睦锾砑印?shí)現(xiàn)代碼框架中都有注釋,告訴我們?cè)谀睦锾砑印?前一頁(yè) 休息189.3 幾種常用控件的編程方法幾種常用控件的編程方法l9.3.1 Static 和和 Group Boxl9.3.2 Edit Boxl9.3.3 List Boxl9.3.4 Combo Boxl9.3.5 Scroll Barl9.3.6 Spinl9.3.7 Buttonl9.3.8 Radio Buttonl9.3.9 Check Box 前一
19、頁(yè) 休息199.3.1 Static 和和 Group BoxlStatic和和Group Box的功能都是為其它控件的功能都是為其它控件添加注釋或標(biāo)題。前者一般為一個(gè)控件添加添加注釋或標(biāo)題。前者一般為一個(gè)控件添加標(biāo)題,后者一般為一組控件添加標(biāo)題。標(biāo)題標(biāo)題,后者一般為一組控件添加標(biāo)題。標(biāo)題文本可直接填寫(xiě)在文本可直接填寫(xiě)在Properties的的Caption中中.lStatic和和Group Box的默認(rèn)的默認(rèn)ID都是都是STATIC,只有在修改了該默認(rèn)只有在修改了該默認(rèn)ID的情況下,才可為這的情況下,才可為這兩個(gè)控件建立對(duì)應(yīng)的成員變量。兩個(gè)控件建立對(duì)應(yīng)的成員變量。Static成員成員變量的種
20、類可以是變量的種類可以是Value也可以是也可以是Control; Group Box成員變量的種類只能是成員變量的種類只能是Control. 關(guān)于關(guān)于Value和和Control變量值的設(shè)置見(jiàn)下節(jié)。變量值的設(shè)置見(jiàn)下節(jié)。 前一頁(yè) 休息209.3.2 Edit Boxl1. Edit Box的功能的功能l2. Edit Box成員變量成員變量l3. Edit Box的消息的消息 前一頁(yè) 休息211. Edit Box的功能的功能l編輯框控件編輯框控件Edit Box既可用來(lái)輸入數(shù)據(jù),既可用來(lái)輸入數(shù)據(jù),又可用來(lái)顯示數(shù)據(jù)。在僅用于顯示數(shù)據(jù)的又可用來(lái)顯示數(shù)據(jù)。在僅用于顯示數(shù)據(jù)的情況下,可將其情況下,可
21、將其Disabled屬性設(shè)為屬性設(shè)為true。在選擇了在選擇了Styles/Multiline的情況下,的情況下,Edit Box可用于編輯和顯示多行數(shù)據(jù);在選擇可用于編輯和顯示多行數(shù)據(jù);在選擇了了Styles/Number的情況下,的情況下,Edit Box只只能用于編輯和顯示數(shù)值。在設(shè)置了相應(yīng)屬能用于編輯和顯示數(shù)值。在設(shè)置了相應(yīng)屬性的情況下,性的情況下,Edit Box可自動(dòng)或人為產(chǎn)生可自動(dòng)或人為產(chǎn)生橫向和縱向滾動(dòng)條,同時(shí)可以讓其中的數(shù)橫向和縱向滾動(dòng)條,同時(shí)可以讓其中的數(shù)據(jù)左對(duì)齊、居中或右對(duì)齊。據(jù)左對(duì)齊、居中或右對(duì)齊。 前一頁(yè) 休息222. Edit Box成員變量成員變量lEdit Bo
22、x對(duì)應(yīng)的成員變量可以是以下兩個(gè)種對(duì)應(yīng)的成員變量可以是以下兩個(gè)種類類(Category)之一:之一: Value:相當(dāng)于一個(gè)普通變量,其:相當(dāng)于一個(gè)普通變量,其Variable type可以在列出的若干類型中加以選擇。作為普通變可以在列出的若干類型中加以選擇。作為普通變量量,它可直接為其它變量賦值或者被賦值。在賦值它可直接為其它變量賦值或者被賦值。在賦值前后,需調(diào)用基類成員函數(shù)前后,需調(diào)用基類成員函數(shù)UpdateData(TRUE)將數(shù)據(jù)從控件取入變量,或?qū)?shù)據(jù)從控件取入變量,或UpdateData(FALSE)將數(shù)據(jù)從變量置入控件加以顯示。將數(shù)據(jù)從變量置入控件加以顯示。 Control:當(dāng)設(shè)置
23、該控件種類為:當(dāng)設(shè)置該控件種類為Control時(shí),它成時(shí),它成為為 MFC的的CEdit類的一個(gè)對(duì)象。此時(shí)的取值和賦類的一個(gè)對(duì)象。此時(shí)的取值和賦值只能用該對(duì)象調(diào)用成員函數(shù)值只能用該對(duì)象調(diào)用成員函數(shù) GetWindowText和和 SetWindowText 來(lái)實(shí)現(xiàn)。來(lái)實(shí)現(xiàn)。 前一頁(yè) 休息233. Edit Box的消息的消息l無(wú)論無(wú)論Edit Box被設(shè)置為哪個(gè)種類,它都可被設(shè)置為哪個(gè)種類,它都可以對(duì)某些操作產(chǎn)生和發(fā)送消息。該控件產(chǎn)以對(duì)某些操作產(chǎn)生和發(fā)送消息。該控件產(chǎn)生的消息有:生的消息有: EN_CHANGE/ 控件中的數(shù)據(jù)發(fā)生變化 EN_ERRSPACE/ 控件內(nèi)存不足 EN_HSCROL
24、L/ 用戶單擊水平滾動(dòng)條 EN_KILLFOCUS/ 控件失去焦點(diǎn) EN_MAXTEXT/ 字符超出制定最大長(zhǎng)度 EN_SETFOCUS/ 控件獲得焦點(diǎn) EN_UPDATE/ 將要顯示被改變的數(shù)據(jù) EN_VSCOLL/ 用戶單擊垂直滾動(dòng)條 前一頁(yè) 休息249.3.3 List Boxl1. List Box的功能的功能l2. List Box常用成員函數(shù)常用成員函數(shù)l3. List Box常用消息常用消息 前一頁(yè) 休息251. List Box的功能的功能l列表框控件列表框控件List Box用于存儲(chǔ)、顯示和選用于存儲(chǔ)、顯示和選擇呈線性關(guān)系的一組字符串?dāng)?shù)據(jù),它允許擇呈線性關(guān)系的一組字符串?dāng)?shù)據(jù),
25、它允許用戶作單項(xiàng)選擇,在用戶作單項(xiàng)選擇,在Styles/Selection 屬屬性被設(shè)為性被設(shè)為Multiple 的情況下,也允許用戶的情況下,也允許用戶作多項(xiàng)選擇。當(dāng)字符串長(zhǎng)度或個(gè)數(shù)超出列作多項(xiàng)選擇。當(dāng)字符串長(zhǎng)度或個(gè)數(shù)超出列表框?qū)挾然蚋叨葧r(shí),在列表框邊緣會(huì)自動(dòng)表框?qū)挾然蚋叨葧r(shí),在列表框邊緣會(huì)自動(dòng)出現(xiàn)滾動(dòng)條,也可通過(guò)設(shè)置屬性使?jié)L動(dòng)條出現(xiàn)滾動(dòng)條,也可通過(guò)設(shè)置屬性使?jié)L動(dòng)條始終存在于列表框邊緣。在默認(rèn)情況下,始終存在于列表框邊緣。在默認(rèn)情況下,列表框中的數(shù)據(jù)是經(jīng)過(guò)排序的,如不希望列表框中的數(shù)據(jù)是經(jīng)過(guò)排序的,如不希望排序,可將排序,可將Styles/Sort屬性設(shè)為屬性設(shè)為False。 前一頁(yè) 休息2
26、62. List Box常用成員函數(shù)常用成員函數(shù)lList Box成員變量的種類一般都被設(shè)置為成員變量的種類一般都被設(shè)置為Control,此時(shí),此時(shí)List Box是是CListBox類的類的一個(gè)對(duì)象,數(shù)據(jù)的所有操作都必須用成員一個(gè)對(duì)象,數(shù)據(jù)的所有操作都必須用成員函數(shù)來(lái)完成。最常用的成員函數(shù)有:函數(shù)來(lái)完成。最常用的成員函數(shù)有: GetCount/ 返回列表框中字符串的個(gè)數(shù)返回列表框中字符串的個(gè)數(shù) SetTopIndex / 設(shè)置第一個(gè)可見(jiàn)字符串索引設(shè)置第一個(gè)可見(jiàn)字符串索引 GetCurSel/ 得到當(dāng)前選定的字符串索引得到當(dāng)前選定的字符串索引 AddString/ 將一個(gè)字符串追加到列表框?qū)⒁?/p>
27、個(gè)字符串追加到列表框 DeleteString / 從列表框刪除指定的字符串從列表框刪除指定的字符串 ResetContent/ 清除列表框中的所有字符串清除列表框中的所有字符串 前一頁(yè) 休息273. List Box常用消息常用消息lList Box 可產(chǎn)生的消息有:可產(chǎn)生的消息有: ON_LBN_DBLCLK/ 雙擊字符串雙擊字符串 ON_LBN_ERRSPACE/ 數(shù)據(jù)溢出數(shù)據(jù)溢出 ON_LBN_KILLFOCUS/ 失去焦點(diǎn)失去焦點(diǎn) ON_LBN_SELCANCEL/ 取消選擇取消選擇 ON_LBN_SELCHANGE/ 改變選擇改變選擇 ON_LBN_SETFOCUS/ 獲得焦點(diǎn)獲得
28、焦點(diǎn) ON_WM_CHARTOITEM ON_WM_VKEYTOITEM 前一頁(yè) 休息289.3.4 Combo Boxl1. Combo Box的功能的功能l2. Combo Box常用成員函數(shù)常用成員函數(shù)l3. Combo Box常用消息常用消息 前一頁(yè) 休息291. Combo Box的功能的功能l組合框控件組合框控件 Combo Box由一個(gè)編輯框和由一個(gè)編輯框和一個(gè)列表框組合而成。列表框部分可以總一個(gè)列表框組合而成。列表框部分可以總是顯示,也可以在用戶單擊編輯框右側(cè)的是顯示,也可以在用戶單擊編輯框右側(cè)的下拉箭頭時(shí)才顯示。下拉箭頭時(shí)才顯示。l組合框可以用在對(duì)話框空間有限,同時(shí)又組合框可
29、以用在對(duì)話框空間有限,同時(shí)又不必頻繁瀏覽列表的情況下,也可以用在不必頻繁瀏覽列表的情況下,也可以用在同時(shí)需要列表框和編輯框的情況下。同時(shí)需要列表框和編輯框的情況下。l組合框的組合框的Style/Type屬性可設(shè)置為屬性可設(shè)置為Simple (列表總是顯示列表總是顯示)、Dropdown(列表下拉列表下拉)或或Droplist之一。其它屬性與之一。其它屬性與List Box相似。相似。 前一頁(yè) 休息302. Combo Box常用成員函數(shù)常用成員函數(shù)lCombo Box成員變量的種類可以是成員變量的種類可以是Value 也可以是也可以是Control,在,在Value情況下,它以情況下,它以in
30、t保存選定在編輯框中列表項(xiàng)的索引;在保存選定在編輯框中列表項(xiàng)的索引;在Control情況下,它是情況下,它是CComboBox的一個(gè)的一個(gè)對(duì)象,數(shù)據(jù)的操作必須用成員函數(shù)來(lái)完成對(duì)象,數(shù)據(jù)的操作必須用成員函數(shù)來(lái)完成.lCombo Box的成員函數(shù)與的成員函數(shù)與List Box十分相十分相似,特殊的成員函數(shù)有:似,特殊的成員函數(shù)有: SetEditSel/ 設(shè)置選定編輯框中的字符設(shè)置選定編輯框中的字符 GetEditSel/ 得到選定編輯框中的字符得到選定編輯框中的字符 Clear/ 清除所有選定清除所有選定 前一頁(yè) 休息313. Combo Box常用消息常用消息lCombo Box 可產(chǎn)生的消息
31、有:可產(chǎn)生的消息有: ON_CBN_CLOSEUP/ 關(guān)閉列表框關(guān)閉列表框 ON_CBN_DBLCLK/ 雙擊列表字符串雙擊列表字符串 ON_CBN_DROPDOWN/ 打開(kāi)列表框打開(kāi)列表框 ON_CBN_EDITCHANGE/ 編輯框數(shù)據(jù)變化編輯框數(shù)據(jù)變化 ON_CBN_EDITUPDATE/ 將顯示被改數(shù)據(jù)將顯示被改數(shù)據(jù) ON_CBN_ERRSPACE/ 內(nèi)存溢出內(nèi)存溢出 ON_CBN_SELENDCANCEL ON_CBN_SELENDOK/ 選定后縮回選定后縮回 ON_CBN_KILLFOCUS/ 失去焦點(diǎn)失去焦點(diǎn) ON_CBN_SELCHANGE/ 改變選擇改變選擇 ON_CBN_S
32、ETFOCUS/ 獲得焦點(diǎn)獲得焦點(diǎn) 前一頁(yè) 休息329.3.5 Scroll Barl滾動(dòng)條滾動(dòng)條Scroll Bar是用來(lái)對(duì)窗口是用來(lái)對(duì)窗口(包括視圖包括視圖,列表框等列表框等)中數(shù)據(jù)顯示的范圍加以控制的一中數(shù)據(jù)顯示的范圍加以控制的一種控件,包括水平滾動(dòng)條和垂直滾動(dòng)條。種控件,包括水平滾動(dòng)條和垂直滾動(dòng)條。l多數(shù)在平面上可延伸的窗口,當(dāng)顯示內(nèi)容多數(shù)在平面上可延伸的窗口,當(dāng)顯示內(nèi)容超出矩形范圍時(shí)都會(huì)自動(dòng)產(chǎn)生滾動(dòng)條。因超出矩形范圍時(shí)都會(huì)自動(dòng)產(chǎn)生滾動(dòng)條。因此單獨(dú)使用滾動(dòng)條在多數(shù)情況下并非必需此單獨(dú)使用滾動(dòng)條在多數(shù)情況下并非必需.l滾動(dòng)條成員變量的種類可以是滾動(dòng)條成員變量的種類可以是Value也可以也
33、可以是是Control。在。在Value情況下,它以情況下,它以int保存保存或設(shè)置滾動(dòng)的位置;在或設(shè)置滾動(dòng)的位置;在Control情況下,它情況下,它是是CControlBar的一個(gè)對(duì)象,的一個(gè)對(duì)象, 前一頁(yè) 休息339.3.6 Spinl1. Spin的功能的功能l2. Spin的編程方法的編程方法 前一頁(yè) 休息341. Spin的功能的功能l旋鈕控件旋鈕控件 Spin Button 是一對(duì)有上下箭頭是一對(duì)有上下箭頭的按鈕,用戶可以通過(guò)它增減與之綁定的的按鈕,用戶可以通過(guò)它增減與之綁定的其它控件的值,如調(diào)整列表框滾動(dòng)位置、其它控件的值,如調(diào)整列表框滾動(dòng)位置、改變編輯框中的數(shù)據(jù)等等。與之綁定
34、的控改變編輯框中的數(shù)據(jù)等等。與之綁定的控件常被稱為件常被稱為“伙伴窗口伙伴窗口”(buddy window),Spin Button可以作為伙伴窗口的輸入??梢宰鳛榛锇榇翱诘妮斎?。l通過(guò)設(shè)置通過(guò)設(shè)置Style/Auto buddy屬性,可以將屬性,可以將Spin與它的伙伴窗口自動(dòng)捆綁起來(lái);通過(guò)與它的伙伴窗口自動(dòng)捆綁起來(lái);通過(guò)設(shè)置設(shè)置Style/Set buddy integer屬性,可以屬性,可以用用Spin來(lái)為伙伴窗口輸入整型值。來(lái)為伙伴窗口輸入整型值。 前一頁(yè) 休息352. Spin的編程方法的編程方法lSpin 控件對(duì)應(yīng)的類為控件對(duì)應(yīng)的類為 CSpinButtonCtrl。用用Spin為
35、一個(gè)為一個(gè)Edit(種類也必須為種類也必須為Control)輸入整型數(shù)據(jù)的編程方法如下:輸入整型數(shù)據(jù)的編程方法如下: 將將Spin控件??吭诰庉嬁蚩丶丶?吭诰庉嬁蚩丶蘒DC_E的右方。的右方。 Style/Auto buddy和和Style/Set buddy integer屬性均設(shè)置為屬性均設(shè)置為True。 在對(duì)話框類在對(duì)話框類 InitDialog 成員函數(shù)的代碼中調(diào)用成員函數(shù)的代碼中調(diào)用CSpinButtonCtrl成員函數(shù)成員函數(shù)SetBuddy(&m_e) 和和SetRange(min, max), 設(shè)置與它綁定的編輯設(shè)置與它綁定的編輯框框IDC_E和和Spin輸入值的變
36、化范圍輸入值的變化范圍 (min,max). 對(duì)編輯框建立對(duì)編輯框建立EN_CHANGE消息的消息處理函消息的消息處理函數(shù)數(shù)OnChangeE,來(lái)響應(yīng),來(lái)響應(yīng)IDC_E中數(shù)據(jù)的變化。中數(shù)據(jù)的變化。 前一頁(yè) 休息369.3.7 Buttonl按鈕控件按鈕控件Button以及下述的以及下述的Radio Button和和Check Box均為按鈕類均為按鈕類CButton的對(duì)象的對(duì)象,三者只是屬性不同而已,但在三者只是屬性不同而已,但在MFC中將它中將它們作為不同的對(duì)象來(lái)對(duì)待。這里的們作為不同的對(duì)象來(lái)對(duì)待。這里的Button也稱為也稱為Pushbutton。l對(duì)于對(duì)于Pushbutton,一般只需要
37、設(shè)置其,一般只需要設(shè)置其ID和和Caption屬性。在屬性。在ClassWizard中,也僅需中,也僅需建立其單擊消息建立其單擊消息BN_CLICKED的消息處理的消息處理函數(shù),為其建立成員變量意義似乎不大。函數(shù),為其建立成員變量意義似乎不大。 前一頁(yè) 休息379.3.8 Radio Buttonl1. Radio Button的功能的功能l2. Radio Button的編程方法的編程方法(1)l3. Radio Button的編程方法的編程方法(2)l4. Radio Button的編程方法的編程方法(3) 前一頁(yè) 休息381. Radio Button的功能的功能l單選按鈕單選按鈕Rad
38、io Button的功能是在多個(gè)選的功能是在多個(gè)選項(xiàng)中選擇之一,故一般成組出現(xiàn),通常將項(xiàng)中選擇之一,故一般成組出現(xiàn),通常將一組單選按鈕置于一個(gè)一組單選按鈕置于一個(gè)Group Box中。中。 lRadio Button本身的屬性一般只需設(shè)置其本身的屬性一般只需設(shè)置其ID和和Caption,但與之相關(guān)的,但與之相關(guān)的 Group Box的屬性應(yīng)將其的屬性應(yīng)將其General/Group設(shè)為設(shè)為True,這樣,包含在其中的單選按鈕同時(shí)就只能這樣,包含在其中的單選按鈕同時(shí)就只能有一個(gè)被選中。有一個(gè)被選中。 前一頁(yè) 休息392. Radio Button的編程方法的編程方法(1)l在在Radio But
39、ton本身的本身的 General/Group 屬性被設(shè)置為屬性被設(shè)置為 False的情況下,不能建立的情況下,不能建立與其對(duì)應(yīng)的成員變量或?qū)ο螅荒芙⑴c其對(duì)應(yīng)的成員變量或?qū)ο?,而只能建立它的單擊或雙擊消息的消息處理函數(shù)。此它的單擊或雙擊消息的消息處理函數(shù)。此時(shí)必須將一組單選按鈕包含在一個(gè)設(shè)置了時(shí)必須將一組單選按鈕包含在一個(gè)設(shè)置了Group屬性的屬性的Group box中,并且使每個(gè)中,并且使每個(gè)單選按鈕的消息處理函數(shù)共同維護(hù)一個(gè)對(duì)單選按鈕的消息處理函數(shù)共同維護(hù)一個(gè)對(duì)話框類的用戶數(shù)據(jù)成員,以便在其它成員話框類的用戶數(shù)據(jù)成員,以便在其它成員函數(shù)中隨時(shí)獲得按鈕的狀態(tài)。函數(shù)中隨時(shí)獲得按鈕的狀態(tài)。
40、 前一頁(yè) 休息403. Radio Button的編程方法的編程方法(2)l在在Radio Button本身的本身的General/Group屬屬性被設(shè)置為性被設(shè)置為True的情況下,相關(guān)的的情況下,相關(guān)的Group Box的的General/Group屬性失效,此時(shí)可屬性失效,此時(shí)可通過(guò)建立與其對(duì)應(yīng)的成員變量通過(guò)建立與其對(duì)應(yīng)的成員變量 (Value-int 或或Control)來(lái)獲得和設(shè)置按鈕的狀態(tài)。在來(lái)獲得和設(shè)置按鈕的狀態(tài)。在Value情況下情況下, 被選中和未選中的按鈕成員被選中和未選中的按鈕成員變量的值分別為變量的值分別為0和和-1, 可以在可以在BN_CLICK消息處理函數(shù)中設(shè)置、在對(duì)話框類的其它消息處理函數(shù)中設(shè)置、在對(duì)話框類的其它成員函數(shù)中獲得該狀態(tài)。成員函數(shù)中獲得該狀態(tài)。 前一頁(yè) 休息414. Radio Button的編程方法的編程方法(3)l在在Radio Button本身的本身的General/Group屬屬性為性為True, 對(duì)應(yīng)成員變量的種類為對(duì)應(yīng)成員變量的種類為Control的情況下,必須通過(guò)調(diào)用的情況下,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年海東貨運(yùn)考試題庫(kù)
- 入圍中標(biāo)合同范本
- 公司注冊(cè)協(xié)議合同范本
- 公司家具搬遷合同范本
- 公路防撞墻勞務(wù)合同范本
- 公司合同股合同范本
- 保潔服裝購(gòu)置合同范本
- UI軟件合同范本
- 正規(guī)家具合同范本
- 鄉(xiāng)政府廚師合同范本
- GB/T 3003-2017耐火纖維及制品
- GB/T 22080-2016信息技術(shù)安全技術(shù)信息安全管理體系要求
- GB/T 13915-2013沖壓件角度公差
- 制藥工程導(dǎo)論課件
- 瑜伽師地論(完美排版全一百卷)
- 槳聲燈影里的秦淮河1-課件
- 蘇教版五年級(jí)下冊(cè)科學(xué)知識(shí)點(diǎn)全冊(cè)
- 古代歷史北京大學(xué)歷史學(xué)系課件
- 主體結(jié)構(gòu)實(shí)體檢測(cè)方案
- 電焊工培訓(xùn)課件
- 關(guān)于食品工業(yè)企業(yè)誠(chéng)信體系建設(shè)課件
評(píng)論
0/150
提交評(píng)論