對(duì)話框和標(biāo)準(zhǔn)控件_第1頁(yè)
對(duì)話框和標(biāo)準(zhǔn)控件_第2頁(yè)
對(duì)話框和標(biāo)準(zhǔn)控件_第3頁(yè)
對(duì)話框和標(biāo)準(zhǔn)控件_第4頁(yè)
對(duì)話框和標(biāo)準(zhǔn)控件_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四講 對(duì)話框和標(biāo)準(zhǔn)控件主講:呂駿對(duì)話框概述對(duì)話框概述n 對(duì)話框?qū)υ捒?Dialog Box)是是GUI(圖形用戶界面(圖形用戶界面Graphical User Interface)的常用組件,也是其最復(fù)雜的組件。)的常用組件,也是其最復(fù)雜的組件。n按照對(duì)話框工作方式可以分為兩種類型:模態(tài)對(duì)話框和非按照對(duì)話框工作方式可以分為兩種類型:模態(tài)對(duì)話框和非模態(tài)對(duì)話框。模態(tài)對(duì)話框。n模態(tài)對(duì)話框:在關(guān)閉模態(tài)對(duì)話框之前,該程序不能進(jìn)行其模態(tài)對(duì)話框:在關(guān)閉模態(tài)對(duì)話框之前,該程序不能進(jìn)行其他工作。我們通常所用的對(duì)話框大部分都是模態(tài)對(duì)話框。他工作。我們通常所用的對(duì)話框大部分都是模態(tài)對(duì)話框。如:如:“保存保存”對(duì)話

2、框;對(duì)話框;“打開(kāi)打開(kāi)”對(duì)話框。對(duì)話框。n非模態(tài)對(duì)話框:非模態(tài)對(duì)話框打開(kāi)后,該程序仍然能夠進(jìn)非模態(tài)對(duì)話框:非模態(tài)對(duì)話框打開(kāi)后,該程序仍然能夠進(jìn)行其他工作。如:行其他工作。如:“查找與替換查找與替換”對(duì)話框。對(duì)話框。 n當(dāng)模態(tài)對(duì)話框被打開(kāi)之后,它就接管了父窗口的輸入控制當(dāng)模態(tài)對(duì)話框被打開(kāi)之后,它就接管了父窗口的輸入控制權(quán),只有當(dāng)用戶關(guān)閉了該對(duì)話框之后,控制權(quán)才交給父窗權(quán),只有當(dāng)用戶關(guān)閉了該對(duì)話框之后,控制權(quán)才交給父窗口。而非模態(tài)對(duì)話框則與父窗口共享控制權(quán),用戶可以在口。而非模態(tài)對(duì)話框則與父窗口共享控制權(quán),用戶可以在主窗口和對(duì)話框之間來(lái)回切換主窗口和對(duì)話框之間來(lái)回切換MFCMFC的對(duì)話框基類為的對(duì)

3、話框基類為CDialogCDialog,它既支持模態(tài)對(duì)話框,也支,它既支持模態(tài)對(duì)話框,也支持非模態(tài)對(duì)話框。派生關(guān)系如下所示持非模態(tài)對(duì)話框。派生關(guān)系如下所示: :CObjectCCmdTargetCWndCDialogCDialogCDialog的主要的成員函數(shù)有:的主要的成員函數(shù)有:virtual int DoModal()virtual int DoModal()功能:打開(kāi)模態(tài)對(duì)話框,直到對(duì)話框關(guān)閉時(shí)返回。若點(diǎn)擊功能:打開(kāi)模態(tài)對(duì)話框,直到對(duì)話框關(guān)閉時(shí)返回。若點(diǎn)擊“OKOK”鍵關(guān)閉,則返回鍵關(guān)閉,則返回“IDOKIDOK”。 BOOL Create(LPCTSTR lpszTemplateNa

4、me,CWnd BOOL Create(LPCTSTR lpszTemplateName,CWnd * *pParentWnd = NULL)pParentWnd = NULL)功能:創(chuàng)建一個(gè)對(duì)話框。(通常用于非模態(tài)對(duì)話框的創(chuàng)建)功能:創(chuàng)建一個(gè)對(duì)話框。(通常用于非模態(tài)對(duì)話框的創(chuàng)建)void EndDialog(int nResult)void EndDialog(int nResult)功能:退出一個(gè)模態(tài)對(duì)話框功能:退出一個(gè)模態(tài)對(duì)話框virtual void OnCancel()virtual void OnCancel()功能:該函數(shù)是單擊模態(tài)或非模態(tài)對(duì)話框中的功能:該函數(shù)是單擊模態(tài)或非模態(tài)

5、對(duì)話框中的CancelCancel按按鈕,或鈕,或EscEsc鍵時(shí),由框架調(diào)用。鍵時(shí),由框架調(diào)用。virtual BOOL OnInitDialog()virtual BOOL OnInitDialog()功能:對(duì)話框初始化功能:對(duì)話框初始化 virtual void OnOK() virtual void OnOK()功能:?jiǎn)螕艄δ埽簡(jiǎn)螕鬙KOK(或確定)按鈕,(或確定)按鈕,(IDID為為IDOKIDOK的按鈕)時(shí)的按鈕)時(shí)調(diào)用的函數(shù),關(guān)閉模態(tài)對(duì)話框,并返回調(diào)用的函數(shù),關(guān)閉模態(tài)對(duì)話框,并返回IDOKIDOK。函數(shù)函數(shù)OnOK()、 OnCancel()與與DoModal()的關(guān)系:的關(guān)系:

6、 對(duì)話框中一般都有對(duì)話框中一般都有OK和和Cancel按鈕,單擊按鈕,單擊OK按鈕時(shí)按鈕時(shí)調(diào)用調(diào)用CDialog:OnOK()函數(shù),單擊函數(shù),單擊Cancel按鈕時(shí)調(diào)用按鈕時(shí)調(diào)用CDialog:OnCancel()函數(shù)。函數(shù)。OnOK()函數(shù)和函數(shù)和OnCancal()函數(shù)都將結(jié)束函數(shù)都將結(jié)束DoModal()函數(shù)調(diào)用,但令函數(shù)調(diào)用,但令DoModal()返回返回不同的值。不同的值。OnOK()函數(shù)令函數(shù)令DoModal()返回返回IDOK,OnCancel()函數(shù)令函數(shù)令DoModal()返回返回IDCANCAL。用戶可用戶可以根據(jù)以根據(jù)DoModal()的返回值做出不同的選擇。如:的返回值

7、做出不同的選擇。如: if (myDlg.DoModal() = = IDOK ) 創(chuàng)建對(duì)話框創(chuàng)建對(duì)話框 在在Windows中對(duì)話框是作為一種資源被使用,在程中對(duì)話框是作為一種資源被使用,在程序中要?jiǎng)?chuàng)建一個(gè)對(duì)話框,首先要?jiǎng)?chuàng)建一個(gè)對(duì)話框模板資源,序中要?jiǎng)?chuàng)建一個(gè)對(duì)話框,首先要?jiǎng)?chuàng)建一個(gè)對(duì)話框模板資源,然后創(chuàng)建一個(gè)基于該對(duì)話框模板資源的對(duì)話框類。對(duì)話框模然后創(chuàng)建一個(gè)基于該對(duì)話框模板資源的對(duì)話框類。對(duì)話框模板資源指定了對(duì)話框本身的屬性(如大小、位置、風(fēng)格、類板資源指定了對(duì)話框本身的屬性(如大小、位置、風(fēng)格、類型等)和對(duì)話框中的控件及屬性,而對(duì)話框類規(guī)定了對(duì)話框型等)和對(duì)話框中的控件及屬性,而對(duì)話框類規(guī)定

