visual c++面向對象編程教程_06對話框和標準控件_第1頁
visual c++面向對象編程教程_06對話框和標準控件_第2頁
visual c++面向對象編程教程_06對話框和標準控件_第3頁
visual c++面向對象編程教程_06對話框和標準控件_第4頁
visual c++面向對象編程教程_06對話框和標準控件_第5頁
已閱讀5頁,還剩69頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、版權所有版權所有 復制必究復制必究第13講課 題: 對話框概述及使用對話框目的要求: 讓學生學會開發基于對話框的應用程序教學重點: 對話框類CDialog、一般對話框工作流程教學難點: 添加控件及關聯的成員變量教學課時: 2課時教學方法: 授課為主、鼓勵課堂交流本次課涉及的學術前沿: 對話框對話框是Windows應用程序中一種常用的資源,其主要功能是輸出信息和接收用戶的輸入數據。控件控件是嵌入在對話框中或其它父窗口中的一個特殊的小窗口,它用于完成不同的輸入、輸出功能。 對話框與控件關系密切,在每個對話框上一般都有一些控件,對話框依靠這些控件與用戶進行信息的交互。本章主要介紹對話框的工作原理和編

2、程方法,并通過實例學習一些標準控件和公共控件的使用方法。6.1 對話框概述對話框概述l就用戶交互輸入功能而言,菜單和工具欄的功能是極其有限的。而對話框除了用來顯示提示信息(如程序啟動時顯示版權和運行進度信息),一個主要功能是用于接收用戶的輸入數據。l在MFC中,對話框的功能被封裝在CDialog類中,而CDialog類是CWnd類的派生類。作為窗口,對話框和其它窗口一樣具有窗口的一切功能。l對話框的一個典型應用是通過菜單命令或工具欄按鈕打開一個對話框,當然,對話框也可以作為一個程序的主界面。6.1.1 基于對話框的應用程序基于對話框的應用程序 可以直接利用MFC AppWizard向導創建一個

3、基于對話框的應用程序,這種程序運行后首先出現一個對話框。在向導的第一步選擇Dialog Based項。此時,應用程序向導將出現與單文檔和多文檔程序向導不同的操作步驟,因為對話框應用程序一般不包含文檔,故不支持數據庫和復合文檔。 按照對話框應用程序向導提示的步驟進行操作就得到一個對話框應用程序項目,出現對話框編輯器和控件工具欄浮動窗口,它們采用的是一種所見即所得的可視化工作方式。利用向導創建應用程序的框架后,程序員可根據程序具體功能要求添加代碼。例例 編寫一個對話框應用程序MyDialog,程序運行后顯示一個對話框,并在對話框上顯示文本串。1執行File|New命令出現New對話框,選擇MFC

4、AppWizardexe項,輸入程序名MyDialog,單擊OK按鈕。在隨后出現的MFC AppWizard-Step 1對話框窗口中選擇Dialog Based選項,單擊Finish按鈕就創建了應用程序項目,并在Developer Studio中打開了對話框編輯器和控件工具欄。2去掉對話框中標題為“TODO: 在這里設置對話控制”的靜態文本控件,調整對話框大小,在成員函數CMyDialogDlg:OnPaint()中添加代碼。 void CMyDialogDlg:OnPaint() . . . . . . else CPaintDC dc(this); dc.SetBkMode(TRANSP

5、ARENT); dc.TextOut(20, 50, 這是一個對話框應用程序!); CDialog:OnPaint(); 6.1.2 對話框類對話框類CDialog MFC提供了一系列對話框類,并實現了對話框消息響應和處理機制。CDialog類是對話框類中最重要的類,我們在程序中創建的對話框類一般都是CDialog類的派生類。CDialog類還是其它所有對話框類的基類,其派生關系如下所示:CObject CCmdTarget CWnd CDialog 對話框類為程序員提供了管理對話框的編程接口。 CDialog類從CWnd類派生而來,所以它繼承了CWnd類的成員函數,具有CWnd類的基本功能,

