Visal C程序的設計教程第7章_第1頁
Visal C程序的設計教程第7章_第2頁
Visal C程序的設計教程第7章_第3頁
Visal C程序的設計教程第7章_第4頁
Visal C程序的設計教程第7章_第5頁
已閱讀5頁,還剩59頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第7章 控件與功能函數第7章 控件與功能函數本章講述基本控件及其使用方法和函數建立與調用。http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/

2、 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ 控件概述最基本的控件及其相應的mfc類有:l靜態控件cstaticl按鈕控件cbuttonl滾動條控件cscrollbarl編輯框控件ceditl列表框控件clistboxl組合框控件ccombobox等使用控件的方法使用控件的方法使用控件最常用的方法就是在資源編輯器中,創建一個對話框資源,然后在上面擺上所需要的控件,這種布局方式下的控件又稱為靜態創建控件。 當然控件也可以動態的創建,每一類控件都提供了create函數,允許控件的動態創建。 http:/

3、 http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ h

4、ttp:/ http:/ http:/ 控件的手工編輯可以通過對話框工具條和控件工具條來手工編輯控件。 菜單tool | customize可以打開對話框工具條和控件工具條。 控件工具條控件工具條控件工具條 : 對話框工具條對話框工具條 對話框工具條 :7.1.2 控件的操作和使用三種控件的操作方法: l使用 getdlgitem()函數來獲得與控件相關聯cwnd對象的指針,然后通過該指針調用成員函數來實現同樣的功能。 l利用各種控件類的成員函數來控制各種控件;l對控件生成一個相應的成員變量,該變量可以是值(value)。 對于靜態創建的控件,編程時大多采用第三種方法來操作控件,而對動態創建的

5、控件只能用前兩種方法來操縱控件。控件的操作和使用控件的操作和使用對控件的操作和使用一般按以下步驟進行:l在對話框資源中添加控件。通過屬性對話框可以對控件的風格進行設置。l通過定義與控件相關的控件類的對象或相應的數值變量。l通過定義控件的消息響應函數,生成對話框類的成員函數。l在消息響應函數中添加適當的代碼。7.1.3 用于常用控件的通知用于常用控件的通知 7.2 靜態控件靜態控件在mfc中使用cstatic表示,靜態文本控件的功能比較簡單,可作為顯示字符串、圖標、位圖用。7.3 按鈕控件按鈕窗口(控件)在mfc中使用cbutton表示,cbutton包含了三種樣式的按鈕:l按鍵按鈕:push

6、buttonl復選框:check boxl單選框:radio boxhttp:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ htt

7、p:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ 按鈕控件的樣式按鈕控件的樣式可以在properties對話框的styes屬性頁進行設置:l 按鍵按鈕控件的properties對話框 :按鈕控件的樣式(續)l組框控件的properties對話框 :按鈕控件的樣式(續)l單選按鈕控件的properties對話框 :按鈕控件的樣式(續)l復選框控件的properties對話框 :7.3.2 cbutton類7.3.3 按鈕控件消息7.4 編輯框控件編輯框就是一個矩形控制窗口,它一般在對話框中,以允許用戶從鍵盤輸入并編輯文字當編輯

8、框成為輸入焦點時,其將顯示一個插入符,然后用戶就可以利用鍵盤和鼠標來輸入文本,移動插入點,選擇移動刪除文本等。編輯框屬于edit窗口類,可以給其父窗口發送通知消息。 7.4.1 按鈕控件的樣式 編輯框控件的properties對話框 : 7.4.2 類cedit所有成員函數7.4.3 編輯框控件消息7.5 列表框控件listbox窗口用來列出一系列可供用戶從中選擇的項,這些項一般以字符串的形式給出。mfc類clistbox封裝了標準列表框控件,其成員函數提供了對標準列表框的絕大多數操作,下表列出了一些重要的成員函數。7.5.1 列表框控件樣式7.5.2 類clistbox常用成員函數7.5.3

9、 列表框控件消息http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/www.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ h

10、ttp:/ http:/ http:/ http:/ http:/ 組合框控件組合窗口是由一個輸入框和一個列表框組成。它可以看作是一個編輯框或靜態文本框與一個列表框的組合,組合框的名字也是由此而來 。7.6.1 組合框控件樣式 組合框控件的properties對話框 :7.6.2 類ccombobox常用成員函數7.6.3 組合框控件消息7.7 滾動條控件滾動條分為水平滾動條和垂直滾動條兩種,通常使用滾動條來進行定位之類的操作。7.7.1 滾動條控件樣式ltopleft表示將滾動條的左上邊與由函數createwindowex的參數定義的矩形的左上邊對齊;lbuttonright則表示與右下邊對