8、了對(duì)話框和對(duì)話框中每個(gè)控件的行為。通過(guò)對(duì)話框模板資源才能創(chuàng)建和對(duì)話框中每個(gè)控件的行為。通過(guò)對(duì)話框模板資源才能創(chuàng)建對(duì)話框類和對(duì)象。對(duì)話框類和對(duì)象。1.1.模態(tài)對(duì)話框的創(chuàng)建和引用過(guò)程模態(tài)對(duì)話框的創(chuàng)建和引用過(guò)程基本步驟:基本步驟: 添加對(duì)話框資源,設(shè)置其屬性。添加對(duì)話框資源,設(shè)置其屬性。IDD為標(biāo)識(shí)符Caption用于輸入標(biāo)題 為新建的對(duì)話框建立相應(yīng)的類。使對(duì)話框與具體的類為新建的對(duì)話框建立相應(yīng)的類。使對(duì)話框與具體的類相綁定。相綁定。 在主框架中定義對(duì)話框?qū)ο?,并調(diào)用在主框架中定義對(duì)話框?qū)ο?,并調(diào)用DoModalDoModal函數(shù)打開(kāi)函數(shù)打開(kāi)注意:在主框架類中需要添加注意:在主框架類中需要添加#in

9、clude #include “對(duì)話框類名對(duì)話框類名.h.h” 如:如:#include Dlg1.h CDlg1 d1; CDlg1 d1; d1.DoModal(); d1.DoModal();#include resource.h2. 2. 非模態(tài)對(duì)話框的創(chuàng)建和引用過(guò)程非模態(tài)對(duì)話框的創(chuàng)建和引用過(guò)程基本步驟:基本步驟: 在在Resource ViewResource View,DialogDialog中右鍵點(diǎn)擊,插入新對(duì)話框。中右鍵點(diǎn)擊,插入新對(duì)話框。 為新建的對(duì)話框建立相應(yīng)的類。使對(duì)話框與具體的類相綁定為新建的對(duì)話框建立相應(yīng)的類。使對(duì)話框與具體的類相綁定 在主對(duì)話框中定義對(duì)話框?qū)ο螅⒄{(diào)

10、用在主對(duì)話框中定義對(duì)話框?qū)ο?,并調(diào)用CreateCreate函數(shù)打開(kāi)。并通函數(shù)打開(kāi)。并通過(guò)過(guò)ShowWindowShowWindow函數(shù)顯示。函數(shù)顯示。注意:注意:定義類的對(duì)象必須定義為指針類型。定義類的對(duì)象必須定義為指針類型。 利用利用DestroyWindowDestroyWindow函數(shù)關(guān)閉非模態(tài)對(duì)話框。函數(shù)關(guān)閉非模態(tài)對(duì)話框。注意:注意:OnOkOnOk或或OnCancelOnCancel函數(shù)僅為隱藏非模態(tài)對(duì)話框,而函數(shù)僅為隱藏非模態(tài)對(duì)話框,而DestroyWindowDestroyWindow可以關(guān)閉非模態(tài)對(duì)話框??梢躁P(guān)閉非模態(tài)對(duì)話框。例如:例如:#include NewDlg.h#i

11、nclude NewDlg.hCNewDlg CNewDlg * *pDlg=new CNewDlg;pDlg=new CNewDlg;pDlg-Create(IDD_DIALOG1,this);pDlg-Create(IDD_DIALOG1,this);pDlg-ShowWindow(SW_SHOW);pDlg-ShowWindow(SW_SHOW); 14模式和無(wú)模式對(duì)話框模式和無(wú)模式對(duì)話框上述兩種對(duì)話框的不同之處:上述兩種對(duì)話框的不同之處: (創(chuàng)建和退出創(chuàng)建和退出)u創(chuàng)建時(shí),創(chuàng)建時(shí),模式對(duì)話框模式對(duì)話框由系統(tǒng)自動(dòng)分配內(nèi)存空間,而由系統(tǒng)自動(dòng)分配內(nèi)存空間,而無(wú)模式無(wú)模式對(duì)話框?qū)υ捒蛐枰脩魜?lái)

12、指定內(nèi)存。需要用戶來(lái)指定內(nèi)存。u退出時(shí),兩種對(duì)話框所使用的終止函數(shù)不一樣。退出時(shí),兩種對(duì)話框所使用的終止函數(shù)不一樣。模式對(duì)話模式對(duì)話框框通過(guò)調(diào)用通過(guò)調(diào)用CDialog: EndDialog來(lái)終止;而來(lái)終止;而無(wú)模式對(duì)無(wú)模式對(duì)話框話框則是調(diào)用則是調(diào)用CWnd:DestroyWindow來(lái)終止。來(lái)終止?;趯?duì)話框的應(yīng)用程序基于對(duì)話框的應(yīng)用程序n利用利用MFC AppWizardMFC AppWizard向?qū)?chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,向?qū)?chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,這種程序運(yùn)行后首先出現(xiàn)一個(gè)對(duì)話框。在向?qū)У牡谝徊竭x這種程序運(yùn)行后首先出現(xiàn)一個(gè)對(duì)話框。在向?qū)У牡谝徊竭x擇擇Dialog BasedD

13、ialog Based項(xiàng)。因?yàn)閷?duì)話框應(yīng)用程序一般不包含文檔項(xiàng)。因?yàn)閷?duì)話框應(yīng)用程序一般不包含文檔,故不支持?jǐn)?shù)據(jù)庫(kù)和復(fù)合文檔。,故不支持?jǐn)?shù)據(jù)庫(kù)和復(fù)合文檔。n按照對(duì)話框應(yīng)用程序向?qū)崾镜牟襟E進(jìn)行操作就得到一個(gè)按照對(duì)話框應(yīng)用程序向?qū)崾镜牟襟E進(jìn)行操作就得到一個(gè)對(duì)話框應(yīng)用程序項(xiàng)目,出現(xiàn)對(duì)話框編輯器和控件工具欄浮對(duì)話框應(yīng)用程序項(xiàng)目,出現(xiàn)對(duì)話框編輯器和控件工具欄浮動(dòng)窗口,。利用向?qū)?chuàng)建應(yīng)用程序的框架后,程序員可根動(dòng)窗口,。利用向?qū)?chuàng)建應(yīng)用程序的框架后,程序員可根據(jù)程序具體功能要求添加代碼。據(jù)程序具體功能要求添加代碼。使用對(duì)話框使用對(duì)話框 為了在屏幕上顯示對(duì)話框:為了在屏幕上顯示對(duì)話框: (1 1)首先需要建

14、立對(duì)話框資源及其與資源相關(guān)的對(duì))首先需要建立對(duì)話框資源及其與資源相關(guān)的對(duì)話框類;話框類; (2 2)然后添加控件、與控件關(guān)聯(lián)的成員變量和消息)然后添加控件、與控件關(guān)聯(lián)的成員變量和消息處理函數(shù);處理函數(shù); (3 3)最后在程序中顯示對(duì)話框并訪問(wèn)與控件關(guān)聯(lián)的)最后在程序中顯示對(duì)話框并訪問(wèn)與控件關(guān)聯(lián)的成員變量。成員變量。 控件控件(Control)(Control)是能夠完成輸入是能夠完成輸入/ /輸出等特定功能的一種特殊輸出等特定功能的一種特殊窗口。系統(tǒng)定義的標(biāo)準(zhǔn)控件所對(duì)應(yīng)的類一般是由窗口。系統(tǒng)定義的標(biāo)準(zhǔn)控件所對(duì)應(yīng)的類一般是由CWndCWnd派生的。派生的。在對(duì)話框中創(chuàng)建和使用控件在對(duì)話框中創(chuàng)建和