6、可以編寫代碼移動、顯示或隱藏對話框,并能根據對話框的特點增加新的成員函數,擴展它的功能。在你的CDialog類的派生類中可以直接調用CDialog類的成員函數。大部分的成員函數是虛函數,可以在你的派生類中重載,以實現特定的目的。除了CDialog類成員函數,類CWnd和CWinApp也提供了一些成員函數用于對話框的管理。有關對話框的常用處理函數有關對話框的常用處理函數CDialog:CDialog() 通過調用派生類構造函數,根據對話框資源模板定義一個對話框。CDialog:DoModal() 激活模態對話框模態對話框,顯示對話框窗口。CDialog:Create() 根據對話框資源模板創建非

7、模態對話框非模態對話框窗口。如果對話框不是Visible屬性,還需通過調用CWnd:ShowWindow()函數顯示非模態對話框窗口。CDialog:OnOk() 單擊OK按鈕時調用該函數,接收對話框輸入數據,關閉對話框。CDialog:OnCancel() 單擊Cancel按鈕或按Esc鍵時調用該函數,不接收對話框輸入數據,關閉對話框。CDialog:OnInitDialog() WM_INITDIALOG消息處理函數,在調用DoModal或Create函數時系統發送WM_INITDIALOG消息,在顯示對話框前調用該函數進行初始化。CDialog:EndDialog() 用于關閉模態對話框

8、窗口。CWnd:ShowWindow() 顯示或隱藏對話框窗口CWnd:DestroyWindow() 關閉并銷毀非模態對話框CWnd:UpdateData() 通過調用DoDataExchange()設置或獲取對話框控件的數據CWnd:DoDataExchange() 被UpdateData()調用以實現對話框數據交換,不能直接調用。CWnd:GetWindowText() 獲取對話框窗口的標題CWnd:SetWindowText() 修改對話框窗口的標題CWnd:GetDlgItemText() 獲取對話框中控件的文本內容CWnd:SetDlgItemText() 設置對話框中控件的文本內

9、容CWnd:GetDlgItem() 獲取控件或子窗口的指針CWnd:MoveWindow() 用于移動對話框窗口CWnd:EnableWindow() 使窗口處于禁用或可用狀態6.1.3 對話框數據交換對話框數據交換DDX和驗證和驗證DDV 在對話框中實現用戶數據輸入和輸出的一般方法是通過ClassWizard類向導將對話框控件與成員變量相關聯,利用對話框數據交換DDX(Dialog Data Exchange)和驗證DDV(Dialog Data Validation)機制實現數據的輸入和輸出。 當利用ClassWizard類向導添加成員變量時,用戶如果在窗口的左下角輸入數據的范圍,Cla

10、ssWizard將自動加入函數DDV的調用代碼。 例 如 , 當 添 加 一 個 U I N T 型 的 成 員 變 量m_nInput時指定它的最小值和最大值分別為0和100,則 C l a s s W i z a r d 類 向 導 將 在 成 員 函 數DoDataExchange()中添加以下DDV函數的調用語句:DDV_MinMaxUInt(pDX, m_nInput, 0, 100); 程序運行后,如果用戶的輸入數據超出0100的范圍,DDV將顯示一個提示信息對話框(例7-2c),提示用戶有效的輸入范圍。UpdateData()的用法的用法: 當調用UpdateData(TRUE)

11、時,MFC通過調用DDX函數將數據從控件傳遞到關聯的成員變量;當調用UpdateData(FALSE)時,MFC通過調用DDX函數將數據從成員變量傳遞到關聯的控件。利用UpdateData()函數實現了在刷新后重新獲取成員變量。注意:注意: 表面上看程序并沒有調用UpdateData(),但是,當程序調用CDialog:DoModal()創建并顯示對話框時,將自動調用CDialog:OnInitDialog()完成初始化的工作。在OnInitDialog()中調用了UpdateData(FALSE),將數據從成員變量傳遞到關聯的控件,從而顯示在控件中。而單擊OK按鈕將調用CDialog:OnO

