VC教案6_標(biāo)準(zhǔn)控件_第1頁
VC教案6_標(biāo)準(zhǔn)控件_第2頁
VC教案6_標(biāo)準(zhǔn)控件_第3頁
VC教案6_標(biāo)準(zhǔn)控件_第4頁
VC教案6_標(biāo)準(zhǔn)控件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 題: Windows 標(biāo)準(zhǔn)控件 目的要求: 了解基于對話框應(yīng)用程序的運行機(jī)制 掌握windows標(biāo)準(zhǔn)控件的屬性及使用 掌握windows標(biāo)準(zhǔn)控件的編程方法 掌握類向?qū)?chuàng)建變量和消息響應(yīng)函數(shù) 教學(xué)重點: windows標(biāo)準(zhǔn)控件的屬性及使用 教學(xué)難點: windows標(biāo)準(zhǔn)控件的屬性及使用 教學(xué)課時: 4 教學(xué)方法: 講練結(jié)合 教學(xué)內(nèi)容與步驟: 基于對話框應(yīng)用程序:對話框作為程序主界面,主要用于輸出信息和接收用戶數(shù)據(jù)輸入。對話框是Windows應(yīng)用程序中一種常用的資源,其主要功能是輸出信息和接收用戶的輸入數(shù)據(jù)。在MFC中,對話框的功能被封裝在CDialog類中,而CDialog類是CWnd類的派

2、生類,而用戶創(chuàng)建的對話框類一般都是CDialog類的派生類,從頭文件中可看出。作為窗口,對話框和其它窗口一樣具有窗口的一切功能。對話框的一個典型應(yīng)用是通過菜單命令或工具欄按鈕打開一個對話框,當(dāng)然,對話框也可以作為一個程序的主界面。創(chuàng)建基于對話框應(yīng)用程序:利用MFC AppWizard向?qū)?chuàng)建一個基于對話框的應(yīng)用程序框架。利用對話框編輯器和控件工具欄浮動窗口,進(jìn)行可視化界面設(shè)計。根據(jù)程序具體功能要求添加代碼,或添加成員變量和成員函數(shù)完成相應(yīng)功能。例:編寫一個對話框應(yīng)用程序MyDialog,程序運行后顯示一個對話框,并在對話框上顯示文本串。如下圖。步驟:1,應(yīng)利用用程序向?qū)FC AppWizar

3、d生成基于Dialog Based的應(yīng)用程序項目,程序名為:MyDialog。2,去掉對話框中靜態(tài)文本控件,其標(biāo)題為“TODO: 在這里設(shè)置對話控制”,調(diào)整對話框大小。3,在成員函數(shù)CMyDialogDlg:OnPaint()中添加代碼CPaintDC dc(this); ode(TRANSPARENT); dc.TextOut(20, 50, 這是一個對話框應(yīng)用程序!);對話框類的結(jié)構(gòu):對話框應(yīng)用程序包含的類及主對話框類的主要成員:應(yīng)用程序名設(shè)為test三個類:CtestApp, CtestDlg, CAboutDlg2,CDialog類從CWnd類派生而來,所以它繼承了CWnd類的成員函數(shù)

4、,具有CWnd類的基本功能,可以編寫代碼移動、顯示或隱藏對話框,你的CDialog類的派生類中可以直接調(diào)用CDialog類的成員函數(shù)。3,常用處理函數(shù)CDialog:CDialog() 通過調(diào)用派生類構(gòu)造函數(shù),根據(jù)對話框資源模板定義一個對話框。CDialog:OnOk()單擊OK按鈕時調(diào)用該函數(shù),接收對話框輸入數(shù)據(jù),關(guān)閉對話框。CDialog:OnCancel() 單擊Cancel按鈕或按Esc鍵時調(diào)用該函數(shù),不接收對話框輸入數(shù)據(jù),關(guān)閉對話框。CDialog:OnInitDialog() 在顯示對話框前調(diào)用該函數(shù)進(jìn)行初始化。CDialog:DoModal() 激活模態(tài)對話框,顯示對話框窗口。C

5、Dialog:Create() 根據(jù)對話框資源模板創(chuàng)建非模態(tài)對話框窗口。如果對話框不是Visible屬性,還需通過調(diào)用CWnd:ShowWindow()函數(shù)顯示非模態(tài)對話框窗口。CWnd:ShowWindow(true,false) 顯示或隱藏對話框窗口CWnd:UpdateData() 通過調(diào)用DoDataExchange()設(shè)置或獲取對話框控件的數(shù)據(jù)CWnd:DoDataExchange() 被UpdateData()調(diào)用以實現(xiàn)對話框數(shù)據(jù)交換,不能直接調(diào)用。CWnd:GetWindowText() 獲取對話框窗口的標(biāo)題CWnd:SetWindowText() 修改對話框窗口的標(biāo)題CWnd:

6、GetDlgItemText() 獲取對話框中控件的文本內(nèi)容CWnd:SetDlgItemText() 設(shè)置對話框中控件的文本內(nèi)容CWnd:GetDlgItem() 獲取控件或子窗口的指針CWnd:MoveWindow() 用于移動對話框窗口CWnd:EnableWindow() 使窗口處于禁用或可用狀態(tài)CWnd:CheckRadioButton 設(shè)置單選按鈕選中項CWnd:GetCheckedRadioButton 獲取單選按鈕選中項對話框數(shù)據(jù)交換DDX和驗證DDV:通過ClassWizard類向?qū)υ捒蚩丶c成員變量相關(guān)聯(lián)。調(diào)用UpdateData()時MFC通過調(diào)用DoDataExch

7、ange(),實現(xiàn)對話框數(shù)據(jù)的交換DDX和驗證DDV。調(diào)用UpdateData(TRUE)函數(shù)時,DDX將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)的成員變量;當(dāng)調(diào)用UpdateData(FALSE)時,MFC通過調(diào)用DDX函數(shù)將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)的的控件。如:DDX_Text(pDX, IDC_EDIT1, m_edit);DDV:利用ClassWizard類向?qū)砑映蓡T變量時,用戶如果在窗口的左下角輸入數(shù)據(jù)的范圍,如:成員變量m_nInput時指定它的最小值和最大值分別為0和100。ClassWizard將自動加入函數(shù)DDV的調(diào)用代碼DDV_MinMaxUInt(pDX, m_nInput, 0, 100

8、)。程序運行后,如果用戶的輸入數(shù)據(jù)超出0100的范圍,DDV將顯示一個提示信息對話框,提示用戶有效的輸入范圍。注:顯示調(diào)用:UpdateData()實現(xiàn)對話框數(shù)據(jù)的交換DDX,隱式調(diào)用:程序調(diào)用CDialog:DoModal()創(chuàng)建并顯示對話框時,將自動調(diào)用CDialog:OnInitDialog()完成初始化的工作。在OnInitDialog()中調(diào)用了UpdateData(FALSE),將數(shù)據(jù)從成員變量傳遞到關(guān)聯(lián)的控件,從而顯示在控件中。單擊OK按鈕將調(diào)用CDialog:OnOk()函數(shù),在OnOK()中調(diào)用了UpdateData(TRUE),將數(shù)據(jù)從控件傳遞到關(guān)聯(lián)的成員變量??丶攀?控

9、件是Windows提供的完成特定功能的獨立小部件,也是一個小窗口,它使應(yīng)用程序?qū)υ捁δ艿脑O(shè)計更容易完成,在對話框與用戶的交互過程中擔(dān)任主要角色,用于完成用戶輸入和程序運行過程中的輸出。控件對應(yīng)一個CWnd派生類的對象,它實際上也是一個窗口,可以通過調(diào)用窗口類的成員函數(shù)實現(xiàn)控件的移動、顯示或隱藏、禁用或可用等操作,也可以重新設(shè)置它們的尺寸和風(fēng)格等屬性。MFC以類的形式對標(biāo)準(zhǔn)控件和公共控件進(jìn)行了封裝,這些類大部分是從CWnd類直接派生而來。標(biāo)準(zhǔn)控件:Windows提供的控件分為兩類:標(biāo)準(zhǔn)控件和公共控件。標(biāo)準(zhǔn)控件:靜態(tài)控件、編輯框、按鈕、列表框、組合框和滾動條等。利用標(biāo)準(zhǔn)控件可滿足大部分用戶界面程序

10、設(shè)計的要求。公共控件:滑塊、進(jìn)度條、列表視控件、樹視控件和標(biāo)簽控件等,利用公共控件實現(xiàn)應(yīng)用程序用戶界面風(fēng)格的多樣性。 常用的MFC控件類: 控件通知Notification消息:用戶對控件的操作將引發(fā)控件事件,Windows產(chǎn)生對應(yīng)的控件通知Notification消息,消息由其父窗口(如對話框)接收并處理。標(biāo)準(zhǔn)控件發(fā)送WM_COMMAND控件通知消息,公共控件一般發(fā)送WM_NOTIFY控件通知消息,有時也發(fā)送WM_COMMAND消息。通過WM_COMMAND消息參數(shù)標(biāo)識發(fā)出消息的控件和具體的事件,消息參數(shù)中包含了控件的ID標(biāo)識和通知碼(如BN_CLICKED單擊按鈕事件)??丶ㄖa前綴最后

11、一個字母為N。程序員不必關(guān)心消息具體的發(fā)送和接收,只需利用ClassWizard將控件映射到成員變量,將控件消息映射到成員函數(shù),然后編寫具體的處理代碼。 控件的創(chuàng)建方法:控件在程序中可作為對話框控件或獨立的窗口兩種形式存在,因此,控件的創(chuàng)建方法也有兩種。一種方法是在對話框模板資源中指定控件,這樣當(dāng)應(yīng)用程序創(chuàng)建對話框時,Windows就會為對話框創(chuàng)建控件,編程時我們一般都采用這種方法。一種方法是通過調(diào)用MFC控件類的成員函數(shù)Create()創(chuàng)建控件,也可以調(diào)用API函數(shù)CreateWindow()或CreateWindowEx()創(chuàng)建控件??丶部梢杂糜谄渌翱?,如在程序視圖窗口顯示控件。這時,