15、使用控件 控件的創(chuàng)建和使用控件的創(chuàng)建和使用控件的選擇控件的選擇按鈕按鈕組合框組合框復(fù)選框復(fù)選框編輯框編輯框分組框分組框列表框列表框單選按鈕單選按鈕靜態(tài)文本靜態(tài)文本圖片圖片水平滾動(dòng)條水平滾動(dòng)條垂直滾動(dòng)條垂直滾動(dòng)條滾動(dòng)條滾動(dòng)條旋轉(zhuǎn)按鈕旋轉(zhuǎn)按鈕進(jìn)度條進(jìn)度條熱鍵熱鍵列表視圖列表視圖樹(shù)形視圖樹(shù)形視圖標(biāo)簽標(biāo)簽動(dòng)畫(huà)動(dòng)畫(huà)組合編輯組合編輯日期選擇日期選擇日歷日歷IPIP地址地址組合框的擴(kuò)展組合框的擴(kuò)展用戶定制工具用戶定制工具 Windows常用控件常用控件19在對(duì)話框編輯器中添加和編輯控件在對(duì)話框編輯器中添加和編輯控件n(1) 控件添加的方法控件添加的方法u在控件工具欄中單擊某控件,鼠標(biāo)箭頭在對(duì)話框內(nèi)變?cè)诳丶?/p>

16、具欄中單擊某控件,鼠標(biāo)箭頭在對(duì)話框內(nèi)變成成“十十”字形狀;在對(duì)話框指定位置單擊鼠標(biāo)左鍵,字形狀;在對(duì)話框指定位置單擊鼠標(biāo)左鍵,再拖動(dòng)選擇框可改變控件的大小和位置。再拖動(dòng)選擇框可改變控件的大小和位置。u在控件工具欄中單擊某控件,鼠標(biāo)箭頭在對(duì)話框內(nèi)變?cè)诳丶ぞ邫谥袉螕裟晨丶?,鼠?biāo)箭頭在對(duì)話框內(nèi)變成成“十十”字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,字形狀;在指定位置處單擊鼠標(biāo)左鍵不放,拖動(dòng)鼠標(biāo)至滿意位置,釋放鼠標(biāo)鍵。拖動(dòng)鼠標(biāo)至滿意位置,釋放鼠標(biāo)鍵。20在對(duì)話框編輯器中添加和編輯控件在對(duì)話框編輯器中添加和編輯控件n (2) 單個(gè)控件的選取單個(gè)控件的選取n鼠標(biāo)選?。罕WC選擇按鈕鼠標(biāo)選?。罕WC選擇按鈕( )

17、是被選中的,移動(dòng)鼠標(biāo)指是被選中的,移動(dòng)鼠標(biāo)指針至指定的控件上,單擊鼠標(biāo)左鍵。針至指定的控件上,單擊鼠標(biāo)左鍵。n一旦某個(gè)控件被選取后,其四周由選擇框包圍著,選擇一旦某個(gè)控件被選取后,其四周由選擇框包圍著,選擇框上還有幾個(gè)框上還有幾個(gè)(通常是八個(gè)通常是八個(gè))藍(lán)色實(shí)心小方塊,拖動(dòng)它可藍(lán)色實(shí)心小方塊,拖動(dòng)它可改變控件的大小。改變控件的大小。21在對(duì)話框編輯器中添加和編輯控件在對(duì)話框編輯器中添加和編輯控件n (3) 多個(gè)控件的選取多個(gè)控件的選取 u在對(duì)話框內(nèi)按住鼠標(biāo)左鍵不放,拖出一個(gè)大的虛框,釋在對(duì)話框內(nèi)按住鼠標(biāo)左鍵不放,拖出一個(gè)大的虛框,釋放鼠標(biāo),則被該虛框所包圍的控件都將被選取。放鼠標(biāo),則被該虛框所

18、包圍的控件都將被選取。u先按住先按住Shift鍵不放,用鼠標(biāo)選取控件,直到所需要的多鍵不放,用鼠標(biāo)選取控件,直到所需要的多個(gè)控件選取之后再釋放個(gè)控件選取之后再釋放Shift鍵。若在選取時(shí),對(duì)已選取鍵。若在選取時(shí),對(duì)已選取的控件再選取一下,則該控件取消選取。的控件再選取一下,則該控件取消選取。u多個(gè)控件被選取后,其中只有一個(gè)控件的選擇框有幾個(gè)多個(gè)控件被選取后,其中只有一個(gè)控件的選擇框有幾個(gè)藍(lán)色實(shí)心小方塊,這個(gè)控件稱為主要控件,而其他控件藍(lán)色實(shí)心小方塊,這個(gè)控件稱為主要控件,而其他控件的選擇框的小方塊是空心的。的選擇框的小方塊是空心的。22在對(duì)話框編輯器中添加和編輯控件在對(duì)話框編輯器中添加和編輯控

19、件n (4) 控件的移動(dòng)、刪除和復(fù)制控件的移動(dòng)、刪除和復(fù)制u當(dāng)單個(gè)控件或多個(gè)控件被選取后,按方向鍵或用鼠標(biāo)當(dāng)單個(gè)控件或多個(gè)控件被選取后,按方向鍵或用鼠標(biāo)拖動(dòng)控件的選擇框可移動(dòng)控件。拖動(dòng)控件的選擇框可移動(dòng)控件。u選中某個(gè)控件之后,使用快捷鍵選中某個(gè)控件之后,使用快捷鍵Ctrl+C鍵復(fù)制該控件鍵復(fù)制該控件。u若按若按Del鍵可將選取的控件刪除。鍵可將選取的控件刪除。 23在對(duì)話框編輯器中添加和編輯控件在對(duì)話框編輯器中添加和編輯控件n (5) 設(shè)定控件的設(shè)定控件的Tab鍵次序鍵次序n對(duì)話框內(nèi)控件的對(duì)話框內(nèi)控件的Tab鍵次序設(shè)定步驟如下:鍵次序設(shè)定步驟如下:u首先,選擇首先,選擇“Layout”“Ta

20、b Order”命令,或按快捷鍵命令,或按快捷鍵Ctrl+D,此時(shí)每個(gè)控件的左上方都有一個(gè)數(shù)字,表明了,此時(shí)每個(gè)控件的左上方都有一個(gè)數(shù)字,表明了當(dāng)前當(dāng)前Tab鍵次序,如圖鍵次序,如圖5.4所示。所示。u其次,按新的次序依次用鼠標(biāo)單擊各個(gè)控件,新的其次,按新的次序依次用鼠標(biāo)單擊各個(gè)控件,新的Tab鍵即可生成。鍵即可生成。u最后,單擊對(duì)話框或按最后,單擊對(duì)話框或按Enter鍵結(jié)束鍵結(jié)束Tab Order的設(shè)置。的設(shè)置。圖5.4 控件的Tab鍵次序24對(duì)話框內(nèi)控件的布局對(duì)話框內(nèi)控件的布局 圖5.6 Layout菜單命令項(xiàng) 靠齊上邊 左右間隔相等 大小相同靠 齊 左 邊上 下 居 中寬度相同 顯示標(biāo)尺