12、k()函數,在OnOK()中調用了UpdateData(TRUE),將數據從控件傳遞到關聯的成員變量。 由此看來,不管MFC將DDX技術如何復雜化,我們只需知道,DDX就如同一條雙向通道,而方向控制開關就是UpdateData()函數中的BOOL類型參數是TRUE還是FALSE。6.1.4 提示信息對話框提示信息對話框 提示信息對話框也稱消息對話框,用來顯示有關的提示信息。提示信息對話框是一種最簡單的對話框,不需要用戶自己創建它就可以直接使用,Visual C+提供了相應的函數實現這樣的功能。: int AfxMessageBox(LPCTSTR lpText, UINT nType=MB_O

13、K, UINT nlDHelp=0); int MessageBox(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption, UINT nType); int CWnd:MessageBox(LPCTSTR lpText, LPCTSTR lpCaption=NULL, UINT nType=MB_OK); 這三個函數分別是MFC全局函數、API函數和CWnd類的成員函數,它們的功能基本相同,但適用范圍有所不同。AfxMessageBox()和:MessageBox()可以在程序中任何地方使用,而CWnd:MessageBox()只能用于控件、對話框、窗口等一

14、些窗口類中。 例如,在軟件安裝過程中為了彈出如下圖所示的警告提示信息對話框并進行相應的處理:編寫的代碼如下: int nChoice=MessageBox(文件復制失敗!, 錯誤, MB_ICONWARNING | MB_ABORTRETRYIGNORE ); switch(nChoice) case IDABORT: / 用戶按下終止按鈕. . . . . . caseIDRETRY: / 用戶按下重試按鈕. . . . . . case IDIGNORE: / 用戶按下忽略按鈕. . . . . . 6.2 使用對話框使用對話框 為了在屏幕上顯示對話框: (1)首先需要建立對話框資源及其與

15、資源相關的對話框類; (2)然后添加控件、與控件關聯的成員變量和消息處理函數; (3)最后在程序中顯示對話框并訪問與控件關聯的成員變量。 在Visual C+中可以利用集成工具如對話框編輯器和ClassWizard類向導很方便地創建對話框,不需要程序員手工編寫太多的源代碼。6.2.1 一般對話框工作流程一般對話框工作流程 當定義了一個對話框類后,就可以利用這個對話框類聲明一個對話框對象,即一個能夠在屏幕上顯示的對話框。 聲明了一個對話框對象后,可以調用對話框類的成員函數DoModal()建立對話框窗口并顯示對話框。例如,假設定義了一個名為CMyDialog的對話框類,為了在屏幕上顯示一個對話框

16、,可以編寫如下代碼: CMyDialog myDlg; myDlg.DoModal();函數函數OnOK()、 OnCancel()與與DoModal()的關系的關系: 對話框中一般都有OK和Cancel按鈕,單擊OK按鈕時調用CDialog:OnOK()函數,單擊Cancel按鈕時調用CDialog:OnCancel()函數。OnOK()函數和OnCancal()函數都將結束DoModal()函數調用,但令DoModal()返回不同的值。OnOK()函數令DoModal()返回IDOK,OnCancel()函數令DoModal()返回IDCANCAL。用戶可以根據DoModal()的返回值做

17、出不同的選擇。如: if (myDlg.DoModal() = = IDOK ) 對話框的初始化對話框的初始化可以在三個不同的階段所調用的函數中進行: (1)對話框類構造函數; (2)WM_CREATE消息處理函數; (3)WM_INITDIALOG消息處理函數。 通常是在消息WM_INITDIALOG的消息處理函數OnInitDialog()中進行初始化。在收到WM_INIT- DIALOG消息時,對話框的框架已創建,對話框中的每個控件也已建立起來,但它們還沒有在屏幕上顯示。此時自然可以設置或優化對話框中各個控件的外觀、尺寸、位置以及其它屬性。函數OnInitDialog()將被成員函數Do

18、Modal()調用。6.2.2 創建對話框創建對話框 在Windows中對話框是作為一種資源被使用,在程序中要創建一個對話框,首先要創建一個對話框模板資源,然后創建一個基于該對話框模板資源的對話框類。對話框模板資源指定了對話框本身的屬性(如大小、位置、風格、類型等)和對話框中的控件及屬性,而對話框類規定了對話框和對話框中每個控件的行為。通過對話框模板資源才能創建對話框類和對象。 為了向應用程序項目中添加一個對話框資源,執行Insert| |Resource命令或直接按Ctrl+R鍵,彈出Insert Resource資源列表框。一般要加入通用對話框資源,所以在Insert Resource框中