12、需要首先聲明一個MFC控件類的對象,然后調(diào)用Create()函數(shù)創(chuàng)建控件,如:畫筆類對象。 控件的組織:1,添加或刪除控件 打開對話框編輯器和控件工具欄,在控件工具欄中單擊要添加的控件,此時,當(dāng)光標(biāo)指向?qū)υ捒驎r將變成十字形狀,在對話框指定位置處單擊鼠標(biāo)左鍵,則該控件被添加到對話框中指定的位置。也可以將光標(biāo)指向控件工具欄中的控件,然后按住鼠標(biāo)不放,采用鼠標(biāo)拖曵的方法將控件拖入到對話框中。要刪除已添加的控件,先單擊對話框中的控件,再按Delete鍵即可刪除指定的控件。2. 設(shè)置控件屬性 將光標(biāo)指向?qū)υ捒蛑行柙O(shè)置屬性的控件,按回車鍵(或右擊鼠標(biāo),在彈出式菜單中選擇Properties項)彈出Prop

13、erties對話框,在Properties對話框中設(shè)置控件屬性??梢詫傩詫υ捒蚴冀K保持打開,只需要按下屬性對話框左上角的圖釘按鈕。3. 調(diào)整控件的大小 對于靜態(tài)文本控件,當(dāng)輸入標(biāo)題內(nèi)容時,控件的大小會自動改變。對于其它控件,先單擊控件,然后利用控件周圍的尺寸調(diào)整點來改變控件的大小。所選對象的位置和大小將顯示在狀態(tài)欄的右端。 4. 同時選取多個控件 一種方法是在對話框內(nèi)按住鼠標(biāo)不放,拖曵出一個大的虛線框,然后釋放鼠標(biāo),則被該虛線框所包圍的控件都將被同時選取;另一種方法是按住Shift(或Ctrl)鍵不放,然后用鼠標(biāo)連續(xù)選取控件。 5. 移動和復(fù)制控件 當(dāng)單個或多個控件被選取后,按方向鍵或用鼠標(biāo)

14、拖動選擇的控件可移動控件。若在鼠標(biāo)拖動過程中按住Ctrl鍵則復(fù)制控件,復(fù)制的控件保持原來控件的大小和屬性。并且,控件能夠通過復(fù)制和粘貼操作而加入到其它對話框中。 6. 編排控件 編排控件主要是指同時調(diào)整對話框中一組控件的大小或位置。編排控件有兩種方法,一種方法是使用控件布局工具欄,自動編排對話框中同時選定的多個控件;另一種方法是使用Layout菜單,當(dāng)打開對話框編輯器時,Layout菜單將出現(xiàn)在菜單欄上。為了便于用戶在對話框內(nèi)精確定位各個控件,系統(tǒng)還提供了網(wǎng)格、標(biāo)尺等輔助功能。 測試對話框和控件的方法: 通過按下Ctrl+T組合鍵就能測試對話框運行時的界面效果。 控件共有屬性:控件的屬性決定了

15、控件的外觀和功能,我們只有通過控件屬性對話框才能設(shè)置控件的屬性。不同控件有不同的屬性,但它們都具有通用屬性,如控件標(biāo)識ID、標(biāo)題Caption等項,控件屬性對話框上有若干選項卡,如General(通用屬性)、Style(風(fēng)格)及Extend Styles(擴(kuò)展風(fēng)格)選項卡等,其中General頁用于設(shè)置控件的通用屬性,Styles和Extendcd Styles頁用來設(shè)置控件的外觀和輔助屬性。控件的General屬性:按鈕控件: CButton類按鈕是最常見的控件之一,按鈕控件包括:普通按鈕,圓按鈕,復(fù)選框按鈕,組框按鈕,自繪按鈕。 下壓式按鈕(或普通按鈕或按鍵按鈕):功能,按鍵按鈕在被按下時

16、會立即執(zhí)行某個命令,也被稱為命令按鈕。Properties對話框可以設(shè)置按鈕的不同風(fēng)格,如通過設(shè)置Default button屬性設(shè)置一個默認(rèn)按鈕。其它屬性:Owner draw利用WM_DRAWITEM消息處理函數(shù)定制按鈕的外觀,Icon表示用圖標(biāo)代替原來的文本標(biāo)題,Bitmap表示用位圖代替原來的文本標(biāo)題,Client edge、Static edge、Modal frame用于設(shè)置按鈕的外觀。 單選按鈕(或圓按鈕):在一組互相排斥的選項中選擇其中一項。由一個圓圈和緊隨其后的文本標(biāo)題組成,當(dāng)它被選中時,圓圈中就標(biāo)上一個黑點。單選按鈕設(shè)置Auto自動屬性為默認(rèn)屬性,Auto屬性表示用戶若選中