21、 靠齊右邊 左右居中 高度相同測(cè)試對(duì)話框 靠齊下邊 上下間隔相等顯示網(wǎng)格圖5.5 控件布局工具欄25給對(duì)話框添加完控件之后,還可以給對(duì)話框添加完控件之后,還可以修改對(duì)話框的屬性修改對(duì)話框的屬性,方法如下:方法如下:u選擇選擇“View”菜單菜單“Properties”命令或在對(duì)話框模板上命令或在對(duì)話框模板上點(diǎn)擊鼠標(biāo)右鍵,選取點(diǎn)擊鼠標(biāo)右鍵,選取Properties命令。命令。u如圖,如圖,General是對(duì)話框?qū)傩缘哪J(rèn)顯示頁(yè)面,其中列有對(duì)是對(duì)話框?qū)傩缘哪J(rèn)顯示頁(yè)面,其中列有對(duì)話框的標(biāo)識(shí)符名稱框、標(biāo)題框等,具體說(shuō)明如表。話框的標(biāo)識(shí)符名稱框、標(biāo)題框等,具體說(shuō)明如表。圖5.9 屬性對(duì)話框常用的用于控

22、件的函數(shù):常用的用于控件的函數(shù): GetDlgItem()GetDlgItem()函數(shù):該函數(shù)根據(jù)參數(shù)說(shuō)明的控件函數(shù):該函數(shù)根據(jù)參數(shù)說(shuō)明的控件IDID,返回指,返回指定控件的一個(gè)定控件的一個(gè)CWndCWnd型指針。程序可以把該指針強(qiáng)制轉(zhuǎn)換成相型指針。程序可以把該指針強(qiáng)制轉(zhuǎn)換成相應(yīng)的控件類指針,然后通過(guò)該指針來(lái)訪問(wèn)控件。應(yīng)的控件類指針,然后通過(guò)該指針來(lái)訪問(wèn)控件。 SetFocus()SetFocus()函數(shù):設(shè)置當(dāng)前輸入焦點(diǎn)。函數(shù):設(shè)置當(dāng)前輸入焦點(diǎn)。1.1.GetFocus()GetFocus()函數(shù)函數(shù): :獲取當(dāng)前擁有輸入焦點(diǎn)的獲取當(dāng)前擁有輸入焦點(diǎn)的CWndCWnd對(duì)象。對(duì)象。 靜態(tài)控件靜態(tài)

23、控件(Static Control)(Static Control)是用來(lái)顯示一個(gè)文本串或圖是用來(lái)顯示一個(gè)文本串或圖形信息的控件,包括靜態(tài)文本控件形信息的控件,包括靜態(tài)文本控件(Static Text)(Static Text)、圖片控件、圖片控件(Picture Control)(Picture Control)和組框和組框(Group Box)(Group Box)。 所有靜態(tài)控件默認(rèn)的所有靜態(tài)控件默認(rèn)的IDID標(biāo)識(shí)都為標(biāo)識(shí)都為IDC_STATICIDC_STATIC,如果需要在,如果需要在程序中區(qū)分和操縱各個(gè)不同的靜態(tài)控件,必須重新為它指定一程序中區(qū)分和操縱各個(gè)不同的靜態(tài)控件,必須重新為

24、它指定一個(gè)惟一的個(gè)惟一的IDID標(biāo)識(shí)。標(biāo)識(shí)。 常用控件常用控件CStatic類控件類控件1. Static Text1. Static Text 靜態(tài)文本控件不要求與對(duì)話框進(jìn)行交互,靜態(tài)文本控件不要求與對(duì)話框進(jìn)行交互,需要顯示的文本串只要在該控件屬性對(duì)話框需要顯示的文本串只要在該控件屬性對(duì)話框的的CaptionCaption屬性中直接輸入。屬性中直接輸入。修改Caption值 2. Group Box2. Group Box(補(bǔ)充)(補(bǔ)充)將同組信息圍成一組。將同組信息圍成一組。 MFCMFC的的CEditCEdit類封裝了編輯框類封裝了編輯框(Edit Box)(Edit Box),編輯框又

25、稱文,編輯框又稱文本框或編輯控件,也是一種常用的控件。編輯框一般與靜態(tài)文本框或編輯控件,也是一種常用的控件。編輯框一般與靜態(tài)文本控件一起使用,用于數(shù)據(jù)的輸入和輸出。本控件一起使用,用于數(shù)據(jù)的輸入和輸出。 常用控件常用控件CEdit類控件類控件編輯框?qū)傩裕壕庉嬁驅(qū)傩裕?自動(dòng)水平滾動(dòng)自動(dòng)水平滾動(dòng)左對(duì)齊左對(duì)齊僅允許輸入數(shù)字僅允許輸入數(shù)字密碼密碼只讀只讀多行顯示多行顯示若選擇若選擇“多行顯多行顯示示”屬性為屬性為T(mén)rueTrue,則必須將則必須將Auto Auto HScrollHScroll屬性由屬性由TrueTrue改為改為False!False!編輯框的基本操作編輯框的基本操作 利用利用MFCM

26、FC的的CEditCEdit類提供的成員函數(shù)可以實(shí)現(xiàn)編輯框的各類提供的成員函數(shù)可以實(shí)現(xiàn)編輯框的各種操作。編輯控件的默認(rèn)模式是在一行內(nèi)顯示所有編輯文本。種操作。編輯控件的默認(rèn)模式是在一行內(nèi)顯示所有編輯文本。下表介紹了通用下表介紹了通用CEditCEdit類的方法。類的方法。編輯框的通知消息編輯框的通知消息 35n對(duì)話框的對(duì)話框的主要功能是輸出和輸入數(shù)據(jù)主要功能是輸出和輸入數(shù)據(jù),這個(gè)任務(wù)是通,這個(gè)任務(wù)是通過(guò)控件完成的。為此,要過(guò)控件完成的。為此,要為這些控件定義一個(gè)對(duì)應(yīng)的為這些控件定義一個(gè)對(duì)應(yīng)的成員變量成員變量。n與控件對(duì)應(yīng)的與控件對(duì)應(yīng)的成員變量既可以是一個(gè)數(shù)據(jù),也可以是成員變量既可以是一個(gè)數(shù)據(jù),

27、也可以是一個(gè)控件對(duì)象一個(gè)控件對(duì)象。n利用利用ClassWizard可以很方便地為對(duì)話框類添加數(shù)據(jù)可以很方便地為對(duì)話框類添加數(shù)據(jù)成員成員,在彈出的對(duì)話框中選擇,在彈出的對(duì)話框中選擇“member variables”,即可增加對(duì)應(yīng)的成員變量。即可增加對(duì)應(yīng)的成員變量??丶某蓡T變量:控件的成員變量:右鍵點(diǎn)擊控件右鍵點(diǎn)擊控件-Add variable-Add variable控件的成員變量:控件的成員變量:創(chuàng)建的成員變量分為值類型和控件類型。創(chuàng)建的成員變量分為值類型和控件類型。類型描述Value值類型成員變量,用于控件值控制,由所連接的控件類型決定。例如可以有Cstring,int,Float,bo

