




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章對(duì)話(huà)框及常用控件7.1對(duì)話(huà)框的使用7.2常用控件思考題
7.1對(duì)話(huà)框的使用
對(duì)話(huà)框在Windows中應(yīng)用很普遍,它往往作為與用戶(hù)交互的場(chǎng)所,使用戶(hù)向應(yīng)用程序傳遞某些信息。對(duì)話(huà)框是一個(gè)特殊類(lèi)型的窗口,任何對(duì)窗口進(jìn)行的操作(如移動(dòng)、最大化、最小化等)也可在對(duì)話(huà)框?qū)嵤?。與VisualC++的其他窗口相比,對(duì)話(huà)框的最大優(yōu)點(diǎn)還在于它更易于放置控件,如利用編輯框、按鈕、列表框、組合框、滾動(dòng)條、旋轉(zhuǎn)按鈕控件以及滑動(dòng)條等來(lái)和用戶(hù)進(jìn)行交互。7.1.1模式和無(wú)模式對(duì)話(huà)框
對(duì)話(huà)框有兩種類(lèi)型,一種是模式對(duì)話(huà)框,另一種是無(wú)模式對(duì)話(huà)框。
1.模式對(duì)話(huà)框
在模式對(duì)話(huà)框情形,出現(xiàn)對(duì)話(huà)框時(shí),應(yīng)用程序的主窗口都會(huì)被凍結(jié),無(wú)法執(zhí)行任何動(dòng)作,如Word的字體對(duì)話(huà)框。當(dāng)彈出此對(duì)話(huà)框時(shí),Word的主窗口將無(wú)法執(zhí)行任何編輯動(dòng)作。
一般情況下,模式對(duì)話(huà)框會(huì)有[OK](確定)和[Cancel](取消)按鈕,單擊[OK](確定)按鈕,系統(tǒng)認(rèn)定用戶(hù)在對(duì)話(huà)框中的選擇或輸入有效,對(duì)話(huà)框退出;單擊[Cancel](取消)按鈕,對(duì)話(huà)框中的選擇或輸入無(wú)效,對(duì)話(huà)框退出,程序回復(fù)原有狀態(tài)。
模式對(duì)話(huà)框的應(yīng)用范圍較廣,平常所見(jiàn)到的對(duì)話(huà)框大部分為模式對(duì)話(huà)框。
2.無(wú)模式對(duì)話(huà)框
在無(wú)模式對(duì)話(huà)框情形,應(yīng)用程序的主窗口仍然可以操作,如Word中的查找對(duì)話(huà)框出現(xiàn)時(shí),主窗口還是可以進(jìn)行編輯操作。當(dāng)需要使用對(duì)話(huà)框時(shí),只需像激活一般窗口一樣單擊對(duì)話(huà)框所在的區(qū)域即可。
MFC提供了CDialog對(duì)話(huà)框類(lèi),它同時(shí)支持這兩種對(duì)話(huà)框。
CDialog類(lèi)是所有對(duì)話(huà)框類(lèi)的基類(lèi)。它定義了一個(gè)構(gòu)造函數(shù)和一個(gè)Create()成員函數(shù)來(lái)創(chuàng)建對(duì)話(huà)框。構(gòu)造函數(shù)根據(jù)對(duì)話(huà)框模板ID(通常有一個(gè)IDD前綴,如IDD_DIALOG1)來(lái)訪問(wèn)對(duì)話(huà)框資源。該函數(shù)經(jīng)常用于構(gòu)造一個(gè)基于資源的模式對(duì)話(huà)框。而Create函數(shù)則使用對(duì)話(huà)框模板,由資源創(chuàng)建無(wú)模式對(duì)話(huà)框。
CDialog中有許多成員函數(shù),其中最重要的有四個(gè):
(1)?virtualintCDialog::DoModal()。用于激活模式對(duì)話(huà)框,完成后返回對(duì)話(huà)框結(jié)果。在此對(duì)話(huà)框關(guān)閉前,用戶(hù)不能與應(yīng)用程序的其他窗口交互。函數(shù)返回一個(gè)int型數(shù)值,當(dāng)函數(shù)無(wú)法建立對(duì)話(huà)框時(shí)返回-1,發(fā)生錯(cuò)誤時(shí)返回IDABORT。
(2)?virtualBOOLCDialog::OnInitDialog()。用于響應(yīng)WM_INITDIALOG消息。在Create()或DoModal()調(diào)用期間,系統(tǒng)會(huì)發(fā)送WM_INITDIALOG給對(duì)話(huà)框,在對(duì)話(huà)框顯示之前執(zhí)行該函數(shù)。
(3)?protectedvirtualvoidCDialog::OnOK()。在用戶(hù)單擊OK按鈕(ID為IDOK)時(shí),調(diào)用該函數(shù)。
(4)?protectedvirtualvoidCDialog::OnCancel()。在用戶(hù)單擊Cancel按鈕或按Esc鍵時(shí)被調(diào)用。在模式對(duì)話(huà)框下,將自動(dòng)終止模式對(duì)話(huà)框,DoModal()返回IDCANCEL。7.1.2創(chuàng)建對(duì)話(huà)框
創(chuàng)建對(duì)話(huà)框的方法有兩種途徑:
(1)使用AppWizard創(chuàng)建一個(gè)新的工程文件,選擇“你喜愛(ài)創(chuàng)建的應(yīng)用程序類(lèi)型”時(shí),在單選框中選中“基本對(duì)話(huà)”選項(xiàng),如圖7-1所示。這種方法建立的應(yīng)用程序都是基于對(duì)話(huà)框框架的。
(2)在SDI或MDI方式下,通過(guò)選擇項(xiàng)目工作區(qū)的“ResourceView”選項(xiàng)卡,展開(kāi)“Dialog”選項(xiàng),可在里面手動(dòng)添加用戶(hù)自定義對(duì)話(huà)框。圖7-1利用AppWizard建立對(duì)話(huà)框下面學(xué)習(xí)如何在SDI界面下創(chuàng)建一個(gè)對(duì)話(huà)框。
【例7-1】
為第6章例6-7增加一個(gè)對(duì)話(huà)框。
操作步驟如下:
(1)打開(kāi)chap6_1工程文件。
(2)在項(xiàng)目區(qū)選中,展開(kāi)文件夾,可以看到里面有一個(gè)名為的文件,用鼠標(biāo)左鍵雙擊,在右邊客戶(hù)區(qū)出現(xiàn)如圖7-2所示的對(duì)話(huà)框窗口。圖7-2關(guān)于chap6_1的對(duì)話(huà)框提示:該對(duì)話(huà)框?yàn)橄到y(tǒng)自帶對(duì)話(huà)框,提供用戶(hù)輸入對(duì)應(yīng)用程序版本和版權(quán)聲明等信息,用戶(hù)可對(duì)其文字內(nèi)容進(jìn)行更改。該對(duì)話(huà)框與菜單欄中的“幫助”下拉子菜單中的“關(guān)于”子項(xiàng)相對(duì)應(yīng),選中該項(xiàng)即彈出此對(duì)話(huà)框。
此對(duì)話(huà)框并非希望的用戶(hù)自定義對(duì)話(huà)框,因此應(yīng)手動(dòng)添加一新對(duì)話(huà)框。
(3)鼠標(biāo)右鍵單擊文件夾,在彈出的快捷菜單中選擇項(xiàng)并用鼠標(biāo)左鍵單擊確認(rèn),在“Dialog”文件夾下自動(dòng)添加了一個(gè)名為的文件,在右邊客戶(hù)區(qū)出現(xiàn)如圖7-3所示的對(duì)話(huà)框窗口。圖7-3用戶(hù)新建對(duì)話(huà)框注意:對(duì)話(huà)框中只有兩個(gè)按鈕“OK”和“Cancel”,沒(méi)有別的內(nèi)容,需要用戶(hù)根據(jù)自己的需要手動(dòng)添加控件。
提示:如果想刪除添加的對(duì)話(huà)框,可以直接在“Dialog”展開(kāi)文件中選中要?jiǎng)h除的對(duì)話(huà)框,然后直接按鍵盤(pán)上“Delete”鍵將其刪除。
(4)現(xiàn)在已經(jīng)添加了一個(gè)對(duì)話(huà)框,運(yùn)行程序,其結(jié)果如圖7-4所示。
提示:運(yùn)行程序并未看到用戶(hù)自己建立的對(duì)話(huà)框。圖7-4例7-1運(yùn)行結(jié)果
7.2常用控件
控件是在系統(tǒng)內(nèi)部定義的能夠完成特定功能的控制程序單元。在應(yīng)用程序中使用控件不僅簡(jiǎn)化了編程,還能完成常用的各種功能。為了更好地發(fā)揮控件作用,用戶(hù)還必須理解和掌握控件的屬性、消息以及創(chuàng)建和使用的方法。
對(duì)話(huà)框中通常包含控件,用來(lái)與用戶(hù)進(jìn)行信息的交互。下面介紹一下對(duì)話(huà)框常用的控件。
在進(jìn)行對(duì)話(huà)框的界面設(shè)計(jì)中,VC++6.0中已經(jīng)提供了控件工具。當(dāng)用戶(hù)新建立一個(gè)對(duì)話(huà)框時(shí),控件工具欄一般會(huì)自動(dòng)彈出。如果沒(méi)有看到控件工具欄,則由用戶(hù)手動(dòng)顯示。其方法為:
(1)在VC++6.0操作界面的工具欄右邊的空白處,單擊鼠標(biāo)右鍵,即彈出快捷菜單,如圖7-5所示。圖7-5顯示工具欄菜單
(2)選中“Controls”選項(xiàng),即彈出控件工具欄,該工具欄提供了對(duì)話(huà)框界面設(shè)計(jì)的常用控件,如圖7-6所示。
VC++6.0提供了很多控件,而且每個(gè)控件都有大量的屬性和事件。下面將對(duì)一些常用的控件做介紹。圖7-6控件工具欄7.2.1靜態(tài)控件
一個(gè)靜態(tài)控件是用來(lái)顯示一個(gè)字符串、框、矩形、圖標(biāo)、位圖或增強(qiáng)的圖元文件。它可以被用來(lái)作為標(biāo)簽、框或用來(lái)分隔其他的控件。一個(gè)靜態(tài)控件一般不接收用戶(hù)輸入,也不產(chǎn)生通知消息。
在控制工具欄中,屬于靜態(tài)控件的有:靜態(tài)文本、組框和靜態(tài)圖片三種。其中靜態(tài)文本(StaticText)是一種單向交互的控制,只能支持應(yīng)用程序的輸出,一般不響應(yīng)用戶(hù)的輸入,通常作為顯示不更改文本信息使用。7.2.2按鈕
按鈕(Button)是Windows標(biāo)準(zhǔn)按鈕,通常也叫命令按鈕,是最常用的控件之一。
如果按鈕具有焦點(diǎn),可以使用鼠標(biāo)左鍵、Enter鍵或空格鍵觸發(fā)該按鈕的Click事件。通過(guò)設(shè)置窗體的AcceptButton或CancelButton屬性,無(wú)論該按鈕是否有焦點(diǎn),都可以使用戶(hù)通過(guò)按Enter鍵或Esc鍵來(lái)觸發(fā)按鈕的Click事件。當(dāng)使用ShowDialog方法顯示窗體時(shí),可以使用按鈕的DialogResult屬性指定ShowDialog的返回值。
下面將介紹VC++6.0在對(duì)話(huà)框中添加按鈕及按鈕屬性的設(shè)置方法。
(1)在圖7-6所示的控件工具欄里選擇按鈕,在圖7-3新建的對(duì)話(huà)框中單擊鼠標(biāo)左鍵就在該對(duì)話(huà)框中增加了一個(gè)按鈕,如圖7-7所示。圖7-7在對(duì)話(huà)框中添加按鈕
(2)在按鈕上單擊鼠標(biāo)右鍵,彈出如圖7-8所示的快捷菜單。
(3)選擇選項(xiàng),彈出如圖7-9所示的“PushButtonProperties”對(duì)話(huà)框。
在控件的對(duì)話(huà)框中含有許多屬性,如圖7-9所示(按鈕的屬性對(duì)話(huà)框)。對(duì)于大多數(shù)控件來(lái)說(shuō),這些屬性一般都有(一般屬性)、(控件的風(fēng)格)和(控件的擴(kuò)展風(fēng)格)。其中和是用來(lái)設(shè)定控件的外觀和輔助功能的,不同的控件具有不同的風(fēng)格和擴(kuò)展風(fēng)格,但控件的一般屬性是基本相同的,它通常有標(biāo)識(shí)符框、標(biāo)題框等內(nèi)容,各項(xiàng)具體說(shuō)明如下。圖7-8按鈕的右鍵快捷菜單圖7-9“PushButtonProperties”對(duì)話(huà)框①:控件的標(biāo)識(shí)符。每種控件都有缺省的ID,例如按鈕控件為IDC_BUTTON1。
②:控件的標(biāo)題。大多數(shù)控件都有缺省的標(biāo)題,例如按鈕控件為Button1。
③:指定控件初始化時(shí)是否可見(jiàn)。
④:指定控件組中的第一個(gè)控件,如果該項(xiàng)未被選中,則此控件后的所有控件均被看成同一組。成組的目的是可以讓用戶(hù)用鍵盤(pán)方向鍵在同一組控件中進(jìn)行切換。
⑤:若該項(xiàng)被選中,則為該控件建立一個(gè)上下文相關(guān)的幫助標(biāo)識(shí)符。
⑥:指定控件初始化時(shí)是否禁用。
⑦:若該項(xiàng)被選中,則用戶(hù)可使用Tab鍵來(lái)選控件。7.2.3編輯框
編輯框(EditBox)是一個(gè)用戶(hù)從鍵盤(pán)輸入和編輯文字的矩形窗口,用戶(hù)可以通過(guò)它進(jìn)行文字、數(shù)字或口令的輸入,也可以使用它來(lái)編輯或修改簡(jiǎn)單的文本文件。被選中后,編輯控制框中將顯示其文本(如果有)和一個(gè)閃爍的插入符,插入符用以表示插入點(diǎn)的位置。然后用戶(hù)就可以用鍵盤(pán)或鼠標(biāo)來(lái)輸入文本、移動(dòng)插入點(diǎn)或者選擇將移動(dòng)或刪除的文本。
編輯框通常用于編輯文本,不過(guò)也可使其成為只讀控件。編輯框能夠顯示多行數(shù)據(jù),并對(duì)文本換行使其符合控件的大小,并添加基本的格式設(shè)置。但是編輯框中顯示或輸入的文本只能采用一種格式。
Text屬性是編輯框最重要的屬性,因?yàn)橐@示的文本就包含在Text屬性中。默認(rèn)情況下,最多可在一個(gè)編輯框中輸入2048個(gè)字符。如果將MultiLine屬性設(shè)置為T(mén)rue,則最多可輸入32??KB的文本。Text屬性可以在設(shè)計(jì)窗體時(shí)使用屬性窗口設(shè)置,也可以在運(yùn)行時(shí)用代碼設(shè)置或者通過(guò)用戶(hù)輸入來(lái)設(shè)置??梢栽谶\(yùn)行時(shí)通過(guò)讀取Text屬性來(lái)獲得編輯框的當(dāng)前內(nèi)容。7.2.4單選框
單選框(RadioButton)通常成組出現(xiàn),允許用戶(hù)進(jìn)行單項(xiàng)選擇時(shí)使用,選中其中一項(xiàng),其余各項(xiàng)不能被同時(shí)選中。當(dāng)其被選中時(shí),單選框中就標(biāo)上一個(gè)黑點(diǎn),如圖7-10所示。圖7-10單選框示例當(dāng)單擊單選框時(shí),其Checked屬性被設(shè)置為T(mén)rue,并調(diào)用Click事件處理程序。當(dāng)Checked屬性的值更改時(shí),將觸發(fā)CheckedChanged事件。如果AutoCheck屬性被設(shè)置為T(mén)rue(默認(rèn)),那么當(dāng)選擇該單選框時(shí),將自動(dòng)清除該組中所有其他單選框。通常只有在使用驗(yàn)證代碼以確保選定的單選框是允許的選項(xiàng)時(shí),才將該屬性設(shè)置為False。用Text屬性可以設(shè)置控件內(nèi)顯示的文本,該屬性也可以包含訪問(wèn)鍵快捷方式,即前面帶有“&”符號(hào)的字母,這樣用戶(hù)就可以通過(guò)同時(shí)按Alt鍵和訪問(wèn)鍵來(lái)“單擊”控件。
如果將Appearance屬性設(shè)置為Button,將使單選框的外觀像按鈕一樣,即當(dāng)選定它時(shí),它看起來(lái)已被按下。單選框也可以使用Image和ImageList屬性組合來(lái)顯示圖像。7.2.5復(fù)選框
復(fù)選框(CheckBox):允許用戶(hù)進(jìn)行多項(xiàng)選擇時(shí)使用。當(dāng)其被選中時(shí),復(fù)選框中就加上一個(gè)“×”標(biāo)記,如圖7-11所示。圖7-11復(fù)選框示例復(fù)選框和單選框的相似之處在于,它們都是供用戶(hù)選擇的選項(xiàng)。其不同之處在于,在單選框組中一次只能選擇一個(gè)單選框,而在一組復(fù)選框中則可以同時(shí)選擇任意多項(xiàng)。
復(fù)選框有兩個(gè)重要屬性Checked和CheckState。Checked屬性返回True或False。CheckState屬性返回CheckState.Checked或CheckState.Unchecked。如果ThreeState屬性被設(shè)置為T(mén)rue,CheckState屬性還可返回CheckState.Indeterminate,此時(shí),復(fù)選框顯示為淺灰色狀態(tài),通常表示該選項(xiàng)下的多個(gè)子選項(xiàng)未完全選中。7.2.6組合框
列表框(ListBox)是一個(gè)放有用戶(hù)可以選擇的對(duì)象項(xiàng)列表的控制窗口。列表框中項(xiàng)的數(shù)目是可以靈活變化的,程序運(yùn)行時(shí)可以往列表框中添加或刪除某些項(xiàng)。當(dāng)列表框中的數(shù)目較多時(shí),列表框還提供滾動(dòng)條來(lái)拓展顯示范圍。
組合框(ComboBox)兼有編輯框和列表框二者的優(yōu)點(diǎn),在其下拉列表中有用戶(hù)待選的選項(xiàng),但當(dāng)用戶(hù)想往其中輸入沒(méi)有的列表項(xiàng)時(shí),組合框可以像編輯框似的直接輸入文本,為其待選項(xiàng)增加項(xiàng)目。按照組合框的主要風(fēng)格特征,可把組合框分為三類(lèi):簡(jiǎn)單組合框、下拉式組合框、下拉式列表框。
簡(jiǎn)單組合框和下拉式組合框都包含有列表框和編輯控件,但是簡(jiǎn)單組合框中的列表框不需要下拉,是直接顯示出來(lái)的,而當(dāng)用戶(hù)單擊下拉式組合框中的下拉按鈕時(shí),下拉的列表框才被顯示出來(lái)。下拉式列表框雖然具有下拉式的列表,卻沒(méi)有文字編輯功能。
組合框還有其他一些風(fēng)格,這些風(fēng)格可以在組合框的“屬性”對(duì)話(huà)框中設(shè)置,如圖7-12所示。圖7-12組合框的“屬性”對(duì)話(huà)框組合框的Style屬性說(shuō)明如下:
(1):設(shè)置組合框的類(lèi)型:Simple(簡(jiǎn)單)、Dropdown(下拉)、DropList(下拉列表框)。
(2):自畫(huà)組合框,缺省為No。
(3):選中時(shí),在自畫(huà)組合框的項(xiàng)目中含有字符串文本。
(4):選中時(shí),組合框的項(xiàng)目按字母順序排列。
(5):選中時(shí),在組合框中創(chuàng)建一個(gè)垂直滾動(dòng)條。
(6):選中時(shí),在創(chuàng)建組合框的過(guò)程中,系統(tǒng)會(huì)把用戶(hù)指定的尺寸完全作為組合框的尺寸,而不管是否會(huì)有項(xiàng)目在組合框的列表中不能完全顯示出來(lái)。
(7):選中時(shí),實(shí)現(xiàn)對(duì)特定字符集的字符轉(zhuǎn)換。
(8):當(dāng)用戶(hù)在行尾鍵入一個(gè)字符時(shí),文本自動(dòng)向右滾動(dòng)。
(9):選中時(shí),即使組合框的列表項(xiàng)能全部顯示,垂直滾動(dòng)條也會(huì)顯示,但此時(shí)呈現(xiàn)灰色狀態(tài),即禁用。
(10):選中時(shí),鍵入在編輯控件的字符全部轉(zhuǎn)換成大寫(xiě)形式。
(11):選中時(shí),鍵入在編輯控件的字符全部轉(zhuǎn)換成小寫(xiě)形式。7.2.7常用控件的應(yīng)用例程
【例7-2】
為例7-1新建的對(duì)話(huà)框增加控件,構(gòu)成一個(gè)學(xué)生個(gè)人信息登記的操作界面,包含學(xué)生姓名、學(xué)號(hào)、性別、學(xué)院及其他信息,點(diǎn)擊OK后在學(xué)生信息中顯示所有輸入的
信息。
其操作步驟如下:
(1)打開(kāi)chap6_1工程文件。
(2)在項(xiàng)目區(qū)選中,展開(kāi)文件夾,鼠標(biāo)左鍵雙擊,在右邊編輯區(qū)利用提供的控件工具欄布置對(duì)話(huà)框。
(3)在控件工具欄中選中“靜態(tài)文本”控件,回到ID_DIALOG1對(duì)話(huà)框。此時(shí),鼠標(biāo)指針變?yōu)椋聪率髽?biāo)左鍵不放,然后拖動(dòng)鼠標(biāo)到一定位置松開(kāi)鼠標(biāo),則在對(duì)話(huà)框中出現(xiàn)控件。
提示:控件周?chē)霈F(xiàn)的藍(lán)色邊框,用戶(hù)將鼠標(biāo)左鍵移動(dòng)到藍(lán)點(diǎn)處,按下鼠標(biāo)左鍵,可以拖動(dòng)鼠標(biāo)更改控件外觀大小。
(4)鼠標(biāo)右鍵單擊控件,在彈出的菜單中,選擇“屬性”項(xiàng),則彈出“TextProperties”對(duì)話(huà)框,如圖7-13所示。圖7-13“TextProperties”對(duì)話(huà)框
(5)在標(biāo)題右邊的編輯框中輸入“學(xué)生個(gè)人信息登記”字符串,然后關(guān)閉對(duì)話(huà)框。可以看到對(duì)話(huà)框中該編輯框內(nèi)容為,如圖7-14所示。
提示:一般情況下對(duì)靜態(tài)文本屬性的修改都只更改其標(biāo)題。
(6)使用同樣的方法,增加“姓名”、“學(xué)號(hào)”、“性別”、“學(xué)院”、“其他”和“學(xué)生信息”靜態(tài)文本。
(7)選中編輯框,同樣當(dāng)鼠標(biāo)指針為時(shí),在對(duì)話(huà)框中按下鼠標(biāo)左鍵不放,然后拖動(dòng)鼠標(biāo)到一定位置松開(kāi)鼠標(biāo),則在對(duì)話(huà)框中出現(xiàn)控件。鼠標(biāo)右鍵選中
,在彈出菜單中選中“屬性”項(xiàng),則彈出“EditProperties”對(duì)話(huà)框,如圖7-15所示。圖7-14文本屬性對(duì)話(huà)框?qū)傩孕薷膱D7-15“EditProperties”對(duì)話(huà)框General選項(xiàng)提示:編輯框?qū)傩詫?duì)話(huà)框有三個(gè)選項(xiàng),分別為“General”、“Styles”(見(jiàn)圖7-16)和“ExtendedStyles”。分別對(duì)編輯框的標(biāo)識(shí)、可見(jiàn)性、邊框風(fēng)格、文本風(fēng)格等進(jìn)行設(shè)置。
“General”中規(guī)定了該控件的ID號(hào),用戶(hù)可以手動(dòng)更改或使用默認(rèn)的ID。在這里使用默認(rèn)的ID。圖7-16“EditProperties”對(duì)話(huà)框Style選項(xiàng)提示:“Style”中規(guī)定了該控件的常用風(fēng)格。下面介紹一些常用選項(xiàng):
①Aligentext:規(guī)定了文本在編輯框中顯示的對(duì)齊方式,默認(rèn)為L(zhǎng)eft左對(duì)齊方式,在下拉列表中可選擇“Right”右對(duì)齊,“Center”居中方式。
②“Multiline”:允許多行輸入。
③“Verticalscroll”:當(dāng)文本行數(shù)超過(guò)當(dāng)前可顯示范圍,增加垂直滑動(dòng)條。
④“Border”:規(guī)定了編輯框的邊界屬性,選中編輯框有邊界,不選,則沒(méi)有邊界。
⑤“Password”:當(dāng)用戶(hù)需要輸入口令時(shí)為掩蓋輸入文本而選擇顯示輸出為“*”時(shí)使用。⑥“Read-only”:默認(rèn)方式下,顯示的文本是可以編輯的,選中此項(xiàng),文本為只讀屬性,不可更改。
(8)使用同樣的方法,建立另外兩個(gè)編輯框,ID分別為ID_EDIT2和ID_EDIT3。
提示:ID_EDIT3的“Style”選中“Multiline”、“Verticalscroll”。
(9)在控件工具欄中選擇,當(dāng)鼠標(biāo)指針為時(shí),在對(duì)話(huà)框中按下鼠標(biāo)左鍵不放,然后拖動(dòng)鼠標(biāo)到一定位置松開(kāi)鼠標(biāo),則在對(duì)話(huà)框中出現(xiàn)控件。鼠標(biāo)右鍵點(diǎn)擊,在彈出菜單中選擇“屬性”,彈出“RadioButtonProperties”對(duì)話(huà)框,如圖7-17所示。圖7-17“RadioButtonProperties”對(duì)話(huà)框在“標(biāo)題”右邊的編輯框中輸入“男”,不更改ID。
(10)同樣的方法,增加另一個(gè)單選框控件,標(biāo)題為“女”。
(11)在控件工具欄中選擇,當(dāng)鼠標(biāo)指針為時(shí),在對(duì)話(huà)框中按下鼠標(biāo)左鍵不放,然后拖動(dòng)鼠標(biāo)到一定位置松開(kāi)鼠標(biāo),則在對(duì)話(huà)框中出現(xiàn)控件。鼠標(biāo)右鍵點(diǎn)擊,在彈出菜單中選擇“屬性”,彈出“ComboBoxProperties”對(duì)話(huà)框,如圖7-18所示。圖7-18“ComboBoxProperties”對(duì)話(huà)框General選項(xiàng)提示:組合框?qū)傩詫?duì)話(huà)框有四個(gè)選項(xiàng),分別為“General”、“Data”、“Styles”和“ExtendedStyles”。分別對(duì)編輯框的標(biāo)識(shí)、數(shù)據(jù)、邊框風(fēng)格和進(jìn)展風(fēng)格等進(jìn)行設(shè)置。
“General”中規(guī)定了該控件的ID號(hào),用戶(hù)可以手動(dòng)更改或使用默認(rèn)的ID。在這里使用默認(rèn)的ID。
(12)選擇“Data”選項(xiàng),如圖7-19所示,可以輸入組合框中的列表項(xiàng),如圖7-20所示。圖7-19“ComboBoxProperties”對(duì)話(huà)框Data選項(xiàng)圖7-20在“Data”選項(xiàng)中增加列表項(xiàng)注意:為組合框增加列表項(xiàng)時(shí),每增加一項(xiàng)后按下鍵盤(pán)“Ctrl+enter”鍵進(jìn)行回車(chē)換行。當(dāng)輸入完畢后,按回車(chē)鍵直接退出。
(13)在控件工具欄中選擇復(fù)選框,當(dāng)鼠標(biāo)指針為時(shí),在對(duì)話(huà)框中按下鼠標(biāo)左鍵不放,然后拖動(dòng)鼠標(biāo)到一定位置松開(kāi)鼠標(biāo),則在對(duì)話(huà)框中出現(xiàn)控件。鼠標(biāo)右鍵點(diǎn)擊,在彈出菜單中選擇“屬性”,彈出“CheckBoxProperties”對(duì)話(huà)框,如圖7-21所示。圖7-21“CheckBoxProperties”對(duì)話(huà)框在標(biāo)題中輸入“班干部”,不改變ID。
(14)用同樣的方法,再添加一復(fù)選框,標(biāo)題名為“學(xué)生會(huì)干部”。
(15)現(xiàn)在需要的控件都已添加完畢,整理這些控件,對(duì)布局進(jìn)行布置,結(jié)果如圖7-22所示。
注意:ID_EDIT1與姓名對(duì)應(yīng);ID_EDIT2與學(xué)號(hào)對(duì)應(yīng);ID_EDIT3與學(xué)生信息對(duì)應(yīng)。
界面仍然不美觀,希望各控件的布置能橫平豎直,下面對(duì)控件位置進(jìn)行調(diào)整。圖7-22布置控件布局
(16)按下鍵盤(pán)“Ctrl”鍵,配合鼠標(biāo)左鍵選中“姓名”、“學(xué)號(hào)”、“其他”和“學(xué)生信息”四個(gè)靜態(tài)文本框后,選中工具欄中
欄,在其下拉菜單中,選擇“Align”,在下級(jí)菜單中選擇“Left”。這樣這四個(gè)文本框的左邊已經(jīng)對(duì)齊,如圖7-23所示。
提示:在“Align”中有關(guān)于“Left”(左對(duì)齊)、“Right(右對(duì)齊)”、“Top(上對(duì)齊)”和“Bottom(下對(duì)齊)”的選項(xiàng),選中表示控件外框邊界的對(duì)齊方式。
(17)采用提供的對(duì)齊方法,對(duì)界面進(jìn)一步進(jìn)行對(duì)齊方式的布置,如圖7-24所示。圖7-23左對(duì)齊靜態(tài)文本框圖7-24用戶(hù)自定義對(duì)話(huà)框界面7.2.8對(duì)話(huà)框的編程
前面已經(jīng)為對(duì)話(huà)框添加了控件,在程序運(yùn)行中我們?nèi)匀粺o(wú)法看到對(duì)話(huà)框,無(wú)法對(duì)對(duì)話(huà)框界面進(jìn)行操作。為了使對(duì)話(huà)框工作起來(lái),用戶(hù)和對(duì)話(huà)框?qū)崿F(xiàn)交互功能,需要對(duì)對(duì)話(huà)框進(jìn)行編程。
下面我們就為例7-1添加消息處理函數(shù),讓對(duì)話(huà)框工作起來(lái)。
【例7-3】
為例7-1在菜單欄中增加一個(gè)“顯示對(duì)話(huà)框”按鈕,下拉子菜單為“顯示”。選中“顯示”,彈出用戶(hù)自定義對(duì)話(huà)框。在對(duì)話(huà)框中進(jìn)行相應(yīng)信息的輸入,選擇OK按鈕,在“信息”對(duì)應(yīng)的文本框中顯示輸入的學(xué)生信息。其操作步驟如下:
(1)打開(kāi)工程文件“chap6_1”。
(2)在項(xiàng)目工作區(qū)中選擇選項(xiàng)卡,展開(kāi)文件夾,鼠標(biāo)左鍵雙擊。
(3)在右邊編輯區(qū)中,手動(dòng)添加新的主菜單欄按鈕“顯示對(duì)話(huà)框”,快捷鍵定義為“Alt+D”,如圖7-25所示。
(4)在其下拉菜單中建立一個(gè)名為“顯示”的子菜單項(xiàng),其ID定義為“ID_SHOWDIALOG,”快捷鍵定義為“Alt+X”。
(5)回到項(xiàng)目工作區(qū),按下鍵盤(pán)“Ctrl+w”,彈出“MFCClassWizard”對(duì)話(huà)框,會(huì)自動(dòng)彈出一個(gè)“AddingaClass”(增加類(lèi))對(duì)話(huà)框,選擇“Creatanewclass”選項(xiàng),然后點(diǎn)擊“OK”按鈕,如圖7-26所示。圖7-25“MenuItemProperties”對(duì)話(huà)框圖7-26增加類(lèi)對(duì)話(huà)框提示:之所以彈出“增加類(lèi)”對(duì)話(huà)框,是因?yàn)橛脩?hù)為程序增加了一個(gè)對(duì)話(huà)框,一個(gè)對(duì)話(huà)框就對(duì)應(yīng)一個(gè)派生于CDialog的新子類(lèi)。
(6)在彈出的“NewClass”(新類(lèi))對(duì)話(huà)框中,在“Name”處輸入“CMydialog”,然后點(diǎn)擊“OK”按鈕,如圖7-27所示。
提示:①“Name”處輸入用戶(hù)新增對(duì)話(huà)框?qū)?yīng)的子類(lèi)名稱(chēng)。
②“Baseclasss:”新增類(lèi)的基類(lèi),其下拉菜單提供了多種備選類(lèi)。此處選CDialog。
③“DialogID:”新對(duì)話(huà)框類(lèi)對(duì)應(yīng)的對(duì)話(huà)框ID號(hào)。
(7)在“MFCClassWizard“中的“Classname”列表中,出現(xiàn)了“CMydialog”類(lèi),如圖7-28所示。圖7-27“NewClass“對(duì)話(huà)框圖7-28“Classname”中增加的“Cmydialog”類(lèi)
(8)在“Classname”中選擇“CChap6_1View”;在“ObjectIDs”中選擇“ID_SHOWDIALOG”;在“Messages”中選擇“COMMAND”。雙擊,在“Memberfunctions”中出現(xiàn)“OnShowdialogON_ID_SHOWDIALOG:COMMAND”成員函數(shù),如圖7-29所示。
(9)點(diǎn)擊按鈕?;氐街鞔翱?,在項(xiàng)目工作區(qū)中自動(dòng)出現(xiàn)了成員函數(shù)。
(10)選擇,用鼠標(biāo)右鍵單擊,在彈出菜單中選擇,彈出“AddMemberVariable”對(duì)話(huà)框,如圖7-30所示。在處輸入“CMydialog”,在
處輸入mydialog,點(diǎn)擊“OK”按鈕。圖7-29添加OnShowdialog成員函數(shù)圖7-30添加CMydialog變量提示:這樣就建立了一個(gè)名為mydialog的CMydialog類(lèi)保護(hù)型對(duì)象。
(11)在項(xiàng)目工作區(qū)中選擇,雙擊,光標(biāo)移動(dòng)到該函數(shù)體起始位置,修改其內(nèi)容:
voidCChap6_1View::OnShowdialog()
{
//TODO:Addyourcommandhandlercodehere
mydialog.DoModal();//顯示對(duì)話(huà)框
}
(12)運(yùn)行該程序,選擇“顯示”菜單項(xiàng),結(jié)果如圖7-31所示。圖7-31選擇“顯示”運(yùn)行結(jié)果到這里,已經(jīng)可以看到用戶(hù)定義的對(duì)話(huà)框了,下面增加代碼實(shí)現(xiàn)用戶(hù)與對(duì)話(huà)框的交互,這些操作都在對(duì)話(huà)框?qū)?yīng)的類(lèi)CMydialog中完成。
(13)按下“Ctrl+W”鍵,打開(kāi)“MFCClassWizard”對(duì)話(huà)框,選擇“MemberVariables”選項(xiàng)卡,在“Classname”中選擇“CMydialog”,在“ControlIDs”中出現(xiàn)了用戶(hù)對(duì)話(huà)框中控件的ID,如圖7-32所示。
(14)選中“IDC_CHECK1”,點(diǎn)擊“AddVariable”按鈕,彈出“AddMemberVariable”對(duì)話(huà)框,如圖7-33所示。圖7-32成員變量選項(xiàng)圖7-33“AddMemberVariable”對(duì)話(huà)框提示:
①“Membervaiablename”:用戶(hù)定義的該控件的變量名。
②“Category”:該變量對(duì)應(yīng)于控件的哪一分類(lèi)。一個(gè)控件一般可以作為“value”(變量)和“Contrl”(控件)兩類(lèi)。
③“Variabletype”:該變量的數(shù)據(jù)類(lèi)型。
(15)為控件增加變量名,如表7-1所示。
(16)選擇“MessageMaps”,增加消息,如表7-2所示。
(17)在項(xiàng)目工作區(qū)的“CMydialog”中,已經(jīng)自動(dòng)添加用戶(hù)定義的成員函數(shù)與成員變量,如圖7-34所示。
圖7-34用戶(hù)增加的成員變量和成員函數(shù)
(18)選擇、用鼠標(biāo)右鍵單擊,在彈出菜單中選擇“AddMemberVarialbe…”,增加成員變量,如表7-3所示。(19)修改CMydialog的構(gòu)造函數(shù)內(nèi)容,如下所示:
CMydialog::CMydialog(CWnd*pParent/*=NULL*/)
:CDialog(CMydialog::IDD,pParent)
{
//{{AFX_DATA_INIT(CMydialog)
m_ban=FALSE;
m_xuesheng=FALSE;
m_xueyuan=_T("");
m_num=_T("");
m_info=_T("");
m_name=_T("");
sex="";
other="";
//}}AFX_DATA_INIT
}(20)鼠標(biāo)雙擊“OnCheck1”成員函數(shù),修改其函數(shù)體,如下所示:
voidCMydialog::OnCheck1()
{
//TODO:Addyourcontrolnotificationhandlercodehere
other=other+"班干部";
}
(21)鼠標(biāo)雙擊“OnCheck2”成員函數(shù),修改其函數(shù)體,如下所示:
voidCMydialog::OnCheck2()
{
//TODO:Addyourcontrolnotificationhandlercodehere
other=other+"學(xué)生會(huì)干部";
}(22)鼠標(biāo)雙擊“OnRadio1”成員函數(shù),修改其函數(shù)體,如下所示:
voidCMydialog::OnRadio1()
{
//TODO:Addyourcontrolnotificationhandlercodehere
sex="男";
}
(23)鼠標(biāo)雙擊“OnRadio2”成員函數(shù),修改其函數(shù)體,如下所示:
voidCMydialog::OnRadio2()
{
//TODO:Addyourcontrolnotificationhandlercodehere
sex="女";
}(24)鼠標(biāo)雙擊“OnOK”成員函數(shù),修改其函數(shù)體,如下所示:
voidCMydialog::OnOK()
{
//TODO:Addextravalidationhere
UpdateData(TRUE);
m_info="姓名"+m_name+"\r\n"+"學(xué)號(hào)"+m_num+"\r\n"+"性別"+sex+"\r\n"+"學(xué)院"+"\r\n"+m_xueyuan+"其他"+other+"\r\n";
UpdateData(FALSE);
// CDialog::OnOK();
}
注意:CDialog::OnOK();前用戶(hù)添加了一個(gè)注釋符“//”,使得該函數(shù)失效。如果不使其變?yōu)樽⑨專(zhuān)聪翺K后該對(duì)話(huà)框會(huì)自動(dòng)關(guān)閉。
(25)運(yùn)行程序,選擇“顯示”菜單項(xiàng),在對(duì)話(huà)框中輸入相應(yīng)信息,點(diǎn)擊“OK”按鈕,結(jié)果如圖7-35所示。圖7-35例7-2運(yùn)行結(jié)果本章學(xué)習(xí)了對(duì)話(huà)框及常用控件。讀者重點(diǎn)掌握常用控件的繪制、屬性以及對(duì)話(huà)框的編程方法。在實(shí)際編程中,除了正確設(shè)計(jì)程序語(yǔ)言外,還應(yīng)注意合理利用系統(tǒng)提供的屬性選項(xiàng)配合使用,使得界面的設(shè)計(jì)方便、快捷、美觀。以下是一具體實(shí)例,在對(duì)話(huà)框模式下實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,能進(jìn)行加、減、乘、除運(yùn)算。
其操作步驟如下:
(1)打開(kāi)VC++6.0,選擇“文件/新建”命令,彈出“新建”對(duì)話(huà)框,選擇“工程”選項(xiàng),選擇“MFCAppWizard(exe)”,在工程處輸入工程名“l(fā)ianxi7_1”,如圖7-36所示。圖7-36“新建”對(duì)話(huà)框
(2)點(diǎn)擊“確定”按鈕,彈出“MFCAppWizrd–Step1”對(duì)話(huà)框中,選擇“基本對(duì)話(huà)”應(yīng)用程序類(lèi)型,點(diǎn)擊“完成”按鈕,如圖7-37所示。
(3)為對(duì)話(huà)框添加3個(gè)靜態(tài)文本,標(biāo)題分別為“操作數(shù)1”,“操作數(shù)2”,“結(jié)果”。
(4)為對(duì)話(huà)框添加3個(gè)編輯框,在屬性中更改ID為用戶(hù)自定義ID,如表7-4所示。圖7-37選擇“基本對(duì)話(huà)框”應(yīng)用程序類(lèi)型
(5)為對(duì)話(huà)框添加4個(gè)單選框,在屬性中更改ID為用戶(hù)自定義ID并設(shè)置標(biāo)題,如表7-5所示。
(6)為對(duì)話(huà)框添加1個(gè)按鈕,在屬性中更改標(biāo)題為“=”,ID為“IDC_BUTTON1”。
(7)布置用戶(hù)界面,如圖7-38所示。
(8)按下“Ctrl+W”鍵,彈出“MFCClassWizard”對(duì)話(huà)框,選中“MemberVarialbes”選項(xiàng),如圖7-39所示。
(9)選擇“IDC_NUM1”,點(diǎn)擊右邊“AddVariable”按鈕,彈出“AddMemberVariable”對(duì)話(huà)框,在其中定義成員變量名為“m_num1”,“Category”為“Value”,“VariableType”下拉列表中選擇“float”,如圖7-40所示。圖7-38lianxi7_1界面布置圖7-39lianxi7_1的成員變量圖7-40為“IDC_NUM1”添加成員變量
(10)點(diǎn)擊“OK”按鈕。
(11)使用同樣的方法,為“IDC_NUM2”添加變量,如圖7-41所示。
(12)為“IDC_RESULT”添加變量,如圖7-42所示。
(13)選中“MessageMaps”選項(xiàng),在“ObjectIDs”中選中“IDC_BUTTON1”,在“Messages”中用鼠標(biāo)左鍵雙擊“BN_CLICKED”,則彈出“AddMemberFunction”對(duì)話(huà)框,點(diǎn)擊“OK”按鈕確認(rèn),如圖7-43所示。圖7-41為“IDC_NUM2”添加成
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西中文專(zhuān)業(yè)素養(yǎng)試題及答案
- 檢查員招聘崗位面試題及答案
- 2025年老年護(hù)理師職業(yè)考試題及答案
- java面試題及答案事務(wù)2025年
- 北京攜寧科技java面試題及答案
- 福州興業(yè)java面試題及答案
- 關(guān)鍵考點(diǎn)軟件設(shè)計(jì)師考試試題及答案
- 藥學(xué)專(zhuān)業(yè)知識(shí)與藥品管理實(shí)踐題庫(kù)
- 經(jīng)濟(jì)學(xué)微觀經(jīng)濟(jì)學(xué)概念與運(yùn)用試題集
- 軟件設(shè)計(jì)師考試實(shí)踐試題及答案匯綜
- 2024年湖南出版中南傳媒招聘筆試真題
- 【初中地理】七年級(jí)地理下冊(cè)全冊(cè)期末總復(fù)習(xí)(課件)-2024-2025學(xué)年七年級(jí)地理課件(人教版2024年)
- 辦公樓安全培訓(xùn)
- JT∕T 402-2016 公路貨運(yùn)站站級(jí)標(biāo)準(zhǔn)及建設(shè)要求
- GB/T 7233.1-2009鑄鋼件超聲檢測(cè)第1部分:一般用途鑄鋼件
- GB/T 545-1996海軍錨
- GB/T 22080-2016信息技術(shù)安全技術(shù)信息安全管理體系要求
- 湯谷良全面預(yù)算整合企業(yè)管理
- iFIAE全自動(dòng)多參數(shù)流動(dòng)分析儀使用說(shuō)明書(shū)-20201110doc
- 人員分流安置的實(shí)施方案
- 生態(tài)毒理學(xué)考點(diǎn)整理
評(píng)論
0/150
提交評(píng)論