17、同組中的某個單選按鈕,則自動清除其余單選按鈕的選中狀態(tài),保證一組選項中始終只有一項被選中。一般將一組單選按鈕放在一個組框中,在一組單選按鈕中,第一個(Tab鍵順序)按鈕最重要,其ID值可用于在對話框中為控件建立關(guān)聯(lián)的成員變量。必須為同組中的第一個單選按鈕設(shè)置Group屬性,而同組的其它單選按鈕不可再設(shè)置Group屬性。 復(fù)選框:在一組選項中選擇其中一項或多項;每組中各按鈕相對獨立。由一個空心方框和緊隨其后的文本組成,當(dāng)它被選中時,空心方框中就加上一個“”或“”標(biāo)記。不同于單選按鈕,在一組復(fù)選框中每次可以同時選擇多項。除了選中和沒選中兩種狀態(tài),復(fù)選框還有第三種狀態(tài),此時選中標(biāo)記顯示為暗色,它表示

18、該項不可以由用戶選擇。通過設(shè)置Tri-state屬性得到這種三態(tài)復(fù)選框。另外,我們可以通過設(shè)置Push-like屬性使單選按鈕或復(fù)選框具有普通按鈕的外觀。 分組框:只是在窗口中劃分區(qū)域范圍,組框可以使一組控件關(guān)聯(lián)起來按鈕控件消息: 按鈕控件只能發(fā)送通知碼為BN_CLICKED(單擊按鈕)和BN_DOUBLECLICKED(雙擊按鈕)的WM_COMMAND消息,我們經(jīng)常需要編寫按鈕的BN_CLICKED消息處理函數(shù)。CButton類提供了一些成員函數(shù)實現(xiàn)對按鈕控件對象的控制和管理,如利用成員函數(shù)GetCheck()或SetCheck()獲取或設(shè)置單選按鈕或復(fù)選框的當(dāng)前狀態(tài),利用成員函數(shù)GetBu

19、ttonStyle()或SetButtonStyle()獲取或改變按鈕控件的風(fēng)格自繪按鈕:MFC還提供了一個CBitmapButton的類,允許用戶以圖標(biāo)的方式顯示按鈕,它是在CButtong下派生的,MFC調(diào)用方法DrawItem()在按鈕上繪制位圖,LoadBitmaps()方法為一個CBitmapButton對象附上位圖,最多可以有4個位圖。CWnd類消息:在知道按鈕ID的前提下,還可使用與按鈕有關(guān)的CWnd成員函數(shù)來設(shè)置或查詢按鈕狀態(tài):CheckDlgButton,CheckRadioButton,GetCheckedRadioButton,Is DlgButtonChecked,Ge

20、tWindowText,GetWindowTextLength,SetWindowText按鈕控件示例: 主要步驟:1,創(chuàng)建基于對話框項目2,創(chuàng)建資源并設(shè)置資源(按鈕)的屬性(控件右鍵,彈出對話框中輸入)IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_CHECK1IDC_CHECK2注:組框?qū)傩圆槐匦薷模瑸槟J(rèn)值,組框只是裝飾,編程中不會用到。3. 添加成員變量并添加消息響應(yīng)函數(shù)(菜單視圖類向?qū)В簭棾鰧υ捒颍┏蓡T變量:(Membr Variables)注:成員變量可以是數(shù)值型:單選按鈕(數(shù)組下標(biāo)順序),復(fù)選按鈕(選中為0,不選中為1)控件類型:通過成

21、員函數(shù)SetCheck(0,1)設(shè)置調(diào)用成員: 1,定義控件變量。2, 調(diào)用窗口類成員GetDlgItem(IDC_DATE_CHECK)獲取控件ID的指針,調(diào)用成員。CheckRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO,IDC_Boy_RADIO);iCourseRadio=GetCheckedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO);注:復(fù)選框,auto風(fēng)格控件不必添加成員變量,組框只是裝飾,不用變量消息響應(yīng)函數(shù):(Message Mapps)void CMy9_1Dlg:OnButton1() S

22、etWindowText(“你已按下了按鈕!”); void CMy9_1Dlg:OnButton2() m_btn2.SetWindowText(“按鈕已被按下!”); void CMy9_1Dlg:OnCheck1() if(m_chk1.GetCheck()0) m_chk1.SetCheck(0); else m_chk1.SetCheck(1); void CMy9_1Dlg:OnRadio1() m_rad1.SetCheck(1); 滾動條控件: CScrollBar類滾動條是一個交互式的、高度可視化的控件它包括一個滑塊、滾動條的兩端的按鈕等。滾動條控件與屬于窗口的滾動條是不一樣

23、的。處于窗口的滾動條是由該窗口創(chuàng)建、管理和釋放的,滾動條控件是由用戶創(chuàng)建、管理和釋放的滾動條類的結(jié)構(gòu)及其方法: 滾動條可以通過通知代碼來創(chuàng)建,也可以用對話框資源模板來創(chuàng)建常用滾動條動作標(biāo)識及其說明SB_TOP / SB_BOTTOM :滾動到滾動條最頂 / 底端SB_LINEUP / SB_LINEDOWN:向上 / 下滾動一行SB_LEFT / SB_RIGHT:滾動到左 / 右邊SB_LINELEFT / SB_LINERIGHT:向左 / 右滾動一行SB_PAGEUP / SB_PAGEDOWN :向上 / 下滾動一頁SB_PAGELEFT / SB_PAGERIGHT :向左 / 右滾