19、直接選擇Dialog項,然后單擊New按鈕。系統將給對話框資源設置一個默認的ID標識,對話框的默認標題Caption為Dialog,對話框有OK和Cancel兩個按鈕。對話框資源的添加:對話框資源的添加:添加對話框資源的簡單方法:添加對話框資源的簡單方法: 在項目工作區鼠標右擊資源項Dialog,從彈出式菜單中選擇“Insert Dialog”命令項。 對話框是在對話框模板資源和對話框類的基礎上形成的,在完成了對話框的屬性和外觀設計后,再來設計對話框的行為。我們需要利用ClassWizard類向導創建一個對話框類,并將這個類同先前創建的對話框資源連接起來。在創建對話框類之前或之后,都可以為對話

20、框資源添加控件控件。而在創建對話框類之后,還可以為對話框資源添加與對話框控件相關聯的成員變量成員變量和消息消息處理函數處理函數。創建對話框類:創建對話框類: 如果按Ctrl+W鍵或在對話框資源的非控件區域雙擊鼠標,ClassWizard類向導將發現已添加了一個對話框模板資源,卻沒有設計其對應的類,因此將彈出Adding a Class對話框,詢問用戶是否需要利用該對話框資源創建一個對話框類。 Name框:用于輸入對話框類的名稱; File Name框:列出類的文件名,單擊Change按鈕可改變文件名; Base class下拉框:列出可選擇的基類; Dialog ID下拉框:列出可選擇對話框資

21、源的ID。 例例 假設已利用MFC AppWizard應用程序向導建立了一個名為Mysdi的單文檔應用程序,請向應用程序中添加對話框資源和對話框類。 在Adding a Class對話框單擊OK按鈕,彈出New Class對話框:1首先向應用程序項目添加一個對話框資源,在項目工作區鼠標右擊資源項Dialog,從彈出式菜單中執行Insert Dialog命令,插入一個對話框資源。2設置對話框的屬性,將光標指向對話框的空白位置,單擊鼠標右鍵,從彈出式菜單中選擇Properties項,或直接按Enter鍵,彈出Dialog Properties屬性對話框。該對話框包括General、Styles、M

22、ore Styles、Extended Styles、More Extended Styles等頁面,用于設置對話框多種不同的屬性。3創建對話框類,鼠標雙擊對話框資源的非控件區域。6.2.3 添加控件及關聯的成員變量添加控件及關聯的成員變量 如果沒有控件控件,對話框完成不了什么具體功能,對話框與控件有著密不可分的關系。結合對話框編輯器,利用Controls控件工具欄可給當前正在編輯的對話框模板資源添加控件。 若Visual C+窗口中沒有出現Controls工具欄,只需將光標指向菜單欄并單擊鼠標右鍵,從彈出式菜單中選擇Controls項。 控件工具欄上的每一個圖標都代表了一種控件,如果不能確定

23、控件的類型,只要將光標在該控件圖標上停留片刻,就會顯示該控件類型的提示。 向對話框添加控件時,先在Controls工具欄單擊要添加的控件,再將光標指向對話框空白區域并單擊鼠標。添加與控件關聯的成員變量添加與控件關聯的成員變量 在生成自己的對話框類并添加需要的控件后,可以利用ClassWizard類向導在對話框類的定義中為對話框資源上的每一個控件添加一個或多個對應的成員變量。ClassWizard類向導的Member Variables頁面主要用來為對話框類添加和刪除與對話框控件關聯的成員變量,我們在編寫對話框程序時經常同該頁面打交道。 Class name下拉框:選擇要添加成員變量的對話 框類

24、; Control IDs欄:選擇控件,因為要添加的成員變量總是與一個對話框控件ID聯系在一起,它們代表控件對象本身或控件的某項屬性; Add Variable按鈕:添加與控件關聯的成員變量; Delete Variable按鈕:刪除控件的某個成員變量。 Control IDs欄:列出對話框資源上已有的控件,第1列Control IDs表示控件的ID,第2列Type表示變量的類型,第3列Member表示成員變量名。在在Member Variables頁面:頁面:Add Member Variable對話框對話框 Member variable name框:輸入成員變量名; Category下拉

25、框:選擇成員變量的類別,可為Control或 Value; Variable type下拉框:選擇成員變量的類型。 如果在Category下拉框選擇Value項,表示要為該控件的某項屬性定義一個變量,這意味著程序關心的是控件中的值,而不是控件對象本身。這時,還可以通過Variable type下拉框為變量選擇不同的類型,可以選擇一般的C+數據類型或Visual C+自定義的數據類型。 例如,對于編輯框控件,此時成員變量的類型可以是int、float、long、BOOL等C+一般數據類型或者是UINT、CString等Visual C+自定義數據類型。 如果在Category下拉框中選擇Cont