11、齊;l該屬性的默認值為none,即不進行任何對齊操作7.7.2 cscrollbar類7.7.3 滾動條控件消息當對滾動條操作后,所在的對話框會接受到wm_hscoll消息和wm_vscoll消息。在這兩個消息的響應函數中可以判斷是哪一個滾動條發生了變化,然后進行相應的操作。 cwnd類中定義了處理該消息的成員函數onhscoll 和onvscoll。 onhscoll成員函數的原型成員函數的原型 :afx_msg void onhscoll(uint nsbcode,uint npos,cscrollbar *pscrollbar);7.8 常用控件應用實例本節例子主要用來說明對話框和控件的

12、使用。例子的實現功能是在程序主界面出現一個用戶調查表圖所示:操作步驟(創建工程):操作步驟(創建工程):步驟1.在vc+集成開發環境中,通過菜單file | new,彈出new對話框;步驟2.在projects標簽中選擇mfc app wizar(exe),在project name中輸入“eg7_1”,location讀者可以自己選擇; 步驟3.按下ok按鈕,在彈出的mfc app wizard step-1對話框中選擇程序框架為單文檔框架,即選中single document; 步驟4.按下ok按鈕,在彈出的new project information對話框中按下ok按鈕后等待創建完相應

13、的工程。 7.8.1 創建對話框資源l在工作區中選中resourse view標簽展開eg7_1resourse | dialog條目,可以察看當前工程中的對話框資源;l選擇dialog條目,單擊鼠標右鍵,彈出活動菜單,選擇菜單insert dialog命令;l將鼠標移動到對話框資源上,單擊鼠標右鍵,在彈出的菜單中選擇properties菜單命令,將對話框的標題設置為“用戶調查表”標識號不變。創建對話框資源(續)l刪除對話框資源本來就有的靜態控件,利用鼠標將按鈕ok和cancel移動到對話框的底部,將按鈕的標題分別改為確定,取消。l在工具欄中的靜態控件上單擊一下鼠標左鍵,然后在對話框資源中按下

14、鼠標左鍵拖動,出現一個矩形框,松開鼠標左鍵,則在對話框資源中出現一個靜態控件,將該靜態控件的標題改為“姓名”其標識號改為idc_static_name。 創建對話框資源(續)l按照上面的方法在對話框資源上加入其它的控件,它們的類型、標題和標識號如下:http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/w

15、ww.xunchi- http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ http:/ 生成對話框類資源創建完畢以后,還需要創建一個與對話框資源相關聯的類,這個類需要從對話框類派生,然后定義一個派生類的對象,通過派生類的對象使對話框的功能得以實現。生成對話框類的操作步驟:l在對話框資源上單擊右鍵,在彈出的菜單中選擇class wiizard,在mfc class wiizard對話框

16、彈出以后緊接著彈出adding class。在打開對話框的過程中,如果系統監測到有新建的對話框資源,菜單資源等,并且該資源沒有與之相關聯的類,就會彈出對話框,詢問是否創建新的類 。生成對話框類的操作步驟(續):l在adding class對話框中確認默認選擇create a new class,單擊按鈕彈出new class對話框,在編輯框中輸入新建類的名稱ceg7-1dialog,其他設置取默認值。l單擊ok按鈕后顯示出mfc class wiizard對話框 。 7.8.3 為控件建立相關聯的成員變量l在mfc class wiizard對話框中默認的projects和 class nam

17、e項為eg7-1和ceg7-1dialog。l選中membervariables標簽中的control ids項中的idc_edit_name條目,單擊add variables按鈕,將彈出add variables對話框。l在add variables對話框中添加成員變量m_name,與編輯控件idc_edit_name相關聯,類型為cstring ,catogory為value。l單擊ok按鈕,添加變量完成。 為控件建立相關聯的成員變量(續)l add variables 對話框 :為控件建立相關聯的成員變量(續)按照上述方法為其它控件添加相關聯的變量,如表所示:7.8.4 成員變量的初始

18、化成員變量的初始化需要重載對話框類的oninitdialog()函數。oninitdialog是一個虛函數,它在對話框顯示之前被調用,用戶可以通過重載該函數對對話框中的各種控件進行初始化。 操作如下:打開mfc class wizzard,選中標簽member map標簽中的control ids項中的idc_combo1條目,在messages里面選擇wm_initdialog,單擊add fuction按鈕,然后單擊edit code按鈕,進入源程序,編輯oninitdialog()函數。 成員變量的初始化(續)增加以后的代碼如下:lbool cinvest:oninitdialog()