24、動一頁SB_THUMBPOSITION:滾動框移動到新位置SB_THUMBTRACK:滾動框被拖動SB_ENDSCROLL:滾動到最終位置創(chuàng)建與初始化滾動條類 在設(shè)置滾動條控件時,要通過如下方法設(shè)置其范圍:CScrollBar:SetScrollRange()例如,設(shè)置滾動范圍為-100到100的垂直滾動條pMyScroll-SetScrollRange(SB_VERT,-100,100);通過SetScrollPos()設(shè)置滾動塊當(dāng)前位置例如,滾動快的位置在-100到100的中間,即為0的位置。pMyScroller-SetScrollPos(0);例,滾動條類編程實例,如下圖(1) 應(yīng)用程

25、序的可視化編程部分:創(chuàng)建資源并設(shè)置資源屬性(2) 應(yīng)用程序的代碼編程部分(a) 給滾動條連接變量ID變量名類別 類型IDC_SCROLLBARm_ScrollbarControlCScrollbarIDC_EDITl m_Edit ControlCEdit(b) 初始化滾動條BOOL CMy9_2Dlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization hereollRange(0,20);m_Scrollbar.SetScrollPos(10);char sPos10;itoa(m_Scrollba

26、r.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);return TRUE; (3) 給滾動條消息添加代碼 void CMy9_2Dlg:OnVScroll() / TODO: Add your message handler code herechar sPos10;int iNowPos;switch(nSBCode) if(pScrollBar=&m_Scrollbar) case SB_THUMBTRACK:/拖動滑塊m_Scrollbar.SetScrollP

27、os(nPos);itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);case SB_LINEDOWN:/單擊滾動條向下的箭頭iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);brea

28、k;case SB_LINEUP:/單擊滾動條向上的箭頭iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;case SB_PAGEUP:/單擊箭頭與滾塊之間的區(qū)域iNowPos=m_Scrollbar.GetScrollPos();iNowPos

29、=iNowPos-3;if(iNowPos 單擊鼠標(biāo)右鍵,選擇Properties命令,在窗口中輸入控件的ID標(biāo)識值,IDC_EDIT1,用同樣的方法設(shè)置其它各個對象的屬性,如上圖(3) 應(yīng)用程序的代碼編程部分(a) 給編輯框連接變量選擇Member Variables選項卡,在Control IDs列表框中單擊IDC_EDIT1項,使之高亮化單擊Add Variable按鈕,此時顯示Add Member Variable窗口(b) 設(shè)置成員變量名為m_Edit1,類別為Control,變量類型為CEdit注意,不要將m_Edit1設(shè)為CString類型,因為只有設(shè)為CEdit 類型,才能夠調(diào)

30、用CEdit 類中的一些成員函數(shù),如Copy , Paste等,這樣才能完成本應(yīng)用程序中對Transfer按鈕要求復(fù)制內(nèi)容的操作的響應(yīng),用同樣的方法給編輯框EDIT2等其它對象連接各自的變量,增加變量之后MFC ClassWizard窗口將變?yōu)橄聢D所示若此時運行該程序,在Edit文本框中不能進(jìn)行多行輸入,只能單行輸入文本,而且按回車鍵終止應(yīng)用程序,同時,文本框中也沒有水平和垂直滾動條。 下面,我們來完善應(yīng)用程序中編輯框的特性,使之能夠進(jìn)行多行文本的輸入若不選擇此項,在編輯框中按回車鍵就會終止應(yīng)用程序,若選此項,按回車鍵就可進(jìn)行下一行的輸入,實現(xiàn)多行文本的輸入(c) 修改編輯框的特性 (4) 添

31、加代碼(a) 給Showl按鈕連接代碼void CMy9_5Dlg:OnShow1Button() m_Edit1.SetSel(0,-1);/ 選中編輯框IDC_EDIT1中的全部內(nèi)容 m_Edit1.ReplaceSel(This is the first EditBox.); 程序中SetSel()函數(shù)是CEdit類中的成員函數(shù),因為m_Edit1是屬于CEdit類的對象,故可以調(diào)用該類所有的成員函數(shù)。ReplaceSel()函數(shù)也是CEdit類中成員函數(shù)。 (b) 給 Clear1按鈕連接代碼void CMy9_5Dlg:OnClear1Button() m_Edit1.SetSel(

32、0,-1);/選中IDC_EDIT1中的內(nèi)容m_Edit1.ReplaceSel();/用空串代替所選文本,即把所選的文本刪除(c) 給Show2和Clear2按鈕連接代碼void CMy9_5Dlg:OnShow2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(This is the second EditBox.);void CMy9_5Dlg:OnClear2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(); (d) 給按鈕IDC_Transfer_BUTTON連接代碼 void CMy