28、ol等。Control控件類型的成員變量,實(shí)質(zhì)是控件類的一個(gè)對(duì)象??梢酝ㄟ^(guò)建立一個(gè)Control的成員變量調(diào)用該類的相關(guān)成員函數(shù)。 對(duì)話框數(shù)據(jù)交換對(duì)話框數(shù)據(jù)交換DDXDDX和驗(yàn)證和驗(yàn)證DDVDDVn利用對(duì)話框數(shù)據(jù)交換利用對(duì)話框數(shù)據(jù)交換DDXDDX(Dialog Data ExchangeDialog Data Exchange)和驗(yàn)證和驗(yàn)證DDVDDV(Dialog Data ValidationDialog Data Validation)機(jī)制實(shí)機(jī)制實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出?,F(xiàn)數(shù)據(jù)的輸入和輸出。n當(dāng)利用當(dāng)利用ClassWizardClassWizard類向?qū)砑映蓡T變量時(shí),用戶類向?qū)砑映蓡T變量

29、時(shí),用戶如果在窗口的左下角輸入數(shù)據(jù)的范圍,如果在窗口的左下角輸入數(shù)據(jù)的范圍,ClassWizardClassWizard將自動(dòng)加入函數(shù)將自動(dòng)加入函數(shù)DDVDDV的調(diào)用代碼。的調(diào)用代碼。nDDXDDX技術(shù)的實(shí)質(zhì)就是為控件建立一數(shù)據(jù)映射,技術(shù)的實(shí)質(zhì)就是為控件建立一數(shù)據(jù)映射,DDXDDX接收接收CDataExchangeCDataExchange類(該類提供上下文信息,它沒(méi)有基類(該類提供上下文信息,它沒(méi)有基類)中的信息,并將數(shù)據(jù)在指定控件和數(shù)據(jù)變量或類)中的信息,并將數(shù)據(jù)在指定控件和數(shù)據(jù)變量或CStringCString對(duì)象之間傳遞。對(duì)象之間傳遞。n DDVDDV技術(shù)的實(shí)質(zhì)是驗(yàn)證數(shù)據(jù)的有效性,它主

30、要驗(yàn)證技術(shù)的實(shí)質(zhì)是驗(yàn)證數(shù)據(jù)的有效性,它主要驗(yàn)證數(shù)據(jù)是否在給定的最大值和最小值之間。一旦數(shù)據(jù)超數(shù)據(jù)是否在給定的最大值和最小值之間。一旦數(shù)據(jù)超出了有效范圍,出了有效范圍,DDVDDV函數(shù)將顯示一消息框,并在消息函數(shù)將顯示一消息框,并在消息框中給用戶提示合理的輸入范圍??蛑薪o用戶提示合理的輸入范圍。n DDXDDX和和DDVDDV的關(guān)鍵技術(shù)是的關(guān)鍵技術(shù)是DDXDDX全局函數(shù)和全局函數(shù)和DDVDDV全局函數(shù)全局函數(shù)(通常(通常DDVDDV函數(shù)要與函數(shù)要與DDXDDX函數(shù)成對(duì)出現(xiàn))。函數(shù)成對(duì)出現(xiàn))。 例如,當(dāng)添加一個(gè)例如,當(dāng)添加一個(gè)INTINT型的成員變量型的成員變量m_Num1m_Num1時(shí)指定它的最

31、小時(shí)指定它的最小值和最大值分別為值和最大值分別為0 0和和100100,則,則ClassWizardClassWizard類向?qū)⒃诔蓡T類向?qū)⒃诔蓡T函數(shù)函數(shù)DoDataExchange()DoDataExchange()中添加以下中添加以下DDVDDV函數(shù)的調(diào)用語(yǔ)句:函數(shù)的調(diào)用語(yǔ)句:DDV_MinMaxUInt(pDX, m_Num1, 0, 100);DDV_MinMaxUInt(pDX, m_Num1, 0, 100); 程序運(yùn)行后,如果用戶的輸入數(shù)據(jù)超出程序運(yùn)行后,如果用戶的輸入數(shù)據(jù)超出01000100的范圍,的范圍,DDVDDV將顯示一個(gè)提示信息對(duì)話框?qū)@示一個(gè)提示信息對(duì)話框,提示用

32、戶有效的輸入范圍。提示用戶有效的輸入范圍。UpdateData()UpdateData()的用法:的用法: 當(dāng)調(diào)用當(dāng)調(diào)用UpdateData(TRUE)UpdateData(TRUE)時(shí),時(shí),MFCMFC通過(guò)調(diào)用通過(guò)調(diào)用DDXDDX函數(shù)函數(shù)將 數(shù) 據(jù) 從 控 件 傳 遞 到 關(guān) 聯(lián) 的 成 員 變 量 ; 當(dāng) 調(diào) 用將 數(shù) 據(jù) 從 控 件 傳 遞 到 關(guān) 聯(lián) 的 成 員 變 量 ; 當(dāng) 調(diào) 用UpdateData(FALSE)UpdateData(FALSE)時(shí),時(shí),MFCMFC通過(guò)調(diào)用通過(guò)調(diào)用DDXDDX函數(shù)將數(shù)據(jù)從成函數(shù)將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)的的控件。利用員變量傳遞到關(guān)聯(lián)的的控件。利用

33、UpdateData()UpdateData()函數(shù)實(shí)現(xiàn)函數(shù)實(shí)現(xiàn)了在刷新后重新獲取成員變量。了在刷新后重新獲取成員變量。CWnd:UpdateData成員函數(shù):成員函數(shù):用法用法1:UpdateData(TRUE);/ UpdateData();功能:將對(duì)話框中控件的數(shù)據(jù)傳送至相關(guān)聯(lián)的成功能:將對(duì)話框中控件的數(shù)據(jù)傳送至相關(guān)聯(lián)的成員變量。員變量。用法用法2:UpdateData(FALSE);功能:將對(duì)話框中控件相關(guān)聯(lián)的成員變量的值傳功能:將對(duì)話框中控件相關(guān)聯(lián)的成員變量的值傳送至控件。送至控件。43n比如:下圖中編輯框?qū)?yīng)的變量名為:比如:下圖中編輯框?qū)?yīng)的變量名為:nm_Num1、m_Num2

34、、m_Result。n計(jì)算兩個(gè)數(shù)的和并顯示出來(lái)。計(jì)算兩個(gè)數(shù)的和并顯示出來(lái)。 UpdateData(TRUE);m_Result = m_Num1 + m_Num2;UpdateData(FALSE);代碼字符串轉(zhuǎn)換程序字符串轉(zhuǎn)換程序 轉(zhuǎn)換規(guī)則為:大寫(xiě)字母轉(zhuǎn)換成小寫(xiě);轉(zhuǎn)換規(guī)則為:大寫(xiě)字母轉(zhuǎn)換成小寫(xiě); 將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě);將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě); 換行符和回車符不變;換行符和回車符不變; 其余字符轉(zhuǎn)換為其余字符轉(zhuǎn)換為“*” 要求:每輸入一個(gè)字符立即轉(zhuǎn)換要求:每輸入一個(gè)字符立即轉(zhuǎn)換 m_e1 (Control ) m_e2 (Control )選定: Multiline Vertical scrol

35、l Auto VScroll Want return選定: Multiline Vertical scroll Auto VScroll Read-only EN_CHANGE 消息處理函數(shù) void CTESTDlg:OnChangeEdit1() / TODO: Add your control notification handler code here TCHAR s80;m_e1.GetWindowText(s,80);for(int i=0;si!=0;i+)if (si=A & si=a & si=z)si=si+A-a;elseif (si=n | si=r)si=si;els