26、rol項,則表示定義的變量代表控件對象本身, Control類別的變量實質是一個控件對象,其類型是MFC控件類。 例如,對于編輯框控件,此時成員變量的類型為CEdit。因此,可以通過添加的控件對象訪問控件類的成員變量和調用控件類的成員函數,實現對控件行為的控制和管理。l可以為一個控件同時定義一個Control類別的變量和一個Value類別的變量。這些變量都是作為對話框派生類的成員變量,為了在程序其它地方能夠直接訪問添加的成員變量,它們都被聲明為public屬性。例例 完善Mysdi程序,向對話框資源添加需要使用的控件,并添加與控件關聯的成員變量。1向對話框資源添加控件。添加一個靜態文本控件,其

27、Caption為“請輸入半徑”。添加一個Edit Box編輯框控件,其ID標識為IDC_EDIT_ RADIUS,該控件用于接收用戶的輸入數據。2添加與控件關聯的成員變量。按Ctrl + W 鍵啟動ClassWizard類向導,單擊Member Variables標簽。在Class name下拉框選擇類CRadiusDialog,在Control IDs欄選擇編輯框IDC_EDIT_RADIUS,單擊Add Variable按鈕。通過Add Member Variable對話框添加成員變量m_nRadius,其數據類型為UINT。3使用對話框數據驗證DDV功能,在該頁面的左下角輸入成員變量m_

28、nRadius的最小值5和最大值250。 例例 完善Mysdi程序,通過“編輯”菜單中的“輸入半徑(I)”命令打開上述標題為“輸入半徑”的對話框,并根據輸入的半徑畫一個圓。1為了在視圖對象中接收并存儲對話框編輯控件的值,在視圖類CMysdiView中手工定義一個UINT類型的成員變量m_nCViewRadius。2利用菜單編輯器在“編輯”菜單增加一個菜單項“輸入半徑(I)”,其ID標識為ID_EDIT_INPUTRADIUS,Caption為“輸入半徑(&I).”。按Ctrl+W鍵啟動ClassWzard類向導,在視圖類中為ID_EDIT_INPUTRADIUS菜單項添加消息COMMAND的處

29、理函數,在函數中添加代碼。在程序中使用創建的對話框在程序中使用創建的對話框 void CMysdiView:OnEditInputradius() / TODO: Add your command handler code here CRadiusDialog dlg; / 定義一個對話框對象 dlg.m_nRadius=100;/ 設置編輯框顯示的初始值 if (dlg.DoModal()=IDOK) / 顯示對話框 m_nCViewRadius=dlg.m_nRadius; / 接收并存儲編輯框數據 Invalidate(); / 刷新視圖 3在視圖類構造函數CMysdiView:CMys

30、diView()中將成員變量m_nCViewRadius初始化為0。在函數CMysdiView:OnDraw()中添加如下畫圓的語句:pDC-Ellipse(0, 0, 2*m_nCViewRadius, 2*m_nCViewRadius); 在視圖類實現文件MysdiView.cpp的開始位置加入包含對話框類頭文件的語句: #include RadiusDialog.h”第14講課 題: 標準控件目的要求: 讓學生學會使用各種常用的控件教學重點: 組織控件及控件的共有屬性教學難點: 添加控件及關聯的成員變量教學課時: 2課時教學方法: 授課為主、鼓勵課堂交流本次課涉及的學術前沿:6.3 標準

31、控件標準控件 Windows提供的控件分為兩類:標準控件和公共控件。 標準控件:靜態控件、編輯框、按鈕、列表框、組合框和滾動條等。利用標準控件可滿足大部分用戶界面程序設計的要求。 公共控件:滑塊、進度條、列表視控件、樹視控件和標簽控件等,利用公共控件實現應用程序用戶界面風格的多樣性。 6.3.1 控件概述控件概述 控件是Windows提供的完成特定功能的獨立小部件,它使應用程序對話功能的設計更容易完成,在對話框與用戶的交互過程中擔任主要角色,用于完成用戶輸入和程序運行過程中的輸出。 控件對應一個CWnd派生類的對象,它實際上也是一個窗口,可以通過調用窗口類的成員函數實現控件的移動、顯示或隱藏、