33、9_5Dlg:OnTransferButton() m_Edit1.SetSel(0,-1);m_Edit1.Copy(); m_Edit2.SetSel(0,-1);ceSel();m_Edit2.Paste();(e)給 Undo按鈕連接代碼void CMy9_5Dlg:OnUndoButton() m_Edit1.Undo(); m_Edit2.Undo();(f)給Exit按鈕連接代碼 void CMy9_5Dlg:OnExitButton() OnOK();練習(xí) “乘法器”示例程序,使用者在“乘數(shù)”或者“被乘數(shù)”編輯框中輸入數(shù)字的時候,程序可以隨時計算乘法的結(jié)果 1,創(chuàng)建資源并設(shè)置屬

34、性,設(shè)置變量IDTypeMemberRead-onlyNumberIDC_EDIT_MUL1intm_AIDC_EDIT_MUL2intm_BIDC_EDIT_RESULTCStringm_Result2,添加消息處理函數(shù)(1)初始化結(jié)果編輯框BOOL CMy9_6Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereUpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);return TRUE; (2)當(dāng)

35、編輯框中的內(nèi)容發(fā)生改變時,會產(chǎn)生EN_CHANGE消息,需要為乘數(shù)與被乘數(shù)兩個編輯框響應(yīng)該消息 void CMy9_6Dlg:OnChangeEditMul1( ) UpdateData(TRUE);int i=m_A*m_B;ormat(%d, i);UpdateData(FALSE);void CMy9_6Dlg:OnChangeEditMul2( ) UpdateData(TRUE);int i=m_A*m_B;m_Result.Format(%d, i);UpdateData(FALSE);(3) 響應(yīng)Reset按鈕的消息 void CMy9_6Dlg:OnReset() m_A =

36、0;m_B = 0;int i=m_A*m_B;rmat(%d, i);UpdateData(FALSE); 列表框應(yīng)用舉例 練習(xí),創(chuàng)建一個單選列表框,并在該列表框中列出當(dāng)前目錄的文件,雙擊后刪除該項 主要步驟如下: (1)在對話框上放置一個List Box(IDC_LIST_DIR)控件和一個Static(IDC_STATIC_DIR )控件。List Box控件用于顯示文件名稱,Static控件用于顯示當(dāng)前顯示的文件所在的目錄(2)為List Box控件添加CListBox類型成員變量m_list (3)在OnInitDialog函數(shù)中添加初始化列表框內(nèi)容的代碼 BOOL CMy9_4Dl

37、g:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereDWORD cchCurDir = MAX_PATH;LPTSTR lpszCurDir; CHAR tchBufferMAX_PATH; lpszCurDir = tchBuffer; GetCurrentDirectory(cchCurDir, lpszCurDir); DlgDirList(lpszCurDir, IDC_LIST_DIR, IDC_STATIC_DIR, 0); return TRUE; 獲得當(dāng)前目錄, 設(shè)置列表框顯示條

38、目為當(dāng)前目錄下所有文件名 (4)為了實現(xiàn)雙擊條目刪除的功能,需要響應(yīng)列表框的LBN_DBLCLK消息 void CMy9_4Dlg:OnDblclkListDir() / TODO: Add your control notification handler code hereint i = m_list.GetCurSel();CString str;m_list.GetText(i, str);m_list.DeleteString(i);CString msg = Item +str+ deleted!;AfxMessageBox(msg); 練習(xí) 編寫一個對話框應(yīng)用程ExmpList,

39、對話框中有一個列表框,當(dāng)用戶單擊列表框中的一個列表項(一個國家)時,在四個編輯框分別顯示指定國家的名稱、首都、面積和人口。單擊“添加”按鈕時,“國家”編輯框中的文本將被添加到列表框中;單擊“刪除”按鈕時,當(dāng)前的列表項將被刪除。組合框控件: 組合框(CComboBox)類的結(jié)構(gòu)及組合框的特點 組合框是兩種預(yù)定義窗口的組合形式。 在Windows編程中使用單一控件往往不能完全滿足與用戶交互的需要,最常見的組合框例子是對話框及與其相聯(lián)系的靜態(tài)文本和編輯框。 【例】本例創(chuàng)建組合框控件,當(dāng)單擊向下按鈕時,顯示可選文件的名字。當(dāng)選中某一項時,顯示該項的名稱 將一個Combo Box控件放到對話框上。取消S

40、ort風(fēng)格。否則插入的內(nèi)容將按照字母順序排序,而不是插入的順序排序。添加CComboBox類型的變量m_cbBOOL CMy9_7Dlg:OnInitDialog() /初始化對話框CDialog:OnInitDialog();/ TODO: Add extra initialization herem_cb.AddString(Monday);m_cb.AddString(Tuesday);m_cb.AddString(Wednesday);m_cb.AddString(Thursday);m_cb.AddString(Friday);m_cb.AddString(Saturday);m_c