19、llcdialog:oninitdialog();l/ todo: add extra initialization herelm_province.addstring(湖南湖南);lm_province.addstring(河南河南);lreturn true; / return true unless you set the focus to a controll7.8.5 建立消息映射與響應函數需要在用戶選擇了省份以后更新有關城市的信息,這就需要在組合框中增加消息響應函數,功能是當用戶打開第二個組合框的下拉式列表框的時候及時更新相關省份的城市信息。操作步驟:打開mfc class wiz

20、ard,選中標簽member map標簽中的control ids項中的idc_combo2條目,在messages里面選擇cbn_dropdown,單擊“add fuction”按鈕,接受系統默認的函數名,然后單擊“edit code”按鈕,進入源程序,編輯函數如下:響應函數:lvoid ceg7_1dlg:ondropdowncombo2() ll/ todo: add your control notification handler code herelcstring m_1;lm_province.getwindowtext(m_1);lif(m_1=河南河南)llm_city.re

21、setcontent();lm_city.addstring(鄭州鄭州);lm_city.addstring(洛陽洛陽);llif(m_1=湖南湖南)llm_city.resetcontent();lm_city.addstring(長沙長沙);lm_city.addstring(岳陽岳陽);ll7.8.6 函數建立與調用在workspace工作區打開classview,選中要加入函數的類ceg7_1dlg,點擊鼠標右鍵,在彈出的對話框中選擇“add member funtion” 。在funtion type(函數類型)中填入cstring,表示函數類型是字符串對象;在funtion dec

22、lareation(函數聲明)中填入getradio。該函數用來獲得單選按鈕的信息。 函數建立與調用(續)然后在ceg7_1dlg.cpp文件中找到該函數,添加函數代碼如下:lcstring ceg7_1dlg:getradio()ll cstring radiotext;l uint m_6=getcheckedradiobutton(idc_radio1,idc_radio2);lif(m_6=idc_radio1)ll radiotext=男男;llelsell radiotext=女女;llreturn(radiotext);l函數建立與調用(續)說明:cwnd的成員函數:getche

23、ckedradiobutton()返回指定組中的第一個所選中的單選鈕的id,如果沒有按鈕選中則返回0。該成員函數的原型:lint getcheckedradiobutton(int nidfirstbutton,int nidlastbutton);其中,第一個參數是nidfirstbutton同一組中的第一個單選按鈕的id, nidlastbutton是同一組中最后一個單選按鈕的id。建立第二個成員函數:建立第二個成員函數:l同樣為ceg7_1dlg類加入另一個成員函數getcheck()以獲得復選框的信息。在funtion type(函數類型)中填入cstring,表示函數類型是字符串對象

24、;在funtion declareation(函數聲明)中填入getcheck。l在ceg7_1dlg.cpp文件中找到該函數,添加函數代碼如下: 函數代碼:函數代碼:lcstring ceg7_1dlg:getcheck()ll intm=0;l cstring str,checktext;l for(int i=idc_check1;igetcheck();l if (m=1)l l cwnd:getdlgitemtext(i,str);l str+=;l checktext+=str;l llreturn(checktext);l函數代碼分析:函數代碼分析:說明:lcbutton類的成員

25、函數getdlgitem()得到指向各個復選框控件的指針;lcbutton類的成員函數getcheck()用來返回復選框是否被選中,選中則返回1;lcwnd:getdlgitemtext()用來獲得所選中的復選框的標題 重載onok()函數:l該例將在onok()函數中調用這兩個成員函數。打開對話框資源,雙擊“確定”按鈕,接受系統默認的函數名,重載onok()函數:lvoid cmy21dlg:onok() ll/ todo: add extra validation herelcstring m_1,m_2,m_3,str;lm_3=getradio(); /調用成員函數以得到單選按鈕的信息

26、調用成員函數以得到單選按鈕的信息lstr=getcheck(); /調用成員函數以得到復選框中的信息調用成員函數以得到復選框中的信息l7.8.7 重載其他函數重載以后的onok()函數源代碼如下:lvoid cmy21dlg:onok() ll/ todo: add extra validation herel updatedata(true); / 將對話框控件中的內容傳給其將對話框控件中的內容傳給其成員變量成員變量lcstring m_1,m_2,m_3,str;lm_3=getradio();lstr=getcheck();lm_province.getwindowtext(m_1);lm_city.getwindowtext(m_2);lsetdlgitemtext(idc_static_name, );重載以后的重載以后的onok()函數源代碼(續)()函數源代碼(續)l setdlgitemtext(idc_static_email, );lsetdlgitemtext(idc_static_edit, );lsetdlgitemtext(idc_stati

溫馨提示

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

評論

0/150

提交評論