32、禁用或可用等操作,也可以重新設置它們的尺寸和風格等屬性。 MFC以類的形式對標準控件和公共控件進行了封裝,這些類大部分是從CWnd類直接派生而來。常用的常用的MFC控件類控件類 MFC類類控控 件件CStatic靜態文本、圖片控件CEdit編輯框CButton按鈕、復選框、單選按鈕、組框CComboBox組合框CListBox列表框CScrollBar滾動條CSpinButtonCtrl旋轉按鈕CProgressCtrl進度條CSliderCtrl滑塊CListCtrl列表視控件常用的常用的MFC控件類控件類 MFC類類控控 件件CTreeCtrl樹視控件CTabCtrl標簽CAnimateC

33、trl動畫控件CRichEditCtrl復合編輯框CDateTimeCtrl日期時間選取器CMonthCalCtrl日歷CComboBoxEx擴展組合框CStatusBarCtrl狀態條控件CToolBarCtrl工具條控件CImageList圖像列表控件通知控件通知Notification消息消息: 用戶對控件的操作將引發控件事件,Windows產生對應的控件通知Notification消息,消息由其父窗口(如對話框)接收并處理。 標準控件發送WM_COMMAND控件通知消息,公共控件一般發送WM_NOTIFY控件通知消息,有時也發送WM_COMMAND消息。 通過WM_COMMAND消息參

34、數標識發出消息的控件和具體的事件,消息參數中包含了控件的ID標識和通知碼(如BN_CLICKED單擊按鈕事件)。控件通知碼前綴最后一個字母為N。 程序員不必關心消息具體的發送和接收,只需利用ClassWizard將控件映射到成員變量,將控件消息映射到成員函數,然后編寫具體的處理代碼。 控件的創建方法:控件的創建方法: 控件在程序中可作為對話框控件或獨立的窗口兩種形式存在,因此,控件的創建方法也有兩種。 一種方法是在對話框模板資源中指定控件,這樣當應用程序創建對話框時,Windows就會為對話框創建控件,編程時我們一般都采用這種方法。 一種方法是通過調用MFC控件類的成員函數C r e a t

35、e ( ) 創 建 控 件 , 也 可 以 調 用 A P I 函 數CreateWindow()或CreateWindowEx()創建控件。 控件也可以用于其它窗口,如在程序視圖窗口顯示控件。這時,需要首先聲明一個MFC控件類的對象,然后調用Create()函數創建控件。 6.3.2 控件的組織控件的組織1. 添加或刪除控件添加或刪除控件 打開對話框編輯器和控件工具欄,在控件工具欄中單擊要添加的控件,此時,當光標指向對話框時將變成十字形狀,在對話框指定位置處單擊鼠標左鍵,則該控件被添加到對話框中指定的位置。也可以將光標指向控件工具欄中的控件,然后按住鼠標不放,采用鼠標拖曵的方法將控件拖入到對

36、話框中。 要刪除已添加的控件,先單擊對話框中的控件,再按Delete鍵即可刪除指定的控件。2. 設置控件屬性設置控件屬性 將光標指向對話框中需設置屬性的控件,按回車鍵(或右擊鼠標,在彈出式菜單中選擇Properties項)彈出Properties對話框,在Properties對話框中設置控件屬性。可以將屬性對話框始終保持打開,只需要按下屬性對話框左上角的圖釘按鈕。3. 調整控件的大小調整控件的大小 對于靜態文本控件,當輸入標題內容時,控件的大小會自動改變。對于其它控件,先單擊控件,然后利用控件周圍的尺寸調整點來改變控件的大小。所選對象的位置和大小將顯示在狀態欄的右端。 4. 同時選取多個控件同

