VC++60入門【第七章 WINDOWS標(biāo)準(zhǔn)控件】(共51頁).doc_第1頁
VC++60入門【第七章 WINDOWS標(biāo)準(zhǔn)控件】(共51頁).doc_第2頁
VC++60入門【第七章 WINDOWS標(biāo)準(zhǔn)控件】(共51頁).doc_第3頁
VC++60入門【第七章 WINDOWS標(biāo)準(zhǔn)控件】(共51頁).doc_第4頁
VC++60入門【第七章 WINDOWS標(biāo)準(zhǔn)控件】(共51頁).doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余47頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章Windows標(biāo)準(zhǔn)控件精講在前一章,已經(jīng)學(xué)習(xí)了在一個(gè)對話框中增加控件,用戶通過對話框中的控件與應(yīng)用程序進(jìn)行交互的方法,在這一章,主要詳細(xì)討論不同Windows標(biāo)準(zhǔn)控件的使用特性,你將學(xué)會靜態(tài)控件、按鈕控件、編輯框控件、列表框控件、組合框控件、滾動條控件的使用。7.1Windows標(biāo)準(zhǔn)控件概述7.1.1 Winodws 標(biāo)準(zhǔn)控件Windows系統(tǒng)提供的標(biāo)準(zhǔn)控件主要包括:靜態(tài)控件、按鈕控件、編輯框控件、列表框控件、組合框控件等,如表7-1所示。表7-1windows標(biāo)準(zhǔn)控件的類型類別MFC類控件類型靜態(tài)控件CStaticStatic Text、Group Box按鈕控件CButtonButton、Check Box、Radio Button編輯框控件CEditEdit Control組合框控件CComboBoxCombo Box列表框控件CListBoxList Box控件操作的學(xué)習(xí)要關(guān)注以下幾個(gè)方面:1 控件的創(chuàng)建控件的創(chuàng)建形式分為靜態(tài)創(chuàng)建和動態(tài)創(chuàng)建兩種方式。靜態(tài)創(chuàng)建是指在對話框模板創(chuàng)建控件,并設(shè)置控件的屬性,這樣,在調(diào)用該對話框時(shí),窗口系統(tǒng)會自動按預(yù)先的設(shè)置為對話框創(chuàng)建控件,程序員可以使用ClassWizard為該控件在對話框類中創(chuàng)建一個(gè)控件類的對象。動態(tài)創(chuàng)建是指在程序的運(yùn)行中根據(jù)需要,定義一個(gè)控件類的對象,再通過窗口函數(shù)CreateWindow()或CreateWindowEx()創(chuàng)建控件,函數(shù)ShowWindow()顯示控件,正如操作一個(gè)子窗口。2 控件的屬性設(shè)置每個(gè)控件都有一個(gè)屬性集,對于靜態(tài)創(chuàng)建的控件,可以在對話框模板中,打開控件的屬性對話框直接設(shè)置控件的初始屬性。在程序設(shè)計(jì)過程中,可以通過控件類對象調(diào)用方法設(shè)置控件的屬性。3 控件消息類別表7-1中所列出的控件中,靜態(tài)控件不發(fā)送消息,其它控件對于用戶的操作都能發(fā)送消息,不同類的控件發(fā)送的消息類別是不相同的,可以使用ClassWizard為控件映射各種消息處理函數(shù)。4 控件對象的常用方法MFC控件類提供豐富的方法函數(shù),幫助程序員操作控件對象。5 用戶輸入消息的獲取和響應(yīng)在前一章已經(jīng)介紹了MFC支持應(yīng)用程序與用戶之間的通訊的方法,為控件的顯示值映射一個(gè)對話框類的成員變量,再通過對話框數(shù)據(jù)交換和校驗(yàn)機(jī)制實(shí)現(xiàn)在對話框打開和關(guān)閉的時(shí)候傳遞數(shù)據(jù),在程序運(yùn)行過程中,通過UpdateData()函數(shù)主動地控制數(shù)據(jù)在控件顯示和成員變量之間交換。這是MFC應(yīng)用程序獲取用戶輸入消息的獲取的主要方法。同時(shí)MFC保留了Windows API函數(shù),直接通過控件ID操作控件,獲取或設(shè)置控件的顯示值。例如SetDlgItemText()和GetDlgItemText()函數(shù)可以用于設(shè)置或獲取編輯框的顯示文本串。7.1.2控件的通用屬性Windows標(biāo)準(zhǔn)控件的屬性窗口通常由三個(gè)屬性標(biāo)簽構(gòu)成。1 General標(biāo)簽頁General 標(biāo)簽頁中設(shè)置常規(guī)屬性,通常包括:(1) ID程序通過控件ID來訪問一個(gè)控件。所有的控件中,只有Static Box控件和Group Box控件的ID是可以重復(fù),一般使用默認(rèn)設(shè)置IDC_STATIC,而其它控件的ID在一個(gè)應(yīng)用程序中應(yīng)該是唯一的。 (2) Visible設(shè)置對話框打開時(shí)控件是否是可見的。它的類型是布爾類型。默認(rèn)為TURE,即運(yùn)行程序時(shí)顯示控件。(3) Disabled設(shè)置當(dāng)對話框在打開時(shí)該控件是否是不可用的,它的類型是布爾類型,默認(rèn)為FALSE。(4) Group標(biāo)記一組控件中的第一個(gè)控件。(5) Tap stop設(shè)置TAB鍵是否可以該控件上駐留,它的類型是布爾型,默認(rèn)值為TURE。(6) Help ID分配一個(gè)幫助ID給一個(gè)控件。這一個(gè)幫助ID是建立在資源ID基礎(chǔ)上的。它的類型是布爾型,默認(rèn)為FALSE。2 Styles標(biāo)簽頁Style標(biāo)簽頁通過設(shè)置一些與控件風(fēng)格有關(guān)的屬性,不同的控件所設(shè)置的屬性不相同,在本章的后續(xù)小節(jié)中將按不同的控件介紹。3 Extend Styles標(biāo)簽頁Extent Styles標(biāo)簽面設(shè)置與顯示風(fēng)格有關(guān)的屬性,通常包括:(1) Client edge圍繞對話框建立一個(gè)有下凹風(fēng)格的邊框。它的類型是布爾型,默認(rèn)值是FALSE。(2) Static edge圍繞對話框建立一個(gè)邊框。它的類型是布爾型,默認(rèn)值是FALSE。(3) Modal frame該選項(xiàng)提供一個(gè)3D框架。(4) Transparent使用這種風(fēng)格的窗口在層疊狀態(tài)下是透明的,它的類型是布爾型,默認(rèn)值是FALSE。(5) Accept files有這種風(fēng)格的對話框接受拖放文件操作。如果用戶拖放一個(gè)文件到此對話框上,一個(gè)WM_DROPFILES消息將要發(fā)送到這個(gè)控件上。它的類型是布爾型,默認(rèn)值是FALSE。(6) Right aligned text指定在一個(gè)對話框中文本是右對齊的。它的類型是布爾型,默認(rèn)值是FALSE。(7) Right-to-left reading order對話框的文本是按從右到左的順序編排的,這是為了方便一些其他的語言的閱讀方便而設(shè)置的(如阿拉伯語言)。它的類型是布爾型,默認(rèn)值是FALSE。7.1.3常用控件窗口操作函數(shù) 窗口應(yīng)用程序?qū)丶牟僮鲗?shí)質(zhì)上是對窗口的操作,對話框窗口中的控件被視為對話框窗口的子窗口,具有通用的窗口屬性,所以控件的操作還可是通過一組操作窗口的函數(shù)來完成的。常用的控件子窗口操作函數(shù)有:1 CreateWindow()或CreateWindowEx()在程序運(yùn)行過程中,可以通過調(diào)用創(chuàng)建窗口的函數(shù)來動態(tài)地創(chuàng)建控件,創(chuàng)建窗口的函數(shù)是CreateWindow()或CreateWindowEx()。2 ShowWindow()使用函數(shù)ShowWindow()可以顯示或隱藏控件。它的函數(shù)原型為:BOOLShowWindow(int nCmdShow);參數(shù)nCmdShow表示窗口的顯示特性,例如,取值SW_HIDE表示隱藏控件,取值SW_SHOW表示顯示控件。3 EnableWindow()通過函數(shù)EnableWindow()可以激活或禁止控件接受用戶輸入。它的函數(shù)原型為:BOOLEnableWindow(BOOL nEnable=ture);參數(shù)nEnable決定控件的激活或禁止?fàn)顟B(tài),當(dāng)值為ture時(shí),控件允許接受用戶輸入,當(dāng)其值為fals時(shí),控件不允許接受用戶輸入,呈灰色顯示。4 MoveWindow()通過函數(shù)MoveWindow()可以移動控件或改變控件的大小。函數(shù)的原型如下:BOOL MoveWindow(int x,int y,int nWidth,int nHeight,BOOL bRepaint=TRUE);坐標(biāo)x,y決定控件所在的位置,nWidth和nHeight決定控件的大小,bRepaint表明對話框窗口移動后,控件是否需要重畫,與對話框窗口的相對位置與大小保持不變。5 DestroyWindow()通過該函數(shù)能夠關(guān)閉一個(gè)控件,該函數(shù)的原型為:void DestoyWindow();7.2 CStatic類控件的使用在程序中出現(xiàn)的文本根據(jù)作用的不同,可以分為兩大類:靜態(tài)文本和動態(tài)文本。靜態(tài)文本在程序的執(zhí)行中保持不變,主要用來表示控件的功能、下一步執(zhí)行的操作等。動態(tài)文本在程序執(zhí)行過程中是可以改變的,在Windows中通過可以通過編輯控件來實(shí)現(xiàn)。MFC中使用CStatic類來管理靜態(tài)文本控件,包括StaticText控件和Group Box控件,StaticText控件通常用來標(biāo)識一個(gè)控件,Group Box通常用來分割不同組別的控件。一般情況下,靜態(tài)控件不接受用戶輸入,也不發(fā)出消息。它的ID號默認(rèn)為IDC_STATIC,只有CStatic類的控件的ID號是可以重復(fù)的。7.2.1 Static Text控件用戶能添加到對話框中的最簡單控件是靜態(tài)文本控件。靜態(tài)文本控件不要求與對話框進(jìn)行交互, 需要顯示的文本串只要在該控件屬性對話框的General標(biāo)簽中的Caption屬性中直接輸入。對靜態(tài)文本,可以在Styles標(biāo)簽頁中設(shè)置文本的顯示風(fēng)格,設(shè)置屬性解釋如下:1 Align text控制靜態(tài)文本控件中文本的對齊方式??赡艿娜≈涤蠷ight(右對齊),Left(左對齊),Center(居中),當(dāng)No wrap選項(xiàng)選中時(shí),這個(gè)選項(xiàng)設(shè)置為Left,它的默認(rèn)值為Left。2 Center vertically在靜態(tài)文本控件中垂直方向上居中。它的類型是布爾型,默認(rèn)值是FALSE。3 No prefix禁止文本中的“&”解釋為它后面的字符有一個(gè)下劃線,直接將它作為文本的一部分進(jìn)行顯示。No prefix選項(xiàng)經(jīng)常在顯示包含“&”的文件名或字符串中用到。4 No wrap前提條件是文本必須是左對齊的。在這種選項(xiàng)下Tabs是可擴(kuò)展的,但是單詞是不能被完整保護(hù)的。在行的末尾擴(kuò)展處的那一部分將被剪切掉。它的類型是布爾型,默認(rèn)值是FALSE。5 Simple 此選項(xiàng)將禁用No wrap和Align text選項(xiàng)。在靜態(tài)文本控件中的文本如果有此屬性,就不保護(hù)單詞的完整性,且不保證不被剪切。它的類型是布爾型,默認(rèn)值是FALSE。6 Notify此選項(xiàng)表示當(dāng)一個(gè)控件被選中或雙擊時(shí),要通知父窗口。此選項(xiàng)的類型是布爾型,默認(rèn)值是FALSE。7 Sunken此選項(xiàng)表示圍繞靜態(tài)文本控件的文本,建立一個(gè)凹下的邊框。它的類型是布爾型,默認(rèn)值是FALSE。8 Border此選項(xiàng)表示圍繞靜態(tài)文本控件的文本,建立一個(gè)邊框。它的類型是布爾型,默認(rèn)值是FALSE。7.2.2 Group Box控件Group Box 的作用與Static Text的類似,主要是用于標(biāo)識控件的作用,它更多能用于成組控件的標(biāo)識,例如,如圖7-1所示,一組用于選擇性別的單選按鈕,一組用于表示興趣愛好的復(fù)選框按鈕。Group Box的Styles標(biāo)簽頁的屬性設(shè)置更為簡單:1 Horizontal alignment此選項(xiàng)用于設(shè)置Group Box 中文本串顯示的水平對齊位置,在下拉列表中提供了四個(gè)選項(xiàng):Default,Right,Left,Center,默認(rèn)選項(xiàng)為Default,表示左對齊。2 Icon此選項(xiàng)表示使用圖標(biāo)表示作標(biāo)識,代替文本串。3 Bitmap此選項(xiàng)表示使用位圖表示作標(biāo)識,代替文本串。4 Notify此選項(xiàng)這表示當(dāng)一個(gè)控件被選中或雙擊時(shí),要通知父窗口。此選項(xiàng)的類型是布爾型,默認(rèn)值是FALSE。5 Flat此選項(xiàng)設(shè)置Group Box的線條顯示風(fēng)格。圖7-1靜態(tài)控件示例7.3 CEdit類控件的使用編輯控件用于必須獲取文本的時(shí)候,例如,在對話框內(nèi)輸入名字或數(shù)字時(shí),由編輯控件獲取此信息。編輯控件是用來存儲用戶輸入的自由格式文本的窗口,它可以分為單行編輯控件和多行編輯控件。單行編輯控件是用于單行文本輸入的控件,多行文本編輯控件是用于多行文本輸入的控件。在多行編輯控件中經(jīng)常使用滾動條,從而能輸入比能顯示的文本更多的文本。事實(shí)上,Windows中的記事本(Notepad)應(yīng)用程序就是一個(gè)帶有控件菜單的編輯控件。每個(gè)編輯控件都提供了內(nèi)置編輯能力,因此可以使用多行編輯控件來創(chuàng)建一個(gè)簡單的文本編輯器。所有的編輯控件都支持特定的編輯功能,而不需要任何附加編程。在剪貼板中用到的粘貼命令在編輯控件中照??梢允褂?,表7-2中列出了編輯控件可以使用的編輯命令。表7-2 編輯控件可以使用的編輯命令命令擊鍵用 途CutCtrl+X對編輯控件中選中的文本進(jìn)行刪除,并將文本復(fù)制到剪貼板中。CopyCtrl+C將當(dāng)前選中的文本復(fù)制到剪貼板中。PasteCtrl+V將剪貼板中的文本插入到編輯控件中的當(dāng)前光標(biāo)位置處。UndoCtrl+Z取消對編輯控件中的文本所做的最后一次修改。編輯框控件能夠發(fā)送WM_NOTIFY消息到對話框窗口,并告訴對話框窗口用戶對編輯框控件所做的操作,編輯框控件能夠處理的消息類別如表7-3所示:表7-3編輯框控件的消息類別消息類別發(fā)生事件EN_CHANGE輸入框中的文本串被修改EN_ERRSPACE輸入的文本串超過了輸入框的顯示范圍EN_HSCROLL按下水平滾動釘EN_KILLFOCUS輸入框失去焦點(diǎn),也就是輸入轉(zhuǎn)移到其它對象EN_MAXTEXT輸入的文本串超過了設(shè)定的輸入最大長度EN_SETFOCUS輸入框獲取焦點(diǎn)EN_UPDATE更新顯示內(nèi)容EN_VSCROLL按下垂直滾動條使用ClassWizard可以為一個(gè)編輯框控件的ID值映射一個(gè)對話框的成員變量,通過對話框的數(shù)據(jù)交換機(jī)制,方便地獲取用戶輸入的內(nèi)容,或把應(yīng)用程序的響應(yīng)結(jié)果輸出到編輯框。成員變量的數(shù)據(jù)類型可以設(shè)為CString、int、UINT、long、DWORD、float、double、BYTE、short、BOOL、COleDateTime、COleCurrency,方便程序員在不同應(yīng)用情況下的數(shù)據(jù)處理。7.3.1屬性設(shè)置通過在Styles標(biāo)簽頁,可以得到不同類型的輸入框樣式:多行輸入框、密碼輸入框,只讀輸入框,大小寫轉(zhuǎn)換輸入框、數(shù)字輸入框等等。具體的設(shè)置項(xiàng)如圖7-2所示:圖7-2 Edit控件屬性對話框Styles選項(xiàng)卡1 Align text控制編輯控件中文本的對齊方式??赡艿娜≈涤凶髮R、居中和右對齊。2 Multiline定義該編輯控件為多行文本編輯。通常情況下,該選項(xiàng)不被選中。3 Number限定用戶輸入的只能是數(shù)字。4 Horizontal scroll在多行編輯控件中提供一個(gè)水平滾動條。缺省時(shí)該選項(xiàng)不被選中。5 Auto HScroll當(dāng)用戶在編輯框的右邊輸入字符時(shí),文本自動進(jìn)行滾動。該選項(xiàng)通常被選中。6 Vertical scroll在多行編輯控件中提供一個(gè)垂直滾動條。缺省時(shí)該選項(xiàng)不被選中。7 Auto VScroll在多行編輯控件中,當(dāng)用戶在最后一行鍵入回車鍵時(shí),提供自動向下滾動。缺省時(shí),該選項(xiàng)不被選中。8 Password當(dāng)用戶在編輯控件中輸入字符時(shí),在編輯框中不再顯示輸入的文本,而是相同數(shù)量的“*”字符。這一選項(xiàng)在多行編輯控件中是不能使用的。缺省時(shí)不被選中。9 No hide selection當(dāng)編輯控件失去或重新獲得焦點(diǎn)時(shí),該項(xiàng)設(shè)置將改變文本的顯示方式。當(dāng)No hide selection設(shè)置為“真”時(shí),在編輯框中選擇的文本好象總是在選中。缺省時(shí)不被選中。10 OEM convert在用戶輸入上進(jìn)行從Windows字符集到OEM字符集的轉(zhuǎn)化,這樣可以使AnsiToOem在被調(diào)用時(shí)正常工作。缺省時(shí)不被選中。11 Want return應(yīng)用于多行編輯控件。該選項(xiàng)允許編輯控件輸入Enter擊鍵,以使Enter擊鍵不影響對話框的默認(rèn)按鈕。12 Border為控件創(chuàng)建邊界,該選項(xiàng)缺省時(shí)被選中。13 Uppercase將所有的輸入轉(zhuǎn)化為大寫字符,缺省時(shí)不被選中。14 Lowercase將所有的輸入轉(zhuǎn)化為小寫字符,缺省時(shí)不被選中。15 Read-only禁止用戶在編輯控件中輸入或修改,缺省時(shí)不被選中。與靜態(tài)文本的擴(kuò)展屬性相比,編輯框的擴(kuò)展屬性只增加了一項(xiàng)Left scroll bar,如果設(shè)置了垂直滾動條,這一項(xiàng)決定了滾動條在客戶區(qū)的左邊。它的類型是布爾型,缺省情況下為不選中。7.3.2常用方法編輯框控件的默認(rèn)模式是在一行顯示所有編輯文本,表7-4是通用CEdit類的方法。表7-4 通用CEdit類的方法方法說 明CanUndo()決定一個(gè)編輯操作是否可以撤銷Clear()從編輯控件中刪除當(dāng)前的選擇(如果有的話)Copy()將編輯控件當(dāng)前的選擇(如果有的話)以CF_TEXT格式復(fù)制到剪貼板中Cut()剪下編輯控件中的當(dāng)前選擇(如果有的話)并以CF_TEXT格式復(fù)制到剪貼板中EmptyUndoBuffer()消除一個(gè)編輯控件的“撤銷”標(biāo)志GetFirstVisibleLine()確定編輯控件中的最上面的可視行GetModify()確定一個(gè)編輯控件的內(nèi)容是否可修改GetPasswordChar()當(dāng)用戶輸入文本時(shí),獲得編輯控件中顯示的密碼字符GetRect()獲得一個(gè)編輯控件的格式化矩形GetSel()獲得編輯控件中當(dāng)前選擇的開始和結(jié)束字符位置LimitText()限定用戶可能輸入一編輯控件的文本長度LineFromChar()獲得包含指定字符下標(biāo)的行的行號LineLength()獲得編輯控件中的一行的長度LineScroll()滾動多行編輯控件的文本Paste()將剪貼板的數(shù)據(jù)插入到編輯控件作當(dāng)前的光標(biāo)位置,只有當(dāng)前剪貼板中數(shù)據(jù)格式為CF_TEXT時(shí)方可插入ReplaceSel()用指定文本替代編輯控件中當(dāng)前選擇的部分SetModify()設(shè)置或清除編輯控件的修改標(biāo)志SetPasswordChar()當(dāng)用戶輸入文本時(shí)設(shè)置或刪除一個(gè)顯示于編輯控件中的密碼字符SetReadOnly()將編輯控件設(shè)置為只讀狀態(tài)SetSel()在編輯控件中選擇字符的范圍Undo()取消最后一個(gè)編輯控件操作當(dāng)編輯框控件具有ES_MULTILINE樣式時(shí),多行編輯框控件支持在編輯窗口進(jìn)行多行文本編輯,表7-5中是多行編輯所支持的CEdit類的方法。表7-5 CEdit類提供的支持多行編輯的方法方法說 明FmtLines()設(shè)置在多行編輯控件中包含軟分行符GetHandle()獲得當(dāng)前分配給一個(gè)多行編輯控件的內(nèi)存的句柄GetLine()從一編輯控件中獲得一行文本GetLineCount()獲得多行編輯控件的行數(shù)LineIndex()設(shè)置多行編輯控件中一行的字符下標(biāo)SetHandle()設(shè)置多行編輯控件將要用到的句柄SetRect()設(shè)置多行編輯控件的格式化矩形并更新控件SetRectNP()設(shè)置多行編輯控件的格式化矩形并且不重繪控件窗口SetTabStops()在多行編輯控件中設(shè)置制表(tab)位7.3.3編程實(shí)例【例7-1】編寫一個(gè)用戶登錄的應(yīng)用程序,如圖7-3所示,應(yīng)用程序維護(hù)著一張合法用戶的用戶名和密碼,只有合法用戶才能通過登錄程序。要求如下:(1) 用戶名輸入后,轉(zhuǎn)換為大寫字母顯示,最大長度不能超過10位。(2) 密碼以“*”代替顯示,密碼只能是6位數(shù)字。(3) 按“確定”時(shí),需要檢查輸入框不能為空,且輸入是否符合要求,否則返回輸入框重新輸入。(4) 合法用戶顯示歡迎對話框,不合法用戶顯示警告對話框。圖7-3Exam7_1運(yùn)行圖1 創(chuàng)建基于對話框的MFC應(yīng)用程序Exam7_1,并把對話框的Caption改為”用戶登錄”2 在對話框模板中創(chuàng)建控件并設(shè)置控件屬性(1) 在工作區(qū)選擇ResourceView標(biāo)簽頁,在Dialog文件夾選擇IDD_EXAM7_1_DIALOG,打開對話框模板。(2) 按圖7-3添加靜態(tài)文本控件和編輯框控件。(3) 設(shè)置用戶名編輯框,ID為IDC_USER,在Styles標(biāo)簽頁選中Uppercase屬性。(4) 設(shè)置密碼編輯框,ID為IDC_PWD,在Styles標(biāo)簽頁選中Number和Password屬性。(5) 設(shè)置IDC_USER的TAB Order為1,IDC_PWD的Tab Order為2。3 創(chuàng)建一張合法用戶的用戶名和密碼的列表(1) 在CExam7_1Dlg類中添加CString類公有成員變量,二維數(shù)組userlist52,可以存放5個(gè)用戶的用戶名和密碼。(2) 在CExam7_1Dlg類的構(gòu)造函數(shù)中輸入5個(gè)用戶的用戶名和密碼,用戶名要求全部大寫,密碼長度為6,例如:userlist00=MARY;userlist01=123456;4 使用ClassWizard為控件映射對話框成員變量,設(shè)置完畢如圖7-4所示(1) 為IDC_USER映射兩個(gè)成員變量,一個(gè)是Value類的CString型變量m_user,另一個(gè)是Control類的CEdit對象m_EditUser。并設(shè)置m_user的校驗(yàn)機(jī)制的最大長度為10。(2) 為IDC_PWD映射兩個(gè)成員變量,一個(gè)是Value類的CString變量m_pwd,另一個(gè)是Control類的CEdit對象m_EditPwd。并設(shè)置m_pwd的校驗(yàn)機(jī)制的最大長度為6。圖7-4 為控件映射對話框成員變量5 單擊“確認(rèn)”按鈕時(shí),進(jìn)行輸入框合法檢查和用戶登錄響應(yīng)。(1) 為“確認(rèn)”按鈕在CExam7_1Dlg類映射BN_CLICKED消息處理函數(shù)OnOK()。(2) 在OnOK()函數(shù)中添加代碼,進(jìn)行輸入框合法檢查和用戶登錄響應(yīng),實(shí)現(xiàn)代碼如程序清單7-1所示。程序清單7-1: OnOK()函數(shù)代碼void CExam7_1Dlg:OnOK() / TODO: Add extra validation hereUpdateData(true);/更新控件值變量if(m_user.IsEmpty()/檢查用戶名不能為空AfxMessageBox(用戶名不能為空,請輸入); m_EditUser.SetFocus(); / 焦點(diǎn)返回用戶名輸入框else if(m_pwd.IsEmpty()/檢查密碼不能為空AfxMessageBox(密碼不能為空,請輸入); m_EditPwd.SetFocus();/ 焦點(diǎn)返回密碼輸入框else /檢查密碼長度必須為6位int len=m_EditPwd.LineLength();/取得密碼長度 if(len!=6)AfxMessageBox(密碼必須為6位,請重新輸入); m_EditPwd.SetFocus(); else /核對用戶名和密碼是否合法 for(int i=0;iResource插入一個(gè)新的對話框,在資源管理器中編輯對話框(1) 按圖7-9添加三個(gè)Radio Button控件,一個(gè)Edit Box控件,默認(rèn)系統(tǒng)設(shè)置的ID號。(2) 設(shè)置radio1按鈕選中Group屬性。(3) 設(shè)置三個(gè)Radio Button按鈕的Tab Order連續(xù)。3 雙擊新對話框,創(chuàng)建對話框類CRadioButtonDlg4 為控件在對話框類中創(chuàng)建成員變量(1) 為編輯框控件IDC_EDIT1創(chuàng)建值類型公有成員變量,CString類型變量m_edit。(2) 為單選按鈕成組控件IDC_RADIO1創(chuàng)建值類型公有成員變量,int類型變量m_radio。5 為對話框添加成員函數(shù),實(shí)現(xiàn)相應(yīng)功能(1) 使用ClassWizard為三個(gè)單選按鈕在CRadioButtonDlg類中映射BN_CLICKED消息處理函數(shù),分別為OnRadio1(),OnRadio2(),OnRadio3()。(2) 為三個(gè)按鈕消息處理函數(shù)添加代碼,實(shí)現(xiàn)當(dāng)單擊該按鈕時(shí),在編輯框中輸出提示信息。程序代碼如程序清單7-5所示。程序清單7-5: 單選按鈕按鍵消息處理函數(shù)void CRadioButtonDlg:OnRadio1() / TODO: Add your control notification handler code here m_edit=radio1 has been selected ; m_radio=0; UpdateData(false);void CRadioButtonDlg:OnRadio2() / TODO: Add your control notification handler code herem_edit=radio2 has been selected ;m_radio=1;UpdateData(false);void CRadioButtonDlg:OnRadio3() / TODO: Add your control notification handler code here m_edit=radio3 has been selected ;m_radio=2;UpdateData(false);6 文檔類創(chuàng)建變量并初始化(1) 在文檔類CExam7_3Doc創(chuàng)建int型公有成員變量m_radsel,用于接收對話框傳回的單選按鈕的選擇序號。(2) 在文檔類的構(gòu)造函數(shù)中為m_radsel賦初值為0。7 調(diào)用對話框(1) 在“查看”菜單下添加菜單項(xiàng)“單選按鈕”,菜單項(xiàng)ID為ID_VIEW_RADIOBUTTON。(2) 使用ClassWizard為菜單項(xiàng)ID_VIEW_RADIOBUTTON在文檔類CExam7_3Doc中映射WM_COMMAND消息處理函數(shù),得到OnViewRadiobutton()函數(shù)。(3) 在文檔類CExam7_3Doc的實(shí)現(xiàn)文件(.cpp)中添加:#include“RadioButtonDlg.h”預(yù)編譯語句。(4) 在OnViewRadiobutton()添加代碼,調(diào)用RadioButton對話框,實(shí)現(xiàn)代碼如程序清單7-6所示。程序清單7-6:調(diào)用RadioButton對話框void CExam7_3Doc:OnViewRadiobutton() / TODO: Add your command handler code hereCRadioButtonDlg dlg;dlg.m_radio=m_radsel;/初始化對話框成員變量 if(dlg.DoModal()=IDOK) /調(diào)用對話框 m_radsel=dlg.m_radio; /取得對話框中選擇單選按鈕的序號 UpdateAllViews(NULL); /更新視圖 8 修改OnDraw()函數(shù),在視圖中輸出單選按鈕的選擇狀態(tài)。實(shí)現(xiàn)代碼如程序清單7-7所示程序清單7-7:視圖輸出的OnDraw()函數(shù) void CExam7_3View:OnDraw(CDC* pDC)CExam7_3Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCString radstr;radstr.Format( 選擇了第%d個(gè)按鈕,pDoc-m_radsel +1); pDC-TextOut (0,0,radstr);9 編譯運(yùn)行應(yīng)用程序。執(zhí)行菜單命令“查看-單選按鈕”,彈出RadioButton對話框。運(yùn)行如圖7-10所示(1) 選擇不同的單選按鈕,觀察編輯框的顯示。(2) 關(guān)閉對話框,觀察視圖的輸出。(3) 再次打開對話框,觀察控件的初始狀態(tài)。圖7-10 Exam7_3的運(yùn)行效果圖7.4.4復(fù)選按鈕復(fù)選按鈕與單選按鈕一樣,是Windows提供的又一種形式的按鈕。使用復(fù)選按鈕,從一組選項(xiàng)中選擇一個(gè)選項(xiàng)或多個(gè)選項(xiàng),各個(gè)選項(xiàng)之間的選中狀態(tài)互不相關(guān)。使用ClassWizard可以為每一個(gè)復(fù)選框按鈕在它所在的對話框類中添加一個(gè)值類型的成員變量用于傳遞數(shù)據(jù),該變量的值是BOOL型,值為true時(shí)表示選中復(fù)選框,值為false時(shí)表示不選中復(fù)選框。 MFC同樣支持Win32 API函數(shù)對復(fù)選框的操作,函數(shù)CheckDlgButton ()設(shè)置一個(gè)復(fù)選框的選中狀態(tài),函數(shù)原型為:CDialog:CheckDlgButton(int nIDButton,UNIT nCheck);該函數(shù)包括二個(gè)參數(shù),第一個(gè)參數(shù)是復(fù)選框按鈕的ID,第二參數(shù)設(shè)置按鈕的選中狀態(tài),值為BST_CHECKED或1時(shí)表示選中,值為BST_UNCHECKED或0時(shí)表示按鈕不選中?!纠?-4】通過一個(gè)簡單CheckBox對話框,來說明如何使用復(fù)選框。對話框中,增加三個(gè)復(fù)選框和一個(gè)編輯框,當(dāng)用戶選中了一個(gè)或幾個(gè)復(fù)選框時(shí),在編輯框中報(bào)告用戶所選中的復(fù)選框。CheckBox對話框的一個(gè)運(yùn)行結(jié)果如圖7-11所示。圖7-11 CheckBox對話框的一個(gè)運(yùn)行結(jié)果1 繼續(xù)在Exam7_3中添加一個(gè)新的對話框IDD_DIALOG2(1) 在資源管理器中編輯對話框。按圖7-11添加三個(gè)Check Box控件,一個(gè)Edit Box控件,默認(rèn)系統(tǒng)設(shè)置的ID號。(2) 雙擊新對話框,創(chuàng)建對話框類CCheckBoxDlg。2 為控件在對話框類中創(chuàng)建成員變量(1) 為編輯框控件IDC_EDIT1創(chuàng)建值類型公有成員變量,CString類型變量m_edit。(2) 為三個(gè)復(fù)選框控件創(chuàng)建值類型公有成員變量,BOOL類型變量m_check1,m_check2和m_check3。3 為對話框添加成員函數(shù),實(shí)現(xiàn)功能(1) 使用ClassWizard為三個(gè)復(fù)選框按鈕在CCheckBoxDlg類中映射BN_CLICKED消息處理函數(shù),得到函數(shù)OnCheck1(),OnCheck2(),OnCheck3()。(2) 在工作區(qū)的ClassView標(biāo)簽中,右鍵單擊CCheckBoxDlg類執(zhí)行菜單命令A(yù)dd Member Function,增加一個(gè)私有類型的成員函數(shù)CheckState(),無返回值無參數(shù),作用是檢查復(fù)選框的選中狀態(tài),在編輯框中輸出信息。實(shí)現(xiàn)代碼如程序清單7-8所示:程序清單7-8: CheckState函數(shù)實(shí)現(xiàn)代碼 void CCheckBoxDlg:CheckState()m_edit=None of checkbox has been selected;if(m_check1) m_edit=Check1 has been selected;if(m_check2) m_edit=Check2 has been selected;if(m_check3) m_edit=Check3 has been selected;if(m_check1&m_check2)m_edit=Check1 and Check2 have been selected;if(m_check1&m_check3)m_edit=Check1 and Check3 have been selected;if(m_check2&m_check3)m_edit=Check2 and Check3 have been selected;if(m_check

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論