36、e si=*;m_e2.SetWindowText(s); 從從CWnd類繼承的成員函數(shù)類繼承的成員函數(shù)(1)將編輯框中的內(nèi)容復(fù)制出來(lái))將編輯框中的內(nèi)容復(fù)制出來(lái)/復(fù)制到復(fù)制到CString對(duì)象對(duì)象void GetWindowText( CString& rString ) const;示例:示例:CString ch; m_e.GetWindowText(ch);/復(fù)制到數(shù)組復(fù)制到數(shù)組int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;示例:示例:char ch80; m_e.GetWindowText(ch,80);(

37、2)設(shè)置編輯框中的內(nèi)容)設(shè)置編輯框中的內(nèi)容void SetWindowText( LPCTSTR lpszString );示例:示例:char ch20=abcdefg;m_e.SetWindowText(ch);CButtonCButton類控件包括按鍵按鈕、單選按鈕、復(fù)選框等類型類控件包括按鍵按鈕、單選按鈕、復(fù)選框等類型在被按下時(shí)會(huì)立在被按下時(shí)會(huì)立即執(zhí)行某個(gè)命令,即執(zhí)行某個(gè)命令,也被稱為命令按也被稱為命令按鈕鈕 用于在一組互相用于在一組互相排斥的選項(xiàng)中選排斥的選項(xiàng)中選擇其中一項(xiàng)擇其中一項(xiàng)用于在一組選項(xiàng)用于在一組選項(xiàng)中選擇其中一項(xiàng)中選擇其中一項(xiàng)或多項(xiàng)或多項(xiàng)使一組控件關(guān)聯(lián)使一組控件關(guān)聯(lián)起來(lái),

38、經(jīng)常與一起來(lái),經(jīng)常與一組單選按鈕或復(fù)組單選按鈕或復(fù)選框一起使用選框一起使用 常用控件常用控件CButton類控件類控件 是最常使用的控件之一,主要用于確定某項(xiàng)操作??梢酝ㄊ亲畛J褂玫目丶?,主要用于確定某項(xiàng)操作??梢酝ㄟ^(guò)過(guò)StyleStyle標(biāo)簽頁(yè)設(shè)置一些與控件風(fēng)格有關(guān)的屬性,不同的控件標(biāo)簽頁(yè)設(shè)置一些與控件風(fēng)格有關(guān)的屬性,不同的控件所設(shè)置的屬性不相同。所設(shè)置的屬性不相同。 通過(guò)雙擊按鍵或者通過(guò)通過(guò)雙擊按鍵或者通過(guò)“Control EventControl Event”添加響應(yīng)函數(shù)。添加響應(yīng)函數(shù)。 1. 1. 按鍵按鈕按鍵按鈕添加響應(yīng)函數(shù) 由一個(gè)圓圈和緊隨其后的文本標(biāo)題組成,當(dāng)它被選中時(shí),由一

39、個(gè)圓圈和緊隨其后的文本標(biāo)題組成,當(dāng)它被選中時(shí),圓圈中就標(biāo)上一個(gè)黑點(diǎn)。圓圈中就標(biāo)上一個(gè)黑點(diǎn)。 通常將一組單選按鈕放在一個(gè)組框控件中,在一組單選通常將一組單選按鈕放在一個(gè)組框控件中,在一組單選按鈕中,按鈕中,第一個(gè)第一個(gè)(Tab(Tab鍵順序鍵順序) )按鈕最重要,其按鈕最重要,其IDID值可用于在對(duì)值可用于在對(duì)話框中為控件建立關(guān)聯(lián)的成員變量。必須為同組中的第一個(gè)話框中為控件建立關(guān)聯(lián)的成員變量。必須為同組中的第一個(gè)單選按鈕設(shè)置單選按鈕設(shè)置GroupGroup屬性,而同組的其他單選按鈕不可再設(shè)置屬性,而同組的其他單選按鈕不可再設(shè)置GroupGroup屬性。屬性。 2 2單選按鈕單選按鈕( (補(bǔ)充補(bǔ)充

40、) ) 屬于同一組的單選按鈕擁有同樣的屬于同一組的單選按鈕擁有同樣的IDID值??梢詾槊拷M值??梢詾槊拷M單選按鈕設(shè)置值類型的成員變量,該成員變量為單選按鈕設(shè)置值類型的成員變量,該成員變量為intint型,表示型,表示所選按鈕在組中的序號(hào),序號(hào)從所選按鈕在組中的序號(hào),序號(hào)從0 0開(kāi)始。開(kāi)始。 例如:若選擇第例如:若選擇第1 1項(xiàng)則返回項(xiàng)則返回0 0,選擇第,選擇第3 3項(xiàng)則返回項(xiàng)則返回2 2,直,直至返回至返回n-1n-1。 對(duì)所示的單選框定義一個(gè)int變量m_Radio測(cè)試代碼如下:UpdateData(TRUE);CString str= _T(“ “);str.Format(_T(“選中第

41、 %d 個(gè)單選框“),m_Radio);AfxMessageBox(str);設(shè)定單選按鈕選中狀態(tài)設(shè)定單選按鈕選中狀態(tài)初始時(shí)使用初始時(shí)使用void CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton); nIDFirstButton:一組中第一個(gè)單選按鈕的:一組中第一個(gè)單選按鈕的ID nIDLastButton:一組中最后一個(gè)單選按鈕的:一組中最后一個(gè)單選按鈕的ID nIDCheckButton:初始時(shí)設(shè)置為選中狀態(tài)的單選按鈕:初始時(shí)設(shè)置為選中狀態(tài)的單選按鈕ID判定是否被選定判定是否被選定UINT