37、時選取多個控件 一種方法是在對話框內按住鼠標不放,拖曵出一個大的虛線框,然后釋放鼠標,則被該虛線框所包圍的控件都將被同時選取;另一種方法是按住Shift(或Ctrl)鍵不放,然后用鼠標連續選取控件。 5. 移動和復制控件移動和復制控件 當單個或多個控件被選取后,按方向鍵或用鼠標拖動選擇的控件可移動控件。若在鼠標拖動過程中按住Ctrl鍵則復制控件,復制的控件保持原來控件的大小和屬性。并且,控件能夠通過復制和粘貼操作而加入到其它對話框中。 6. 編排控件編排控件 編排控件主要是指同時調整對話框中一組控件的大小或位置。編排控件有兩種方法,一種方法是使用控件布局工具欄,自動編排對話框中同時選定的多個控

38、件;另一種方法是使用Layout菜單,當打開對話框編輯器時,Layout菜單將出現在菜單欄上。為了便于用戶在對話框內精確定位各個控件,系統還提供了網格、標尺等輔助功能。 測試對話框和控件的方法:測試對話框和控件的方法: 通過按下Ctrl+T組合鍵就能測試對話框運行時的界面效果。 6.3.3 控件共有屬性控件共有屬性 控件的屬性決定了控件的外觀和功能,我們只有通過控件屬性對話框才能設置控件的屬性。 控件屬性對話框上有若干選項卡,如General(通用屬性)、Style(風格)及Extend Styles(擴展風格)選項卡等,其中General頁用于設置控件的通用屬性,Styles和Extendc

39、d Styles頁用來設置控件的外觀和輔助屬性。 不同控件有不同的屬性,但它們都具有通用屬性,如控件標識ID、標題Caption等項, 控件的控件的General屬性屬性項項 目目說說 明明 ID控件的標識,對話框編輯器會為每一個加入的控件分配一個默認的ID Caption控件的標題,作為程序執行時在控件位置上顯示的文本 Visible指明顯示對話框時該控件是否可見 Group用于指定一個控件組中的第一個控件 HelpID表示為該控件建立一個上下文相關的幫助標識ID Disabled指定控件初始化時是否禁用 Tab Stop表示對話框運行后該控件可以通過使用Tab鍵來獲取焦點6.3.4 靜態控

40、件靜態控件 靜態控件靜態控件(Static control)是用來顯示一個文本串或圖形信息的控件,它包括靜態文本控件、圖片控件和組框。 靜態文本控件用來顯示一般不需要變化的文本;圖片控件用來顯示邊框、矩形、圖標或位圖等圖形;組框用來顯示一個文本標題和一個矩形邊框,通常用來作為一組控件周圍的虛擬邊界,并將一組控件組織在一起。 管理靜態文本控件和圖片控件的MFC類是CStatic類,而管理組框的MFC類是CButton類。 所有靜態控件默認的ID標識都為IDC_STATIC,如果要為一個靜態控件添加成員變量或消息處理函數,必須重新為它指定一個唯一的ID標識。 編程時用的最多是靜態文本控件,它被用來

41、作為其它控件的標題。每一個靜態文本控件最多可以顯示255個字符,可以使用“n”換行符,并可以通過Styles頁面設置控件的風格。6.3.5 編輯框編輯框 編輯框編輯框(Edit box)又稱文本框或編輯控件,它一般與靜態文本控件一起使用,用于數據的輸入和輸出。編輯框提供了完整的鍵盤輸入和編輯功能,可以輸入各種文本、數字或者口令。 編輯框為用戶提供了良好的輸入、輸出功能,能夠將鍵盤輸入的字符串轉化為要求的數據類型,并驗證它是否符合輸入要求(字符串長度或數值范圍)。通過前述對話框內容的學習我們已經知道,完成上述工作是利用了MFC提供的對話框數據交換(DDX)和數據驗證(DDV)技術。 編輯框常用屬

42、性: Multiline設置單行或多行編輯,Align text設置文本對齊方式,Number表示只能輸入數字,Password表示鍵入編輯框的字符都將顯示為“*”,Uppercase或Lowercase表示鍵入編輯框的字符全部轉換成大寫或小寫形式,Read-Only表示只能輸出數據。 當編輯框的文本被修改,會向父窗口發送消息,可以利用ClassWizard在對話框類中添加消息處理函數。編輯框發送消息有:EN_CHANGE、EN_KILLFOCUS、EN_SETFOCUS、EN_MAX TEXT、EN_UPDATE等。 例例 編寫一個SDI應用程序Password,程序啟動后首先彈出一個如圖所