41、b.AddString(Sunday);return TRUE; 當(dāng)用戶選擇的內(nèi)容發(fā)生改變的時候,會產(chǎn)生CBN_SELCHANGE消息。為控件添加該消息的響應(yīng)函數(shù):void CMy9_7Dlg:OnSelchangeCombo() CString msg;m_cb.GetLBText(m_cb.GetCurSel(), msg);AfxMessageBox(msg);void CMy9_7Dlg:OnSelchangeCombo() char text20;int index;this-UpdateData(true);m_combo.GetWindowText(text,10);index=

42、m_combo.FindString(m_combo.GetCount(),text);if(index!=CB_ERR) if(index=m_combo.FindString(index,text) m_combo.SetCurSel(index); this-UpdateData(false);例:本程序為幾種控件的綜合應(yīng)用 在設(shè)計的過程中,同一組單選按鈕必須一個接一個地放進(jìn)對話框中,中間不能插入其它的控件 對于成組的單選按鈕,只在每組的第一個按鈕的屬性中選中Group設(shè)置在Sex Selecting組中只有Boy單選按鈕選中Group屬性在Age Range組中只有“20”單選按鈕選中

43、Group屬性Visual C按照放入對話框中的先后順序,給每個控件賦一個ID值,所以控件的ID值是連續(xù)的。Group屬性的控件之間的控件為一組。#define IDC_SHOW_BUTTON 1006#define IDC_HIDE_BUTTON 1007#define IDC_Boy_RADIO 1008#define IDC_Girl_RADIO 1009#define IDC_Age1_RADIO 1010#define IDC_Age2_RADIO 1011#define IDC_Age3_RADIO 1012#define IDC_Show_Sex_Age_BUTTON 1013#

44、define IDC_Result_EDIT 1014在為相關(guān)控件連接變量和方法后,開始編程(1) 給復(fù)選框IDC_DATE_CHECK添加代碼 OnDateCheck()方法的實現(xiàn)代碼如下:void CMy9_8Dlg:OnDataCheck() UpdateData(TRUE);if(m_DateCheck=TRUE)CTime tNow ;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%y.%m.%d);m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel(sNow);elsem_DateE

45、dit.SetSel(0,-1);m_DateEdit.ReplaceSel();UpdateData(FALSE); 以當(dāng)前的屏幕顯示內(nèi)容更新控件的變量 (2)為復(fù)選框IDC_TIME_CHECK添加代碼 void CMy9_8Dlg:OnTimeCheck() UpdateData(TRUE);if(m_TimeCheck=TRUE)CTime tNow;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%I:%M:%S);m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel(sNow);else

46、m_TimeEdit.SetSel(0,-1);m_TimeEdit.ReplaceSel();UpdateData(FALSE); 函數(shù)Format的參數(shù)%I是時間的小時表示法(0112),%m是分的表示法(0059),%d是秒的表示法(0059) (3) 給Enable按鈕添加代碼void CMy9_8Dlg:OnEnableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(TRUE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(TRUE);m_DateEdit.EnableWindow(TRUE);m_T

47、imeEdit.EnableWindow(TRUE); (4) 為Disable按鈕連接代碼void CMy9_8Dlg:OnDisableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(FALSE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(FALSE);m_DateEdit.EnableWindow(FALSE);m_TimeEdit.EnableWindow(FALSE); (5) 為Show Again按鈕添加代碼void CMy9_8Dlg:OnShowButton() GetDlgItem(ID

48、C_DATE_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_SHOW);GetDlgItem(IDC_DATE_EDIT)-EnableWindow(SW_SHOW);m_DateEdit.ShowWindow(SW_SHOW);GetDlgItem(IDC_TIME_EDIT)-EnableWindow(SW_SHOW);m_TimeEdit.ShowWindow(SW_SHOW); (6) 為Hide the Clock Setting按鈕添加實現(xiàn)代碼void CMy9_8Dlg:OnHide

49、Button() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_HIDE);GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_HIDE);m_DateEdit.ShowWindow(SW_HIDE);m_TimeEdit.ShowWindow(SW_HIDE); (7) 給Show_the_Sex_and_Age按鈕添加代碼void CMy9_8Dlg:OnShowSexAgeBUTTON() char sEdit50;int iSexRADIO;int iAgeRADIO;iSexRADIO=GetCheckedRa

50、dioButton(IDC_Boy_RADIO,IDC_Girl_RADIO);if(iSexRADIO=IDC_Boy_RADIO)strcpy(sEdit,The boys age is);if(iSexRADIO=IDC_Girl_RADIO)strcpy(sEdit,The girls age is);iAgeRADIO=GetCheckedRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO);if(iAgeRADIO=IDC_Age1_RADIO)strcat(sEdit, great than 20);if(iAgeRADIO=IDC_Age2_RA

51、DIO)strcat(sEdit, between 15 and 20);if(iAgeRADIO=IDC_Age3_RADIO)strcat(sEdit, less than 15);m_ResultEdit.SetSel(0,-1); m_ResultEdit.ReplaceSel(sEdit); (8) 為Show_Combo按鈕添加代碼void CMy9_8Dlg:OnShowComboButton() UpdateData(TRUE);char sCourseEdit30;char sRecordEdit15;int iCourseRadio;iCourseRadio=GetChec