42、 IsDlgButtonChecked( int nIDButton ) const; 返回值:返回值:true:選定:選定 false:沒(méi)有選定:沒(méi)有選定m_e(CString) 初始化初始化BOOL CTESTDlg:OnInitDialog()CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);CheckRadioButton(IDC_RADIO3, IDC_RADIO5, IDC_RADIO3);消息處理函數(shù)消息處理函數(shù)UpdateData(TRUE);CString s;s=s+m_e;if(IsDlgButtonChecked(

43、IDC_RADIO1)s=s+ _T (男“);elses=s+ _T (女“);if(IsDlgButtonChecked(IDC_RADIO3)s=s+ _T (教授“);else if(IsDlgButtonChecked(IDC_RADIO4)s=s+ _T (副教授“);else s=s+ _T (講師“);AfxMessageBox(s); 由一個(gè)空心方框和緊隨其后的文本組成,當(dāng)它被選中時(shí),由一個(gè)空心方框和緊隨其后的文本組成,當(dāng)它被選中時(shí),空心方框中就加上一個(gè)空心方框中就加上一個(gè)“”或或“”標(biāo)記。不同于單選按鈕,標(biāo)記。不同于單選按鈕,在一組復(fù)選框中每次可以同時(shí)選擇多項(xiàng)。在一組復(fù)選框

44、中每次可以同時(shí)選擇多項(xiàng)。 復(fù)選框的值類型成員變量類型為復(fù)選框的值類型成員變量類型為BOOLBOOL型,若返回型,若返回TRUETRUE表示表示被選中,若為被選中,若為FALSEFALSE表示未被選中。表示未被選中。 同樣可通過(guò)同樣可通過(guò)IsDlgButtonChecked()IsDlgButtonChecked()函數(shù)來(lái)判斷選項(xiàng)是否被函數(shù)來(lái)判斷選項(xiàng)是否被選中。選中。 3 3復(fù)選按鈕(補(bǔ)充)復(fù)選按鈕(補(bǔ)充)56n 圖圖7 圖圖8n比如:對(duì)所示的檢查框定義三個(gè)比如:對(duì)所示的檢查框定義三個(gè)BOOL變量變量m_Chk1、 m_Chk2、 m_Chk3,增加一個(gè)測(cè)試按鈕,測(cè)試,增加一個(gè)測(cè)試按鈕,測(cè)試代碼

45、如下:代碼如下:UpdateData(TRUE); CString str=;if (m_Chk1) str+=選中1. ;if (m_Chk2) str+=選中2. ;if (m_Chk3) str+=選中3. ; AfxMessageBox(str);選定了選定了“日期日期”顯示日期,選定顯示日期,選定“時(shí)間時(shí)間”顯示時(shí)間。顯示時(shí)間。m_e1(CString) m_e2(CString) m_k1(BOOL) m_k2(BOOL) CTime類封裝了日期和時(shí)間靜態(tài)成員GetCurrentTime()返回系統(tǒng)當(dāng)前的日期和時(shí)間。void CTESTDlg:OnCheck1() UpdateDa

46、ta(TRUE);if(m_k1=TRUE) CTime time=CTime:GetCurrentTime(); /構(gòu)造“YYYY.MM.DD”形式的日期字符串 m_e1=time.Format(%Y.%m.%d);else m_e1=;UpdateData(FALSE);void CTESTDlg:OnCheck2() UpdateData(TRUE);if(m_k2=TRUE) CTime time=CTime:GetCurrentTime(); /構(gòu)造“HH.MM.SS”形式的時(shí)間字符串 m_e2=time.Format(%I.%M.%S);else m_e2=;UpdateData(

47、FALSE);Windows提供如下幾種列表類型控件提供如下幾種列表類型控件:列表框(列表框(CListBox類)、組合框(類)、組合框(CComboBox類)、列表視類)、列表視圖控件和樹(shù)視圖控件。圖控件和樹(shù)視圖控件。其中列表框是一種最簡(jiǎn)單的列表類型控件。常用來(lái)顯示類型其中列表框是一種最簡(jiǎn)單的列表類型控件。常用來(lái)顯示類型相同的一系列清單,如文件、字體和用戶等。相同的一系列清單,如文件、字體和用戶等。 常用控件常用控件列表類型控件列表類型控件列表框的風(fēng)格按性質(zhì)來(lái)劃分,列表框的風(fēng)格按性質(zhì)來(lái)劃分,列表框風(fēng)格有單選、多選、擴(kuò)展多選以及非選等四種類型。列表框風(fēng)格有單選、多選、擴(kuò)展多選以及非選等四種類型

48、。 允許排序允許排序選擇類型選擇類型允許多列顯示允許多列顯示一般情況下列表控件一般情況下列表控件的屬性不需進(jìn)行修改,的屬性不需進(jìn)行修改,采用默認(rèn)形式即可。采用默認(rèn)形式即可。設(shè)置列表框中選項(xiàng)的選中方式。設(shè)置列表框中選項(xiàng)的選中方式。有有4個(gè)選項(xiàng)個(gè)選項(xiàng):Single,表示在給定的選項(xiàng)中,至多有一個(gè)被選中;,表示在給定的選項(xiàng)中,至多有一個(gè)被選中;Multiple,表示可以有多個(gè)選項(xiàng)被選中,但忽略,表示可以有多個(gè)選項(xiàng)被選中,但忽略Shift鍵和鍵和Ctrl鍵;鍵;Extended,允許選擇多個(gè)選項(xiàng),在選擇時(shí),可以使用,允許選擇多個(gè)選項(xiàng),在選擇時(shí),可以使用Shift鍵和鍵和Ctrl鍵;鍵;None,不允許

49、選擇任何選項(xiàng)。,不允許選擇任何選項(xiàng)。63列表框的基本操作列表框的基本操作n(1) 添加列表項(xiàng)添加列表項(xiàng)n列表框創(chuàng)建時(shí)是一個(gè)空的列表,需要添加或插入一些列表框創(chuàng)建時(shí)是一個(gè)空的列表,需要添加或插入一些列表項(xiàng)。列表項(xiàng)。CListBox類成員函數(shù)類成員函數(shù)AddString 和和InsertString用用來(lái)向列表框增加列表項(xiàng),原型:來(lái)向列表框增加列表項(xiàng),原型:nint AddString( LPCTSTR lpszItem );nint InsertString( int nIndex, LPCTSTR lpszItem ); n 示列:示列:m_l. AddString(_T(陳蓉陳蓉“);n 說(shuō)

50、明:說(shuō)明: nIndex下標(biāo)從下標(biāo)從0開(kāi)始開(kāi)始64nn (2) 刪除列表項(xiàng)刪除列表項(xiàng) nCListBox類成員函數(shù)類成員函數(shù)DeleteString和和ResetContent分別分別用來(lái)刪除指定的列表項(xiàng)和清除列表框所有項(xiàng)目。它們的函用來(lái)刪除指定的列表項(xiàng)和清除列表框所有項(xiàng)目。它們的函數(shù)原型如下:數(shù)原型如下:nint DeleteString( UINT nIndex ); / nIndex指定要?jiǎng)h除指定要?jiǎng)h除的列表項(xiàng)的索引的列表項(xiàng)的索引nvoid ResetContent( ); / 清空所有列表項(xiàng)清空所有列表項(xiàng)65n (3) 查找列表項(xiàng)查找列表項(xiàng)nCListBox類成員函數(shù)類成員函數(shù)Find

51、String 和和FindStringExact分別用來(lái)在列表框中查找所匹配的列表項(xiàng),其中分別用來(lái)在列表框中查找所匹配的列表項(xiàng),其中FindStringExact的查找精度最高。的查找精度最高。nint FindString( int nStartAfter, LPCTSTR lpszItem ) const;nint FindStringExact( int nIndexStart, LPCTSTR lpszFind ) const;n說(shuō)明說(shuō)明:n (1)lpszItem和和lpszFind指定要查找的列表項(xiàng)文本,指定要查找的列表項(xiàng)文本,nStartAfter和和nIndexStart指定查

52、找的開(kāi)始位置,若為指定查找的開(kāi)始位置,若為-1,則從頭至尾查找。,則從頭至尾查找。n (2)查到后,這兩個(gè)函數(shù)都將返回所匹配列表項(xiàng)的)查到后,這兩個(gè)函數(shù)都將返回所匹配列表項(xiàng)的索引,否則返回索引,否則返回LB_ERR。66n(4) 列表框的單項(xiàng)選擇列表框的單項(xiàng)選擇n當(dāng)選中列表框中某個(gè)列表項(xiàng),可以使用當(dāng)選中列表框中某個(gè)列表項(xiàng),可以使用CListBox:GetCurSel來(lái)獲取這個(gè)結(jié)果,與該函數(shù)相對(duì)應(yīng)來(lái)獲取這個(gè)結(jié)果,與該函數(shù)相對(duì)應(yīng)的的CListBox:SetCurSel 函數(shù)是用來(lái)設(shè)定某個(gè)列表項(xiàng)呈選函數(shù)是用來(lái)設(shè)定某個(gè)列表項(xiàng)呈選中狀態(tài)中狀態(tài)(高亮顯示高亮顯示)。nint GetCurSel( ) co

53、nst;/ 返回當(dāng)前選擇項(xiàng)返回當(dāng)前選擇項(xiàng)的索引的索引n示例:示例:int i=m_l.GetCurSel(); nint SetCurSel( int nSelect );n說(shuō)明:說(shuō)明:nSelect指定要設(shè)置的列表項(xiàng)索引,錯(cuò)誤時(shí)這指定要設(shè)置的列表項(xiàng)索引,錯(cuò)誤時(shí)這兩個(gè)函數(shù)都將返回兩個(gè)函數(shù)都將返回LB_ERR。nn若要獲取某個(gè)列表項(xiàng)的字符串,可使用下列函數(shù):若要獲取某個(gè)列表項(xiàng)的字符串,可使用下列函數(shù):nint GetText( int nIndex, LPTSTR lpszBuffer ) const;nvoid GetText( int nIndex, CString& rString ) c

54、onst;n說(shuō)明:說(shuō)明:nIndex指定列表項(xiàng)索引,指定列表項(xiàng)索引,lpszBuffer和和rString是用來(lái)存放列表項(xiàng)文本。是用來(lái)存放列表項(xiàng)文本。 n示例:示例:n TCHAR s120;n CString s2;,n m_l. GetText(4, s1); /讀入數(shù)組讀入數(shù)組n m_l. GetText(4, s2);/讀入讀入CString對(duì)象對(duì)象 “添加添加”:將文本框中的內(nèi)容添加到列表框:將文本框中的內(nèi)容添加到列表框 “刪除刪除”:刪除列表框中選定的選項(xiàng):刪除列表框中選定的選項(xiàng) 修改:選定;選擇修改:選定;選擇“修改修改”;修改;選擇;修改;選擇“修改確定修改確定” m_l(CL

55、istBox ) m_e(CString) 初始化初始化OnInitDialog()m_l.AddString(_T(“大學(xué)計(jì)算機(jī)基礎(chǔ)”));m_l.AddString(_T(“C/C+程序設(shè)計(jì)”));m_l.AddString(_T(“VB程序設(shè)計(jì)”));m_l.AddString(_T(“軟件技術(shù)基礎(chǔ)”));消息處理函數(shù)消息處理函數(shù)OnButton1 UpdateData(TRUE);m_l.AddString(m_e);m_e=;UpdateData(FALSE);OnButton2() /刪除 int n=m_l.GetCurSel(); m_l.DeleteString(n);OnB

56、utton3() /修改CString s; int n=m_l.GetCurSel(); m_l.GetText(n,s); m_e=s; UpdateData(FALSE);OnButton4() /確定修改UpdateData(TRUE); int n=m_l.GetCurSel(); m_l.DeleteString(n); m_l.InsertString(n,m_e); m_e=; UpdateData(FALSE);組合框的屬性組合框的屬性 組合框控件是把編輯框和列表框控件組合起來(lái)的一類控件。組合框控件是把編輯框和列表框控件組合起來(lái)的一類控件。按風(fēng)格特征,可把組合框分為按風(fēng)格特征

57、,可把組合框分為3 3類:簡(jiǎn)單組合框、下拉式組合類:簡(jiǎn)單組合框、下拉式組合框和下拉式列表框??蚝拖吕搅斜砜?。類型數(shù)據(jù) 常用控件常用控件CComboBox類控件類控件1簡(jiǎn)單組合框簡(jiǎn)單組合框(Simple) 顯示一個(gè)編輯控件和列表框。該列表框總是可見(jiàn)的。當(dāng)列表顯示一個(gè)編輯控件和列表框。該列表框總是可見(jiàn)的。當(dāng)列表框包含的選項(xiàng)太多,顯示不下時(shí),將使用一個(gè)滾動(dòng)條在整個(gè)列框包含的選項(xiàng)太多,顯示不下時(shí),將使用一個(gè)滾動(dòng)條在整個(gè)列表框中滾動(dòng)。表框中滾動(dòng)。2下拉式組合框下拉式組合框(Dropdown) 除了包含一個(gè)編輯框和列表框外,還包含一個(gè)下拉按鈕。僅除了包含一個(gè)編輯框和列表框外,還包含一個(gè)下拉按鈕。僅當(dāng)單擊

58、下拉按鈕時(shí)才出現(xiàn)列表框。編排控件時(shí)單擊下拉按鈕,當(dāng)單擊下拉按鈕時(shí)才出現(xiàn)列表框。編排控件時(shí)單擊下拉按鈕,當(dāng)光標(biāo)變成當(dāng)光標(biāo)變成“ ”形狀時(shí),可以調(diào)整程序運(yùn)行后列表框部分顯示形狀時(shí),可以調(diào)整程序運(yùn)行后列表框部分顯示的大?。▎螕粝吕粹o),如圖所示。的大?。▎螕粝吕粹o),如圖所示。3 3下拉式列表框下拉式列表框(DropList)(DropList) 與下拉式組合框相似,只有被用戶打開(kāi)時(shí),才顯示列表與下拉式組合框相似,只有被用戶打開(kāi)時(shí),才顯示列表框。同時(shí),編輯框只能顯示選中的選項(xiàng),而不允許用戶輸入???。同時(shí),編輯框只能顯示選中的選項(xiàng),而不允許用戶輸入。因此,用戶只能從列表框中選擇選項(xiàng)。因此,用戶只能

