




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章可視化編程教學(xué)提示:隨著計(jì)算機(jī)軟件工程技術(shù)的迅速發(fā)展,可視化編程技術(shù)已經(jīng)成為當(dāng)今軟件開發(fā)的重要工具和手段,尤其是VisualC++、Delphi、VisualBasic等開發(fā)工具的出現(xiàn),大大推動(dòng)了可視化編程技術(shù)的發(fā)展和應(yīng)用。作為理工科專業(yè)的大學(xué)生在學(xué)習(xí)了程序設(shè)計(jì)課程后,還應(yīng)掌握一些開發(fā)工具,同時(shí)也能提高開發(fā)應(yīng)用系統(tǒng)的基本能力。教學(xué)目標(biāo):通過(guò)可視化編程的學(xué)習(xí),掌握VisualC++等開發(fā)工具的基本原理、開發(fā)環(huán)境、文檔視圖結(jié)構(gòu)、單文檔與多文檔程序、對(duì)話框和控件,提高實(shí)踐操作和獨(dú)立編程的能力。7/21/20231C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1文檔與視圖的概念8.1.1文檔視圖結(jié)構(gòu)8.1.2單文檔(SDI)應(yīng)用程序8.1.3多文檔(MDI)應(yīng)用程序7/21/20232C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.1文檔視圖結(jié)構(gòu)在文檔視圖結(jié)構(gòu)里,文檔是一個(gè)應(yīng)用程序數(shù)據(jù)基本元素的集合,它構(gòu)成應(yīng)用程序所使用的數(shù)據(jù)單元;另外它還提供了管理和維護(hù)數(shù)據(jù)的手段。文檔是一種數(shù)據(jù)源,數(shù)據(jù)源有很多種,最常見的是磁盤文件。視圖是數(shù)據(jù)的用戶窗口,為用戶提供文檔的可視的數(shù)據(jù)顯示,它把文檔的部分或全部?jī)?nèi)容在窗口中顯示出來(lái)。視圖還給用戶提供了一個(gè)與文檔中的數(shù)據(jù)交互的界面,它把用戶的輸入轉(zhuǎn)化為對(duì)文檔中數(shù)據(jù)的操作。7/21/20233C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.1文檔視圖結(jié)構(gòu)文檔視圖結(jié)構(gòu)帶來(lái)的好處主要有:將數(shù)據(jù)操作和數(shù)據(jù)顯示、用戶界面分離開提供標(biāo)準(zhǔn)的操作界面支持打印預(yù)覽和電子郵件發(fā)送功能7/21/20234C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.2單文檔(SDI)應(yīng)用程序在單文檔界面程序中,用戶在同一時(shí)刻只能操作一個(gè)文檔。如Windows中的記事本。單文檔應(yīng)用程序一般都提供一個(gè)File菜單,在該菜單下有一組命令:新建文檔(New)打開已有文檔(Open)保存(Save)換名存盤(Saveas)等。7/21/20235C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.2單文檔(SDI)應(yīng)用程序使用VisualC++集成開發(fā)環(huán)境的AppWizard就可以創(chuàng)建單文檔的應(yīng)用程序框架:在New對(duì)話框的ProjectName編輯框中輸入項(xiàng)目名為Editor在AppWizard的第一步中選擇Singledocument(單文檔)AppWizard第二和第三步選項(xiàng)使用默認(rèn)值A(chǔ)ppWizard后面的幾頁(yè)對(duì)話框都使用默認(rèn)值。最后可得到的結(jié)果:7/21/20236C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.3多文檔(MDI)應(yīng)用程序多文檔界面(MultipleDocumentInterface,MDI)是在一個(gè)應(yīng)用程序中能夠同時(shí)處理兩個(gè)或者更多個(gè)窗體的界面形式。一個(gè)多文檔界面應(yīng)用程序也能操作文檔,但它允許同時(shí)操作多個(gè)文檔。MicrosoftExcel就是這樣的例子??梢源蜷_多個(gè)文件,可以通過(guò)切換活動(dòng)窗口激活相應(yīng)的文檔進(jìn)行編輯。多文檔應(yīng)用程序也提供一個(gè)File菜單,用于新建、打開、保存文檔。與單文檔應(yīng)用程序不同的是,它往往還提供一個(gè)Close(關(guān)閉)菜單項(xiàng),用于關(guān)閉當(dāng)前打開的文檔。多文檔應(yīng)用程序還提供一個(gè)窗口菜單,管理所有打開的子窗口,包括對(duì)子窗口的新建、關(guān)閉、層疊、平鋪等。關(guān)閉一個(gè)窗口時(shí),窗口內(nèi)的文檔也被自動(dòng)關(guān)閉。7/21/20237C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.1.3多文檔(MDI)應(yīng)用程序VisualC++提供了一整套設(shè)計(jì)MDI應(yīng)用程序的組件,可以很容易、很快速地開發(fā)一個(gè)MDI的應(yīng)用程序。在File菜單中選擇New菜單項(xiàng),在彈出New對(duì)話框的Projects選項(xiàng)卡選中列表中的選項(xiàng)MFCAppWizard(exe),并在Projectname(工程名)的編輯框內(nèi)輸入工程名稱:MdiForm,單擊OK按鈕后,進(jìn)行AppWizard選項(xiàng)的各個(gè)步驟。第一步,接收系統(tǒng)的默認(rèn)值,即選中Multipledocuments單選按鈕。第二步,接收系統(tǒng)默認(rèn)設(shè)置。第三步,去掉復(fù)選框ActiveXControls,其他設(shè)置接收系統(tǒng)默認(rèn)設(shè)置。第四步,去掉復(fù)選框Printingandprintpreview,其他接收系統(tǒng)默認(rèn)設(shè)置。第五步,接收系統(tǒng)默認(rèn)設(shè)置。第六步,接收系統(tǒng)默認(rèn)設(shè)置。單擊OK按鈕后,結(jié)束AppWizard的設(shè)置。7/21/20238C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2對(duì)話框和控件8.2.1對(duì)話框8.2.2常用控件8.2.3控件使用舉例7/21/20239C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.1對(duì)話框?qū)υ捒虻幕靖拍顚?duì)話框(Dialog)實(shí)際上是一個(gè)窗口。在MFC中,對(duì)話框的功能被封裝在了CDialog類中,CDialog類是CWnd類的派生類。對(duì)話框分為:模態(tài)對(duì)話框:只能與當(dāng)前對(duì)話框進(jìn)行交互非模態(tài)對(duì)話框:可以與其他對(duì)話框交互從MFC編程的角度來(lái)看,一個(gè)對(duì)話框由兩部分組成:對(duì)話框模板資源:用于指定對(duì)話框的控件及其分布。Windows根據(jù)對(duì)話框模板來(lái)創(chuàng)建并顯示對(duì)話框。對(duì)話框類:用來(lái)實(shí)現(xiàn)對(duì)話框的功能。由于對(duì)話框行使的功能各不相同,因此一般需要從CDialog類派生一個(gè)新類,以完成特定的功能。7/21/202310C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.1對(duì)話框創(chuàng)建對(duì)話框應(yīng)用程序啟動(dòng)VisualC++,在VisualC++中,New命令,彈出New對(duì)話框來(lái)新建一個(gè)工程項(xiàng)目。在Projectname編輯框中輸入要?jiǎng)?chuàng)建的項(xiàng)目名稱:Mydialog。單擊OK按鈕后,進(jìn)行AppWizard的各個(gè)步驟。進(jìn)入MFCAppWizard-Step1對(duì)話框,選中Dialogbased單選按鈕,在語(yǔ)言支持資源中選擇Chinese(PRC)(APPWZCHS.DLL)彈出MFCAppWizard-Step2of4對(duì)話框,默認(rèn)的設(shè)置。彈出MFCAppWizard-Step3of4對(duì)話框,選用默認(rèn)設(shè)置。彈出MFCAppWizard-Step3of4對(duì)話框,不需要做任何修改,單擊Finish按鈕,完成項(xiàng)目創(chuàng)建向?qū)У挠嘘P(guān)設(shè)置。在指定的目錄下生成應(yīng)用程序的框架所必須的全部文件。編輯和運(yùn)行對(duì)話框應(yīng)用程序在對(duì)話框中,可以進(jìn)行可視化的設(shè)計(jì)、布局安排各種控件、定義編輯對(duì)話框各種資源。7/21/202311C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.2常用控件對(duì)話框?qū)嶋H上只提供了一個(gè)窗口,用戶與對(duì)話框的交互還要利用對(duì)話框中的控件進(jìn)行??丶δ軐?duì)應(yīng)控件類StaticText(靜態(tài)正文)顯示正文,一般不能接受輸入信息CStaticPicture(圖片)顯式位圖、圖標(biāo)、方框和圖元文件,一般不能接受輸入信息CStaticEditBox(編輯框)輸入并編輯正文,支持單行和多行編輯CEditPushbutton(命令按鈕)響應(yīng)用戶的輸入,觸發(fā)相應(yīng)的事件CButtonCheckBox(檢查框)用作選擇標(biāo)記,可以有選中和不選中兩種狀態(tài)CButtonRadioButton
(單選按鈕)用來(lái)從兩個(gè)或多個(gè)選項(xiàng)中選中一項(xiàng)CButtonGroupBox(組框)顯示正文和方框,主要用來(lái)將相關(guān)的一些控件聚成一組CButtonListBox(列表框)顯示一個(gè)列表,用戶可以從該列表中選擇一項(xiàng)或多項(xiàng)CListBoxComboBox(組合框)是一個(gè)編輯框和一個(gè)列表框的組合,分為簡(jiǎn)易式、下拉式和下拉列表式CComboBoxScrollBar(滾動(dòng)條)主要用來(lái)從一個(gè)預(yù)定義范圍值中迅速而有效地選取一個(gè)整數(shù)值CScrollBar7/21/202312C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.2常用控件控件在Control工具欄上都有對(duì)應(yīng)的工具按鈕??梢岳眠@些工具按鈕在對(duì)話框中進(jìn)行可視化設(shè)置控件。7/21/202313C++程序設(shè)計(jì)教程與實(shí)訓(xùn)對(duì)話框工具條7/21/202314C++程序設(shè)計(jì)教程與實(shí)訓(xùn)對(duì)控件的操作和使用一般按以下步驟進(jìn)行在對(duì)話框資源中添加控件。通過(guò)屬性對(duì)話框可以對(duì)控件的風(fēng)格進(jìn)行設(shè)置。通過(guò)定義與控件相關(guān)的控件類的對(duì)象或相應(yīng)的數(shù)值變量。通過(guò)定義控件的消息響應(yīng)函數(shù),生成對(duì)話框類的成員函數(shù)。在消息響應(yīng)函數(shù)中添加適當(dāng)?shù)拇a。7/21/202315C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.2常用控件1靜態(tài)控件(CStatic)用來(lái)顯示一個(gè)字符串、框、矩形、圖標(biāo)及位圖等,可用于顯示提示信息和其他控件標(biāo)題。靜態(tài)控件有靜態(tài)文本、組框和圖片等,一般不接收用戶輸入,也不產(chǎn)生消息。在控件工具窗口中選擇Aa,在編輯對(duì)話框窗口中單擊,創(chuàng)建一個(gè)靜態(tài)文本,在此靜態(tài)文本上單擊鼠標(biāo)右鍵,選擇Properties(屬性)選項(xiàng),如圖8.20所示。彈出屬性對(duì)話框,對(duì)此文本進(jìn)行設(shè)置。修改Caption編輯框內(nèi)的內(nèi)容:姓名。7/21/202316C++程序設(shè)計(jì)教程與實(shí)訓(xùn)2按鈕類控件按鈕類控件是窗口類名被系統(tǒng)預(yù)定義為BUTTON的一類控件,該類控件用于響應(yīng)用戶的鼠標(biāo)按鍵操作,常見的按鈕有三種:按鍵按鈕PushButton
:可以產(chǎn)生某個(gè)動(dòng)作,執(zhí)行某個(gè)命令,如確認(rèn)或取消等命令。單選按鈕RadioBox:用來(lái)從多項(xiàng)中選擇一項(xiàng),一般都是成組使用。復(fù)選按鈕CheckBox
:用作選擇標(biāo)記,有選中、非選中和不確定等狀態(tài)。7/21/202317C++程序設(shè)計(jì)教程與實(shí)訓(xùn)3編輯框控件文本編輯框控件是一個(gè)讓用戶從鍵盤輸入和編輯文本的矩形窗口,用戶可以通過(guò)它進(jìn)行單行或多行的文本輸入,也可以進(jìn)行數(shù)值、時(shí)間和日期數(shù)據(jù)的輸入。當(dāng)編輯框被激活時(shí),具有輸入焦點(diǎn),出現(xiàn)一個(gè)閃動(dòng)的插入符。用對(duì)話框編輯器可以方便地設(shè)置編輯控件的屬性和風(fēng)格。7/21/202318C++程序設(shè)計(jì)教程與實(shí)訓(xùn)舉一個(gè)簡(jiǎn)單的例子說(shuō)明編輯框的使用方法。用MFCAppWizard(exe)創(chuàng)建一個(gè)項(xiàng)目名為MyDialog的基于對(duì)話框的應(yīng)用程序。P221Updatedata(TRUE)==將控件的值賦值給成員變量;(默認(rèn))Updatedata(FALSE)==將成員變量的值賦值給控件7/21/202319C++程序設(shè)計(jì)教程與實(shí)訓(xùn)voidCDdDlg::OnExit(){OnOK(); }voidCDdDlg::OnCalculate(){ UpdateData(); floatarea=(float)2*3.14*m_Radius*m_Radius; m_Area.Format("%8.2f",area); UpdateData(FALSE);
}7/21/202320C++程序設(shè)計(jì)教程與實(shí)訓(xùn)關(guān)于編輯框的賦值和取值
向編輯框中賦值和取值時(shí):1、建一個(gè)控制型的變量,如m_edit1,用CWnd的SetWindowText()和GetWindowText()來(lái)賦值和取值。m_edit1.SetWindowText("Hello");
或者GetDlgItem(IDC_EDIT1)->SetWindowText(str);2、建立一個(gè)控制型的變量,如m_edit1,用SetDlgItemText()和GetDlgItemText()來(lái)賦值和取值CStringStr="Hello":m_edit1.SetDlgItemText(IDC_EDIT1,str);2、直接建一個(gè)
數(shù)值形的變量
如m_strEdit;
用
UpdateData()來(lái)控制得到變量,還是更新變量。//取值
UpdateData(TRUE);
CString
buf
=
m_Edit1;
//賦值
m_Edit1="ok!";
UpdateData(FALSE);7/21/202321C++程序設(shè)計(jì)教程與實(shí)訓(xùn)4列表框列表框是一個(gè)可以列有多個(gè)項(xiàng)目讓用戶選擇的列表控件,可往列表框中添加或刪除某些項(xiàng),并可自動(dòng)提供滾動(dòng)條讓用戶瀏覽列表框中數(shù)目較多的項(xiàng)目。ListBox窗口用來(lái)列出一系列可供用戶從中選擇的項(xiàng),這些項(xiàng)一般以字符串的形式給出。MFC類ClistBox封裝了標(biāo)準(zhǔn)列表框控件,其成員函數(shù)提供了對(duì)標(biāo)準(zhǔn)列表框的絕大多數(shù)操作,下表列出了一些重要的成員函數(shù)。7/21/202322C++程序設(shè)計(jì)教程與實(shí)訓(xùn)7/21/202323C++程序設(shè)計(jì)教程與實(shí)訓(xùn)5組合框組合框(ComboBox)的功能是將列表框與編輯框控件結(jié)合在一起,完成一些較為復(fù)雜的輸入功能。組合框有:簡(jiǎn)單組合框下拉組合框下拉式列表框7/21/202324C++程序設(shè)計(jì)教程與實(shí)訓(xùn)7/21/202325C++程序設(shè)計(jì)教程與實(shí)訓(xùn)6滾動(dòng)條控件
滾動(dòng)條分為水平滾動(dòng)條和垂直滾動(dòng)條兩種,通常使用滾動(dòng)條來(lái)進(jìn)行定位之類的操作。7/21/202326C++程序設(shè)計(jì)教程與實(shí)訓(xùn)1滾動(dòng)條控件樣式
Top/Left表示將滾動(dòng)條的左上邊與由函數(shù)CreateWindowEx的參數(shù)定義的矩形的左上邊對(duì)齊;Button/Right則表示與右下邊對(duì)齊;該屬性的默認(rèn)值為None,即不進(jìn)行任何對(duì)齊操作7/21/202327C++程序設(shè)計(jì)教程與實(shí)訓(xùn)2CScrollBar類
7/21/202328C++程序設(shè)計(jì)教程與實(shí)訓(xùn).3滾動(dòng)條控件消息
當(dāng)對(duì)滾動(dòng)條操作后,所在的對(duì)話框會(huì)接受到WM_HSCOLL消息和WM_VSCOLL消息。在這兩個(gè)消息的響應(yīng)函數(shù)中可以判斷是哪一個(gè)滾動(dòng)條發(fā)生了變化,然后進(jìn)行相應(yīng)的操作。 CWnd類中定義了處理該消息的成員函數(shù)OnHScoll和OnVScoll。7/21/202329C++程序設(shè)計(jì)教程與實(shí)訓(xùn)OnHScoll成員函數(shù)的原型: afx_msgvoidOnHScoll( UINTnSBCode,UINTnPos, CScrollBar*pScrollBar );7/21/202330C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.3控件使用舉例P225設(shè)計(jì)這個(gè)應(yīng)用程序包括兩個(gè)對(duì)話框:一個(gè)主對(duì)話框(學(xué)生信息管理),用來(lái)打開另一個(gè)對(duì)話框及查詢學(xué)生信息;另一個(gè)對(duì)話框(輸入學(xué)生信息),用來(lái)輸入學(xué)生的信息,它是通過(guò)主對(duì)話框的按鈕來(lái)打開運(yùn)行的。7/21/202331C++程序設(shè)計(jì)教程與實(shí)訓(xùn)常用控件應(yīng)用實(shí)例
本節(jié)例子主要用來(lái)說(shuō)明對(duì)話框和控件的使用。例子的實(shí)現(xiàn)功能是在程序主界面出現(xiàn)一個(gè)用戶調(diào)查表圖所示:7/21/202332C++程序設(shè)計(jì)教程與實(shí)訓(xùn)操作步驟(創(chuàng)建工程):步驟1.在VC++集成開發(fā)環(huán)境中,通過(guò)菜單File|New,彈出New對(duì)話框;步驟2.在Projects標(biāo)簽中選擇MFCAppWizar(exe),在Projectname中輸入“Eg7_1”,Location讀者可以自己選擇;步驟3.按下OK按鈕,在彈出的MFCAppWizardStep-1對(duì)話框中選擇程序框架為單文檔框架,即選中SingleDocument;步驟4.按下OK按鈕,在彈出的NewProjectInformation對(duì)話框中按下OK按鈕后等待創(chuàng)建完相應(yīng)的工程。7/21/202333C++程序設(shè)計(jì)教程與實(shí)訓(xùn)1創(chuàng)建對(duì)話框資源
在工作區(qū)中選中ResourseView標(biāo)簽展開Eg7_1Resourse|Dialog條目,可以察看當(dāng)前工程中的對(duì)話框資源;選擇Dialog條目,單擊鼠標(biāo)右鍵,彈出活動(dòng)菜單,選擇菜單InsertDialog命令;將鼠標(biāo)移動(dòng)到對(duì)話框資源上,單擊鼠標(biāo)右鍵,在彈出的菜單中選擇Properties菜單命令,將對(duì)話框的標(biāo)題設(shè)置為“用戶調(diào)查表”標(biāo)識(shí)號(hào)不變。7/21/202334C++程序設(shè)計(jì)教程與實(shí)訓(xùn)創(chuàng)建對(duì)話框資源(續(xù))刪除對(duì)話框資源本來(lái)就有的靜態(tài)控件,利用鼠標(biāo)將按鈕OK和CANCEL移動(dòng)到對(duì)話框的底部,將按鈕的標(biāo)題分別改為確定,取消。在工具欄中的靜態(tài)控件上單擊一下鼠標(biāo)左鍵,然后在對(duì)話框資源中按下鼠標(biāo)左鍵拖動(dòng),出現(xiàn)一個(gè)矩形框,松開鼠標(biāo)左鍵,則在對(duì)話框資源中出現(xiàn)一個(gè)靜態(tài)控件,將該靜態(tài)控件的標(biāo)題改為“姓名”其標(biāo)識(shí)號(hào)改為IDC_STATIC_NAME。7/21/202335C++程序設(shè)計(jì)教程與實(shí)訓(xùn)創(chuàng)建對(duì)話框資源(續(xù))按照上面的方法在對(duì)話框資源上加入其它的控件,它們的類型、標(biāo)題和標(biāo)識(shí)號(hào)如下:7/21/202336C++程序設(shè)計(jì)教程與實(shí)訓(xùn)創(chuàng)建對(duì)話框資源(續(xù))7/21/202337C++程序設(shè)計(jì)教程與實(shí)訓(xùn)2生成對(duì)話框類
資源創(chuàng)建完畢以后,還需要?jiǎng)?chuàng)建一個(gè)與對(duì)話框資源相關(guān)聯(lián)的類,這個(gè)類需要從對(duì)話框類派生,然后定義一個(gè)派生類的對(duì)象,通過(guò)派生類的對(duì)象使對(duì)話框的功能得以實(shí)現(xiàn)。7/21/202338C++程序設(shè)計(jì)教程與實(shí)訓(xùn)生成對(duì)話框類的操作步驟:在對(duì)話框資源上單擊右鍵,在彈出的菜單中選擇ClassWiizard,在MFCClassWIizard對(duì)話框彈出以后緊接著彈出AddingClass。在打開對(duì)話框的過(guò)程中,如果系統(tǒng)監(jiān)測(cè)到有新建的對(duì)話框資源,菜單資源等,并且該資源沒(méi)有與之相關(guān)聯(lián)的類,就會(huì)彈出對(duì)話框,詢問(wèn)是否創(chuàng)建新的類。7/21/202339C++程序設(shè)計(jì)教程與實(shí)訓(xùn)生成對(duì)話框類的操作步驟(續(xù)):在AddingClass對(duì)話框中確認(rèn)默認(rèn)選擇Createanewclass,單擊按鈕彈出NewClass對(duì)話框,在編輯框中輸入新建類的名稱CEg7-1Dialog,其他設(shè)置取默認(rèn)值。單擊OK按鈕后顯示出MFCClassWIizard對(duì)話框。7/21/202340C++程序設(shè)計(jì)教程與實(shí)訓(xùn)3為控件建立相關(guān)聯(lián)的成員變量
在MFCClassWiizard對(duì)話框中默認(rèn)的Projects和Classname項(xiàng)為Eg7-1和CEg7-1Dialog。選中MemberVariables標(biāo)簽中的ControlIds項(xiàng)中的IDC_EDIT_NAME條目,單擊AddVariables按鈕,將彈出AddVariables對(duì)話框。在AddVariables對(duì)話框中添加成員變量m_Name,與編輯控件IDC_EDIT_NAME相關(guān)聯(lián),類型為CString,catogory為Value。單擊OK按鈕,添加變量完成。7/21/202341C++程序設(shè)計(jì)教程與實(shí)訓(xùn)為控件建立相關(guān)聯(lián)的成員變量(續(xù))
AddVariables對(duì)話框:7/21/202342C++程序設(shè)計(jì)教程與實(shí)訓(xùn)為控件建立相關(guān)聯(lián)的成員變量(續(xù)) 按照上述方法為其它控件添加相關(guān)聯(lián)的變量,如表所示:7/21/202343C++程序設(shè)計(jì)教程與實(shí)訓(xùn)4成員變量的初始化
成員變量的初始化需要重載對(duì)話框類的OnInitDialog()函數(shù)。OnInitDialog是一個(gè)虛函數(shù),它在對(duì)話框顯示之前被調(diào)用,用戶可以通過(guò)重載該函數(shù)對(duì)對(duì)話框中的各種控件進(jìn)行初始化。 操作如下: 打開MFCClassWizzard,選中標(biāo)簽MemberMap標(biāo)簽中的ControlIDs項(xiàng)中的IDC_COMBO1條目,在Messages里面選擇WM_INITDIALOG,單擊AddFuction按鈕,然后單擊EditCode按鈕,進(jìn)入源程序,編輯OnInitDialog()函數(shù)。7/21/202344C++程序設(shè)計(jì)教程與實(shí)訓(xùn)成員變量的初始化(續(xù))
增加以后的代碼如下:BOOLCInvest::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere
m_Province.AddString("湖南"); m_Province.AddString("河南"); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}7/21/202345C++程序設(shè)計(jì)教程與實(shí)訓(xùn)5建立消息映射與響應(yīng)函數(shù)
需要在用戶選擇了省份以后更新有關(guān)城市的信息,這就需要在組合框中增加消息響應(yīng)函數(shù),功能是當(dāng)用戶打開第二個(gè)組合框的下拉式列表框的時(shí)候及時(shí)更新相關(guān)省份的城市信息。 操作步驟: 打開MFCClassWizard,選中標(biāo)簽MemberMap標(biāo)簽中的ControlIDs項(xiàng)中的IDC_COMBO2條目,在Messages里面選擇CBN_DROPDOWN,單擊“AddFuction”按鈕,接受系統(tǒng)默認(rèn)的函數(shù)名,然后單擊“EditCode”按鈕,進(jìn)入源程序,編輯函數(shù)如下:7/21/202346C++程序設(shè)計(jì)教程與實(shí)訓(xùn)響應(yīng)函數(shù):voidCEg7_1Dlg::OnDropdownCombo2(){ //TODO:Addyourcontrolnotificationhandlercodehere
CStringm_1; m_Province.GetWindowText(m_1); if(m_1=="河南") { m_City.ResetContent(); m_City.AddString("鄭州"); m_City.AddString("洛陽(yáng)"); } if(m_1=="湖南") { m_City.ResetContent(); m_City.AddString("長(zhǎng)沙"); m_City.AddString("岳陽(yáng)"); } }7/21/202347C++程序設(shè)計(jì)教程與實(shí)訓(xùn)6函數(shù)建立與調(diào)用
在Workspace工作區(qū)打開CLassView,選中要加入函數(shù)的類CEg7_1Dlg,點(diǎn)擊鼠標(biāo)右鍵,在彈出的對(duì)話框中選擇“AddMemberFuntion”。 在FuntionType(函數(shù)類型)中填入CString,表示函數(shù)類型是字符串對(duì)象;在FuntionDeclareation(函數(shù)聲明)中填入GetRadio。該函數(shù)用來(lái)獲得單選按鈕的信息。7/21/202348C++程序設(shè)計(jì)教程與實(shí)訓(xùn)函數(shù)建立與調(diào)用(續(xù))然后在CEg7_1Dlg.cpp文件中找到該函數(shù),添加函數(shù)代碼如下:CStringCEg7_1Dlg::GetRadio(){CStringRadiotext;UINTm_6=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2); if(m_6==IDC_RADIO1) {Radiotext="男"; } else { Radiotext="女"; } return(Radiotext);}7/21/202349C++程序設(shè)計(jì)教程與實(shí)訓(xùn)函數(shù)建立與調(diào)用(續(xù))說(shuō)明:CWnd的成員函數(shù):GetCheckedRadioButton()返回指定組中的第一個(gè)所選中的單選鈕的ID,如果沒(méi)有按鈕選中則返回0。 該成員函數(shù)的原型:intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);其中,第一個(gè)參數(shù)是nIDFirstButton同一組中的第一個(gè)單選按鈕的ID,nIDLastButton是同一組中最后一個(gè)單選按鈕的ID。7/21/202350C++程序設(shè)計(jì)教程與實(shí)訓(xùn)建立第二個(gè)成員函數(shù):同樣為CEg7_1Dlg類加入另一個(gè)成員函數(shù)GetCheck()以獲得復(fù)選框的信息。在FuntionType(函數(shù)類型)中填入CString,表示函數(shù)類型是字符串對(duì)象;在FuntionDeclareation(函數(shù)聲明)中填入GetCheck。在CEg7_1Dlg.cpp文件中找到該函數(shù),添加函數(shù)代碼如下:7/21/202351C++程序設(shè)計(jì)教程與實(shí)訓(xùn)函數(shù)代碼:CStringCEg7_1Dlg::GetCheck(){int m=0; CStringstr,Checktext;for(inti=IDC_CHECK1;i<IDC_CHECK6+1;i++){m=((CButton*)GetDlgItem(i))->GetCheck(); if(m==1) { CWnd::GetDlgItemText(i,str); str+=";"; Checktext+=str; } } return(Checktext);}7/21/202352C++程序設(shè)計(jì)教程與實(shí)訓(xùn)函數(shù)代碼分析:說(shuō)明:CButton類的成員函數(shù)GetDlgItem()得到指向各個(gè)復(fù)選框控件的指針;CButton類的成員函數(shù)GetCheck()用來(lái)返回復(fù)選框是否被選中,選中則返回1;CWnd::GetDlgItemText()用來(lái)獲得所選中的復(fù)選框的標(biāo)題7/21/202353C++程序設(shè)計(jì)教程與實(shí)訓(xùn)重載OnOK()函數(shù):該例將在OnOK()函數(shù)中調(diào)用這兩個(gè)成員函數(shù)。打開對(duì)話框資源,雙擊“確定”按鈕,接受系統(tǒng)默認(rèn)的函數(shù)名,重載OnOK()函數(shù):voidCMy21Dlg::OnOK(){ //TODO:AddextravalidationhereCStringm_1,m_2,m_3,str;m_3=GetRadio();//調(diào)用成員函數(shù)以得到單選按鈕的信息str=GetCheck();//調(diào)用成員函數(shù)以得到復(fù)選框中的信息}7/21/202354C++程序設(shè)計(jì)教程與實(shí)訓(xùn).7重載其他函數(shù)
重載以后的OnOK()函數(shù)源代碼如下:voidCMy21Dlg::OnOK(){ //TODO:AddextravalidationhereUpdateData(TRUE);//將對(duì)話框控件中的內(nèi)容傳給其成員變量 CStringm_1,m_2,m_3,str; m_3=GetRadio(); str=GetCheck(); m_Province.GetWindowText(m_1); m_City.GetWindowText(m_2); SetDlgItemText(IDC_STATIC_NAME,"");7/21/202355C++程序設(shè)計(jì)教程與實(shí)訓(xùn)重載以后的OnOK()函數(shù)源代碼(續(xù))
SetDlgItemText(IDC_STATIC_EMAIL,""); SetDlgItemText(IDC_STATIC_EDIT,""); SetDlgItemText(IDC_STATIC_SEX,""); SetDlgItemText(IDC_STATIC_HOBBY,""); SetDlgItemText(IDC_STATIC_PROVINCE,""); SetDlgItemText(IDC_STATIC_CITY,""); m_Display.SetWindowText(m_Name+","+m_3+","+m_1+m_2+"人也。\n您的興趣有:" +str+"\n"+"您的地址:"+m_Email+"\n"+"您要說(shuō)的話:"+m_Edit); m_Display.ShowWindow(TRUE); m_City.ShowWindow(FALSE);m_Province.ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_NAME))->ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_EDIT))->ShowWindow(FALSE); GetDlgItem(IDC_STATIC1)->ShowWindow(FALSE);7/21/202356C++程序設(shè)計(jì)教程與實(shí)訓(xùn)重載以后的OnOK()函數(shù)源代碼(續(xù))GetDlgItem(IDC_STATIC2)->ShowWindow(FALSE); ((CButton*)GetDlgItem(IDC_RADIO1))->ShowWindow(FALSE);
((CButton*)GetDlgItem(IDC_RADIO2))->ShowWindow(FALSE); for(intj=IDC_CHECK1;j<IDC_CHECK6+1;j++){ ((CButton*)GetDlgItem(j))->ShowWindow(FALSE); } ((CButton*)GetDlgItem(IDOK))->ShowWindow(FALSE); SetDlgItemText(IDCANCEL,"退出");}7/21/202357C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8運(yùn)行程序
7/21/202358C++程序設(shè)計(jì)教程與實(shí)訓(xùn)調(diào)查結(jié)果:7/21/202359C++程序設(shè)計(jì)教程與實(shí)訓(xùn)8.2.3控件使用舉例設(shè)計(jì)這個(gè)應(yīng)用程序包括兩個(gè)對(duì)話框:一個(gè)主對(duì)話框(學(xué)生信息管理),用來(lái)打開另一個(gè)對(duì)話框及查詢學(xué)生信息;另一個(gè)對(duì)話框(輸入學(xué)生信息),用來(lái)輸入學(xué)生的信息,它是通過(guò)主對(duì)話框的按鈕來(lái)打開運(yùn)行的。7/21/202
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北經(jīng)濟(jì)學(xué)院法商學(xué)院《食品發(fā)展現(xiàn)狀及動(dòng)態(tài)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨沂科技職業(yè)學(xué)院《大學(xué)體育四健美操》2023-2024學(xué)年第二學(xué)期期末試卷
- 榆林職業(yè)技術(shù)學(xué)院《口腔解剖生理學(xué)綜合實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨時(shí)工勞務(wù)合同-文書模板
- 外交學(xué)院《高層建筑結(jié)構(gòu)4》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西科技職業(yè)學(xué)院《醫(yī)藥市場(chǎng)查與預(yù)測(cè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 武漢城市學(xué)院《衛(wèi)生信息管理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州華南商貿(mào)職業(yè)學(xué)院《畜牧試驗(yàn)設(shè)計(jì)與統(tǒng)計(jì)分析1》2023-2024學(xué)年第二學(xué)期期末試卷
- 南京交通職業(yè)技術(shù)學(xué)院《基礎(chǔ)醫(yī)學(xué)概述》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶財(cái)經(jīng)學(xué)院《環(huán)境設(shè)計(jì)史》2023-2024學(xué)年第二學(xué)期期末試卷
- (附件條款版)電話銷售員員工保密協(xié)議
- 2024年養(yǎng)老護(hù)理員(三級(jí))資格理論考試題庫(kù)(濃縮500題)
- 鐵路專用線設(shè)計(jì)規(guī)范(試行)(TB 10638-2019)
- 濰坊環(huán)境工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試參考試題庫(kù)(含答案)
- 2024年山東司法警官職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 物業(yè)客服課件培訓(xùn)模板
- 人教版PEP四年級(jí)英語(yǔ)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)表格教案
- 制造業(yè)面臨的挑戰(zhàn)與發(fā)展對(duì)策
- 高速公路綠化工程施工
- 發(fā)展?jié)h語(yǔ)-初級(jí)讀寫-第一課-你好
- 化工公司原址污染場(chǎng)地污染土壤治理修復(fù)方案
評(píng)論
0/150
提交評(píng)論