52、kedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO);if(iCourseRadio=IDC_ENGLISH_RADIO)strcpy(sCourseEdit,English record is );if(iCourseRadio=IDC_COMPUTER_RADIO)strcpy(sCourseEdit,Computer record is );if(iCourseRadio=IDC_NATURE_RADIO)strcpy(sCourseEdit,Natural record is );m_Record.GetWindowText(sRecor

53、dEdit,15);strcat(sCourseEdit,);strcat(sCourseEdit,sRecordEdit);m_ComboEdit=_T(sCourseEdit);UpdateData(FALSE);(9) 給OnExitButton()方法添加代碼void CMy9_8Dlg:OnExitButton() OnOK(); 初始化單選按鈕 BOOL CMy9_8Dlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization hereCheckRadioButton(IDC_Boy_RADIO,

54、IDC_Girl_RADIO,IDC_Boy_RADIO);CheckRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO,IDC_Age2_RADIO);UpdateData(FALSE);m_English=0;m_Record.AddString(85);m_Record.AddString(90);m_Record.AddString(95);m_Record.SelectString(-1,95);UpdateData(FALSE);return TRUE; 對話框通用控件 較為流行的控件作為公共控件引入到Windows中,如旋轉(zhuǎn)按鈕:Spin控件,CS

55、pinButtonCtrl類、進(jìn)度條:Progress控件,CProgressCtrl類、滑塊:Slider控件,CSliderCtr、列表視控件:List Control控件,CListCtrl類、樹視控件:Tree Control控件,CtreeCtrl類、日期時間選取器:Date Time Picker控件,CDateTimeCtrl等公共控件。 標(biāo)準(zhǔn)控件保存在System目錄下的文件中,公共控件保存在System目錄下的中文件。Picture控件的使用 (1)分隔線 如下圖 將Picture控件拖放到對話框上,【Type】屬性選擇“Frame”,【Color】屬性選擇“Etched”,

56、將控件拖到最細(xì),這時,Picture控件看起來的效果就跟一條分隔線一樣了(2) 圖片 將【Type】屬性設(shè)置為“Icon”或者“Bitmap”的時候,可以設(shè)置【Image】屬性為相應(yīng)的資源ID,來顯示圖標(biāo)或位圖。我們在資源中導(dǎo)入一位圖,命名為IDB_BITMAP_DOT,設(shè)置Picture控件【Type】為“Bitmap”,【Image】為“IDB_BITMAP_DOT”Spin控件的使用 Spin按鈕控件提供了一對箭頭,用戶通過點擊箭頭可以微調(diào)該控件所表示的數(shù)值。表示Spin控件的是CSpinButtonCtrl類 Spin控件通常和tab order位于它之前的控件成對使用。通過CSpin

57、ButtonCtrl的GetBuddy方法可獲得與之配對的控件 向?qū)υ捒蛲戏乓粋€Edit控件,置為只讀,然后拖放一個Spin控件緊挨著剛才拖放的Edit控件,兩個控件的ID都是用默認(rèn)值,設(shè)置Spin控件的【Allignment】屬性為“Right”,選中【Auto buddy】屬性 BOOL CEx9_9Dlg:OnInitDialog()/ TODO: Add extra initialization hereCSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);pSpin-SetRange(0, 100);pSpi

58、n-SetPos(50);pSpin-GetBuddy()-SetWindowText(5.0);return TRUE; 設(shè)置Spin的范圍是0100,當(dāng)前位置是50,同時設(shè)置它的配對控件的顯示值 在對話框中添加WM_VSCROLL消息的響應(yīng):void CEx9_9Dlg:OnVScroll() if (pScrollBar-GetDlgCtrlID() = IDC_SPIN1) CString strValue; strValue.Format(%, (double) nPos / 10.0);(CSpinButtonCtrl*)pScrollBar)-GetBuddy()-SetWind

59、owText(strValue); CDialog:OnVScroll(nSBCode, nPos, pScrollBar); Progress控件的使用 進(jìn)度控件是一個用來指示長時間操作的進(jìn)展程度的控件。MFC中表示進(jìn)度控制的是CProgressCtrl類 ,進(jìn)度條有一個范圍和當(dāng)前位置。范圍表示整個操作的持續(xù)時間,當(dāng)前位置表示當(dāng)前進(jìn)行到的位置,進(jìn)度條根據(jù)當(dāng)前位置來判斷進(jìn)行的百分比,來顯示進(jìn)度 如下圖添加一個Progress控件,保持默認(rèn)ID,設(shè)置Smooth屬性。在旁邊添加一個按鈕,設(shè)置ID為“IDC_BUTTON_START”,Caption為“開始” 在OnInitDialog中添加如下

60、代碼:CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);pProg-SetRange(0, 100);pProg-SetPos(50);為“開始”按鈕添加點擊事件實現(xiàn)代碼:void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg-SetPos(0); SetTimer(1000,100,NULL); 在CCtrlDlg中添加對WM_TIMER消息的響應(yīng)函數(shù):void CEx9

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論