43、示的用戶身份確認對話框,當用戶鍵入正確的口令后才能進入程序的主界面。 6.3.6 按鈕按鈕 按鈕按鈕(Button)包括按鍵按鈕、單選按鈕、復選框和組框等4種類型。雖然封裝按鈕控件的MFC類都是CButton類,但它們具有不同的功能。按鍵按鈕在被按下時會立即執行某個命令,也被稱為命令按鈕;單選按鈕用于在一組互相排斥的選項中選擇其中一項;復選框用于在一組選項中選擇其中一項或多項;組框可以使一組控件關聯起來。 1. 按鍵按鈕按鍵按鈕 幾乎所有的對話框都使用簡單的按鍵按鈕,如OK按鈕。通過Properties對話框可以設置按鈕的不同風格,如通過設置Default button屬性設置一個默認按鈕。默

44、認按鈕是指當對話框剛顯示時的命令執行按鈕,此時按下Enter鍵將執行該按鈕的命令功能。一個對話框只能有一個Default button默認按鈕,通常情況下將OK按鈕設置為默認按鈕。 其它屬性:Owner draw利用WM_DRAWITEM消息處理函數定制按鈕的外觀,Icon表示用圖標代替原來的文本標題,Bitmap表示用位圖代替原來的文本標題,Client edge、Static edge、Modal frame用于設置按鈕的外觀。 2. 單選按鈕單選按鈕 單選按鈕是由一個圓圈和緊隨其后的文本標題組成,當它被選中時,圓圈中就標上一個黑點。 單選按鈕設置Auto自動屬性為默認屬性,Auto屬性表

45、示用戶若選中同組中的某個單選按鈕,則自動清除其余單選按鈕的選中狀態,保證一組選項中始終只有一項被選中。 一般將一組單選按鈕放在一個組框中,在一組單選按鈕中,第一個(Tab鍵順序)按鈕最重要,其ID值可用于在對話框中為控件建立關聯的成員變量。必須為同組中的第一個單選按鈕設置Group屬性,而同組的其它單選按鈕不可再設置Group屬性。 3. 復選框復選框 復選框是由一個空心方框和緊隨其后的文本組成,當它被選中時,空心方框中就加上一個“”或“”標記。 不同于單選按鈕,在一組復選框中每次可以同時選擇多項。除了選中和沒選中兩種狀態,復選框還有第三種狀態,此時選中標記顯示為暗色,它表示該項不可以由用戶選

46、擇。通過設置Tri-state屬性得到這種三態復選框。另外,我們可以通過設置Push-like屬性使單選按鈕或復選框具有普通按鈕的外觀。 按鈕控件發送的消息:按鈕控件發送的消息: 按鈕控件只能發送通知碼為BN_CLICKED(單擊按鈕)和BN_DOUBLECLICKED(雙擊按鈕)的WM_COMMAND消息,我們經常需要編寫按鈕的BN_CLICKED消息處理函數。 CButton類提供了一些成員函數實現對按鈕控件對象的控制和管理,如利用成員函數GetCheck()或SetCheck()獲取或設置單選按鈕或復選框的當前狀態,利用成員函數GetButtonStyle()或SetButtonStyl

47、e()獲取或改變按鈕控件的風格。 例例 編寫一個對話框應用程序ColrButn,對話框中有兩個用于選擇顏色模式的單選按鈕和三個用于選擇具體顏色的復選框,只有在彩色模式下才能選擇三種不同顏色的組合。當用戶單擊“應用”按鈕,對話框右邊的按鍵按鈕將根據選擇的顏色實現按鈕的自畫。 6.3.7 列表框列表框 Windows提供了幾個列表類型控件,如列表框、組合框、列表視控件和樹視控件,其中列表框是一種最簡單的列表類型控件。 列表框列表框(List box)是一個列出了一些文本項的窗口,常用來顯示類型相同的一系列清單,如文件、字體和用戶等。與復選框類似,用戶可以選擇其中一項或多項,但同時列表框中選項的數目和內容可以動態變化,用戶可往列表框中添加或刪除某些選項。 列表框有單選Single、多選Multiple、擴展多選Extended、不選None四種風格,在控件Properties屬性對話框的Selection下拉框中設置。 當列表框中發生了某個事件,列表框就會向其父窗口發送一條通知消息。列表框常用的通知消息有:用戶雙擊列表框中的列表項時發送消

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論