59、從列表框中選擇選項(xiàng)。 組合框大部分屬性與編輯框或列表框相關(guān)的屬性有相同的意組合框大部分屬性與編輯框或列表框相關(guān)的屬性有相同的意義,但它有一個(gè)新的功能屬性,即可以通過(guò)組合框控件屬性對(duì)義,但它有一個(gè)新的功能屬性,即可以通過(guò)組合框控件屬性對(duì)話框的話框的Data選項(xiàng)卡添加初始的列表項(xiàng),如下圖所示。選項(xiàng)卡添加初始的列表項(xiàng),如下圖所示。 注意,每輸入完一個(gè)列表項(xiàng),按下注意,每輸入完一個(gè)列表項(xiàng),按下“;”鍵后才能換行輸入鍵后才能換行輸入下一項(xiàng)。下一項(xiàng)。組合框的基本操作組合框的基本操作 組合框的操作可以分為兩類:對(duì)組合框中的列表框進(jìn)行操組合框的操作可以分為兩類:對(duì)組合框中的列表框進(jìn)行操作和對(duì)組合框的編輯控件進(jìn)

60、行操作。作和對(duì)組合框的編輯控件進(jìn)行操作。組合框的通知消息組合框的通知消息 在組合框的通知消息中,有的是列表框發(fā)出的,在組合框的通知消息中,有的是列表框發(fā)出的,有的是編輯框發(fā)出的。有的是編輯框發(fā)出的。 用法:(a)添加控件,設(shè)置屬性。(b)為該控件添加一個(gè)成員變量,為CComboBox類對(duì)象。比如:CComboBox m_ComboBox; (c)設(shè)置初值,再用戶選擇,然后讀取用戶選擇的值。n初始化初始化nOnInitDialog()n m_ComboBox.AddString(蘋(píng)果蘋(píng)果);/設(shè)置了三個(gè)初值設(shè)置了三個(gè)初值nm_ComboBox.AddString(梨子梨子);nm_ComboBo

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論