對話框和控PPT課件_第1頁
對話框和控PPT課件_第2頁
對話框和控PPT課件_第3頁
對話框和控PPT課件_第4頁
對話框和控PPT課件_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、對話框和控 10.1 10.1 對話框和控件的基本概念對話框和控件的基本概念 10.2 10.2 使用使用AppWizardAppWizard開發(fā)開發(fā)MFCMFC 10.3 10.3 基本控件基本控件 10.4 10.4 通用對話框通用對話框 對話框和控 10.1.1 10.1.1 對話框的基本概念對話框的基本概念 在在MFCMFC中,對話框的功能被封裝在了中,對話框的功能被封裝在了CDialogCDialog類中,類中, CDialogCDialog類是類是CWndCWnd類的派生類。類的派生類。 有模式對話框有模式對話框壟斷了用戶的輸入,當一個有模式對壟斷了用戶的輸入,當一個有模式對 話框

2、打開時,用戶只能與該對話框進行交互,而其話框打開時,用戶只能與該對話框進行交互,而其 它用戶界面對象收不到輸入信息。它用戶界面對象收不到輸入信息。 無模式對話框無模式對話框類似普通的類似普通的WindowsWindows窗口,在無模式窗口,在無模式 對話框打開時,用戶可以同時打開其它窗口對象,對話框打開時,用戶可以同時打開其它窗口對象, 操作完畢后,又可用鼠標或其它方式激活該窗口。操作完畢后,又可用鼠標或其它方式激活該窗口。 對話框和控 10.1.2 10.1.2 控件的基本概念控件的基本概念 控件控件( (Control components)Control components)是獨立的小

3、部件,是獨立的小部件, 是現成的程序組件,可以獨立運行并完成一定的功是現成的程序組件,可以獨立運行并完成一定的功 能。能。在可視化編程中,控件的外觀和功能由其屬性在可視化編程中,控件的外觀和功能由其屬性 ( (property)property)規(guī)定。規(guī)定。 所有的控件都是由所有的控件都是由CWndCWnd類派生的類對象,因此類派生的類對象,因此 它們均有和它們均有和CWndCWnd類似的屬性。每個控件均有一個標類似的屬性。每個控件均有一個標 識符(識符(IDID),),在程序中可以通過這個標識符對相應在程序中可以通過這個標識符對相應 的控件進行操作。的控件進行操作。 表表10.110.1介紹

4、了一些常用的控件及其對應的控件介紹了一些常用的控件及其對應的控件 類。類。 對話框和控 10.2.1 10.2.1 生成基于對話框的生成基于對話框的MFCMFC應用程序框架應用程序框架 10.2.2 10.2.2 使用使用AppWizardAppWizard工具生成的程序和改工具生成的程序和改 變了的工程工作區(qū)變了的工程工作區(qū) 對話框和控 10.2.1 10.2.1 生成基于對話框的生成基于對話框的MFCMFC應用程序框應用程序框 架架 (1)(1)啟動啟動MFC AppWizardMFC AppWizard (2) (2) MFC AppWizard-Step 1MFC AppWizard-

5、Step 1對話框:選擇應用對話框:選擇應用 程序的類型和語言。程序的類型和語言。 (3) (3) MFC AppWizard-Step 2 of 4MFC AppWizard-Step 2 of 4對話框:詢對話框:詢 問了三個問題并要求輸入一個標題。問了三個問題并要求輸入一個標題。 (4) (4) MFC AppWizard-Step 3 of 4MFC AppWizard-Step 3 of 4對話框:詢對話框:詢 問了三個問題。問了三個問題。 (5) (5) MFC AppWizard-Step 4 of 4MFC AppWizard-Step 4 of 4對話框:顯對話框:顯 示示A

6、ppWizardAppWizard為應用程序生成的派生類的一些情為應用程序生成的派生類的一些情 況。況。 (6) (6) 編譯運行。編譯運行。 對話框和控 圖10.11 基本控件 控件的選擇控件的選擇 靜態(tài)文本靜態(tài)文本 組框組框 復選框復選框 組合框組合框 水平滾動條水平滾動條 旋轉按鈕旋轉按鈕 滑動條滑動條 列表視圖列表視圖 標簽標簽 復合編輯復合編輯 月歷月歷 用戶定制工具用戶定制工具 靜態(tài)圖片靜態(tài)圖片 編輯框編輯框 按鈕按鈕 單選框單選框 列表框列表框 垂直滾動條垂直滾動條 進展條進展條 熱鍵熱鍵 樹形視圖樹形視圖 動畫動畫 日期選擇日期選擇 IP地址地址 組合框的擴展組合框的擴展 對話

7、框和控 常用控件類常用控件類 控件名稱控件名稱MFC類類功能描述功能描述 靜態(tài)控件靜態(tài)控件CStatic用來顯示一些幾乎固定不變的文字或圖形用來顯示一些幾乎固定不變的文字或圖形 按鈕按鈕CButton 用來產生某些命令或改變某些選項,包括單選按鈕、復選用來產生某些命令或改變某些選項,包括單選按鈕、復選 框和組框框和組框 編輯框編輯框CEdit用于完成文本和數字的輸入和編輯用于完成文本和數字的輸入和編輯 列表框列表框CListBox顯示一個列表,讓用戶從中選取一個或多個項顯示一個列表,讓用戶從中選取一個或多個項 組合框組合框CComboBox是一個列表框和編輯框組合的控件是一個列表框和編輯框組合

8、的控件 滾動條滾動條CScrollBar通過滾動塊在滾動條上的移動和滾動按鈕來改變某些量通過滾動塊在滾動條上的移動和滾動按鈕來改變某些量 進展條進展條CProgressCtrl用來表示一個操作的進度用來表示一個操作的進度 滑動條滑動條CSliderCtrl通過滑動塊的移動來改變某些量,并帶有刻度指示通過滑動塊的移動來改變某些量,并帶有刻度指示 旋轉按鈕控件旋轉按鈕控件CSpinButtonCtrl 帶有一對反向箭頭的按鈕,單擊這對按鈕可增加或減少某帶有一對反向箭頭的按鈕,單擊這對按鈕可增加或減少某 個值個值 日期時間控件日期時間控件CDateTimeCtrl用于選擇指定的日期和時間用于選擇指定

9、的日期和時間 圖像列表圖像列表CImageList一個具有相同大小的圖標或位圖的集合一個具有相同大小的圖標或位圖的集合 標簽控件標簽控件CTabCtrl 類似于一個筆記本的分隔器或一個文件柜上的標簽,使用類似于一個筆記本的分隔器或一個文件柜上的標簽,使用 它可以將一個窗口或對話框的相同區(qū)域定義為多個頁面它可以將一個窗口或對話框的相同區(qū)域定義為多個頁面 對話框和控 控件的創(chuàng)建方法控件的創(chuàng)建方法 控件的創(chuàng)建方法有兩種:控件的創(chuàng)建方法有兩種: 在對話框模板中用編輯器指定控件:對話框是控在對話框模板中用編輯器指定控件:對話框是控 件的父窗口。件的父窗口。 編程方法:調用編程方法:調用MFC相應控件類的

10、成員函數相應控件類的成員函數 Create來創(chuàng)建,并在來創(chuàng)建,并在Create函數中指定控件的父函數中指定控件的父 窗口指針。窗口指針。 對話框和控 用編程方法添加控件用編程方法添加控件 n將項目工作區(qū)切換到將項目工作區(qū)切換到ClassView頁面,展開頁面,展開C*Dlg類,右類,右 擊擊C*Dlg類名,從快捷菜單中選擇類名,從快捷菜單中選擇Add Member Variable ,增加,增加CButton類型的成員變量類型的成員變量m_btnWnd。 n在項目工作區(qū)的在項目工作區(qū)的ClassView頁面中,雙擊頁面中,雙擊OnInitDialog 函數名,在該函數中另外添加下列代碼:函數名

11、,在該函數中另外添加下列代碼: m_btnWnd.Create(你好你好, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,CRect(20, 20, 120, 60), this, 201); / 創(chuàng)建創(chuàng)建 CFont *font = this-GetFont(); / 獲取對話框的字體獲取對話框的字體 m_btnWnd.SetFont(font); / 設置控件字體設置控件字體 return TRUE; 對話框和控 基本控件的共同屬性基本控件的共同屬性 (1) (1) IDID屬性屬性 用于指定控件的標識符,用于指定控件的標識符,WindowsWindows依靠

12、依靠IDID來區(qū)分不同的控件。來區(qū)分不同的控件。 (2) (2) CaptionCaption(標題)屬性標題)屬性 對控件要實現的功能或對其它控件中顯示的內容進行說明。對控件要實現的功能或對其它控件中顯示的內容進行說明。 如果控件標題中包含字符如果控件標題中包含字符 / 接收到消息的窗口句柄接收到消息的窗口句柄 UINT message;/ 消息消息 WPARAM wParam; / 消息的附加信息消息的附加信息 LPARAM lParam;/ 消息的附加信息消息的附加信息 DWORD time; / 消息傳送時的時間消息傳送時的時間 POINT pt; / 消息傳送時,光標所在的屏幕坐標消

13、息傳送時,光標所在的屏幕坐標 MSG; 對話框和控 1 控件的消息及消息映射控件的消息及消息映射 n一般控件的通知消息是一條一般控件的通知消息是一條WM_COMMAND消息,消息, 這條消息這條消息wParam參數的低位字中含有控件標識符,參數的低位字中含有控件標識符, wParam參數的高位字則為通知代碼,參數的高位字則為通知代碼,lParam參數參數 則是指向控件的句柄。則是指向控件的句柄。 n有些控件的通知消息是一條有些控件的通知消息是一條WM_NOTIFY消息,這消息,這 條消息的條消息的wParam參數是發(fā)送通知消息的控件的標識參數是發(fā)送通知消息的控件的標識 符,符,lParam參數

14、則是指向一個結構指針。參數則是指向一個結構指針。 n不管是什么控件消息,一般都可以用不管是什么控件消息,一般都可以用MFC ClassWizard對它們加以映射。對它們加以映射。 對話框和控 映射控件消息映射控件消息 在在MFC中,映射一個控件消息是非常簡便的,如下面中,映射一個控件消息是非常簡便的,如下面 的過程是對新添加的按鈕控件映射的過程是對新添加的按鈕控件映射BN_CLICKED(單擊單擊) 消息。將項目工作區(qū)窗口切換到消息。將項目工作區(qū)窗口切換到ResourseView頁面,雙頁面,雙 擊擊Dialog資源下的標識資源下的標識IDD_*_DIALOG,打開該對話框,打開該對話框 資源

15、模板。刪除資源模板。刪除“TODO: 在這里設置對話控制。在這里設置對話控制?!笨丶?,控件, 添加一個按鈕控件,保留其默認屬性。如圖所示。添加一個按鈕控件,保留其默認屬性。如圖所示。 4.1.2 控件的消息及消息映射控件的消息及消息映射 對話框和控 1 控件的消息及消息映射控件的消息及消息映射 按快捷鍵按快捷鍵Ctrl+W,打開,打開MFC ClassWizard對話框,對話框, 查看查看“Class name”列表中是否選擇了列表中是否選擇了C*Dlg,在,在IDs 列表中選擇列表中選擇IDC_BUTTON1,這是添加按鈕后,系統(tǒng),這是添加按鈕后,系統(tǒng) 自動為此按鈕設置的默認標識符,然后在自

16、動為此按鈕設置的默認標識符,然后在Messages框框 中選擇中選擇BN_CLICKED消息。消息。 (4) 單擊單擊Add Function按鈕或雙擊按鈕或雙擊BN_CLICKED消消 息,出現息,出現“Add Member Function”對話框,在這里對話框,在這里 可以輸入成員函數的名稱,系統(tǒng)默認的函數名為可以輸入成員函數的名稱,系統(tǒng)默認的函數名為 OnButton1。 對話框和控 1 控件的消息及消息映射控件的消息及消息映射 單擊單擊OK按鈕,在按鈕,在MFC ClassWizard的的“Member functions”列表中將列出新增加的成員函數。列表中將列出新增加的成員函數。

17、 在此成員函數中添加下列代碼:在此成員函數中添加下列代碼: void CEx_DlgCtrlsDlg:OnButton1() MessageBox(你按下了你按下了Button1按鈕!按鈕!); (6) 編譯并運行,編譯并運行,當單擊當單擊Button1按鈕時,就會執(zhí)行按鈕時,就會執(zhí)行 OnButton1函數函數,彈出一個消息對話框。這就是按鈕,彈出一個消息對話框。這就是按鈕 BN_CLICKED消息的映射過程,其他控件的消息也可以類消息的映射過程,其他控件的消息也可以類 似操作。似操作。 對話框和控 說明:說明: n不同資源對象(控件、菜單命令等)所產生的消息不同資源對象(控件、菜單命令等)

18、所產生的消息 是不同的。大致有三類消息是不同的。大致有三類消息:窗口消息、命令消息窗口消息、命令消息 (WM_COMMAND)和控件消息。和控件消息。 n一般不需要對對話框中的一般不需要對對話框中的OK(確定確定)與與CANCEL(取取 消消)按鈕進行消息映射,因為系統(tǒng)已自動設置了這按鈕進行消息映射,因為系統(tǒng)已自動設置了這 兩個按鈕的動作兩個按鈕的動作。當用戶單擊這兩個按鈕都將自動。當用戶單擊這兩個按鈕都將自動 關閉對話框,但關閉對話框,但OK(確定確定)按鈕動作還將使對話框按鈕動作還將使對話框 數據有效。數據有效。 對話框和控 2. 控件消息映射機制控件消息映射機制 將項目工作區(qū)切換到將項目

19、工作區(qū)切換到(文件視圖文件視圖)頁面,展開頁面,展開Head Files(頭文件頭文件)所有項,雙擊所有項,雙擊C*Dlg 類的頭文件類的頭文件*Dlg.h, 在在*Dlg.h文檔內容可以找到這樣的代碼:文檔內容可以找到這樣的代碼: protected: / Generated message map functions /AFX_MSG(CEx_DlgCtrlsDlg) afx_msg void OnButton1(); /AFX_MSG DECLARE_MESSAGE_MAP() ; 對話框和控 說明:說明: n代碼中,代碼中, DECLARE_MESSAGE_MAP()是一是一 個消息映

20、射宏,用來聲明對消息映射的支持個消息映射宏,用來聲明對消息映射的支持。 nafx_msg宏表示聲明的是一個消息響應函數宏表示聲明的是一個消息響應函數。 n/AFX_MSG(CEx_DlgCtrlsDlg) /AFX_MSG 用來標明它們之間的消息函數聲明內容是由用來標明它們之間的消息函數聲明內容是由 MFC ClassWizard自動管理的。自動管理的。 對話框和控 2. 控件消息映射機制控件消息映射機制 在項目工作區(qū)頁面中,展開在項目工作區(qū)頁面中,展開Source Files(源文件源文件)所有項,所有項, 雙擊雙擊C*Dlg 類的源文件類的源文件*Dlg.cpp,在,在*Dlg.cpp文檔

21、內容可文檔內容可 以找到這樣的代碼:以找到這樣的代碼: BEGIN_MESSAGE_MAP(CEx_DlgCtrlsDlg, CDialog) /AFX_MSG_MAP(CEx_DlgCtrlsDlg) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) /AFX_MSG_MAP END_MESSAGE_MAP() 對話框和控 說明:說明: BEGIN_MESSAGE_MAP和和 END_MESSAGE_MAP之間的代碼是用來定義該之間的代碼是用來定義該 類所支持的消息映射。其中類所支持的消息映射。其中 BEGIN_MESSAGE_MAP帶有兩個參數,第一個帶有兩個參數

22、,第一個 參數用來指定需要支持消息映射的用戶派生類,參數用來指定需要支持消息映射的用戶派生類, 第二個參數指定該類的基類。第二個參數指定該類的基類。 ON_BN_CLICKED是是MFC中專門映射按鈕中專門映射按鈕 BN_CLICKED消息映射宏,消息映射宏,它將按鈕控件和消息它將按鈕控件和消息 函數一一關聯(lián)。(函數一一關聯(lián)。(MFC為應用程序中所用到的消為應用程序中所用到的消 息都提供類似的消息宏定義。)息都提供類似的消息宏定義。) 在在*Dlg.cpp文件的后部分還有消息函數的實現代文件的后部分還有消息函數的實現代 碼,它與一般函數實現相同。碼,它與一般函數實現相同。 對話框和控 3. 映

23、射控件通用消息映射控件通用消息 可以通過可以通過WM_COMMAND消息的映射來處理一個或消息的映射來處理一個或 多個控件通用消息,如下面的過程。多個控件通用消息,如下面的過程。 (1)打開打開MFC ClassWizard對話框,對話框,“Class name” 列表中選擇列表中選擇C*Dlg,在,在IDs表中選擇表中選擇C*Dlg,在,在Messages 框中找到并雙擊框中找到并雙擊OnCommand,這樣,這樣OnCommand消息消息 函數就添加好了,由于函數就添加好了,由于OnCommand函數是一個用來處函數是一個用來處 理理WM_COMMAND消息的虛函數,因此消息的虛函數,因此

24、這里添加的這里添加的 OnCommand函數事實上是一個在類中實際調用的函數,函數事實上是一個在類中實際調用的函數, 可稱為可稱為“實例函數實例函數”。這樣的映射操作,可以稱之為。這樣的映射操作,可以稱之為“對對 虛函數虛函數OnCommand的重載的重載”。 對話框和控 3. 映射控件通用消息映射控件通用消息 (2) 在在OnCommand函數中添加下列代碼:函數中添加下列代碼: BOOL C*Dlg:OnCommand(WPARAM wParam, LPARAM lParam) WORD nCode = HIWORD(wParam); / 控件的通知消息控件的通知消息 WORD nID =

25、 LOWORD(wParam); / 控件的控件的ID號號 if (nID = 201) if (nID = IDC_BUTTON1) return CDialog:OnCommand(wParam, lParam); 對話框和控 4控件的數據交換控件的數據交換(DDX)和數據校驗和數據校驗(DDV) 為了讓用戶直接方便地操作一個控件,為了讓用戶直接方便地操作一個控件,MFC采用了獨采用了獨 特的對話框數據交換特的對話框數據交換DDX和對話框數據校驗和對話框數據校驗DDV技術。技術。 u對話框數據交換(對話框數據交換(DDX,DialogDataExchange) 用于初始化對話框中的控件并獲

26、取用戶的數據輸入,用于初始化對話框中的控件并獲取用戶的數據輸入, 將數據成員變量同對話框模板內的控件相聯(lián)接將數據成員變量同對話框模板內的控件相聯(lián)接,使得,使得 數據在控件間很容易地傳輸。數據在控件間很容易地傳輸。 u對話框數據驗證(對話框數據驗證(DDV,DialogDataValidation) 用于驗證對話框中數據輸入的有效性。用于驗證對話框中數據輸入的有效性。如它能自動如它能自動 校驗數據成員變量數值的范圍,并發(fā)出相應的警告。校驗數據成員變量數值的范圍,并發(fā)出相應的警告。 對話框和控 例:例: 使用使用MFC ClassWizard可以很容易地為一個控件定可以很容易地為一個控件定 義關聯(lián)

27、變量并可設置其數據范圍。義關聯(lián)變量并可設置其數據范圍。 例:為例:為C*Dlg類的按鈕控件類的按鈕控件IDC_BUTTON1添加并使添加并使 用其關聯(lián)變量用其關聯(lián)變量m_RelBtn。 (1) 打開打開MFC ClassWizard,并切換到,并切換到Member Variables頁面。頁面。 (2) 選定選定Class name為為C*Dlg,然后在,然后在Control IDs 列表中,選定所要關聯(lián)的控件列表中,選定所要關聯(lián)的控件ID號號IDC_BUTTON1,雙,雙 擊鼠標左鍵或擊鼠標左鍵或 單擊單擊Add Variable按鈕,彈出按鈕,彈出Add Member Variable對話

28、框,設置變量的名稱、類別和數對話框,設置變量的名稱、類別和數 據類型。據類型。 對話框和控 4控件的數據交換控件的數據交換(DDX)和數據校驗和數據校驗(DDV) MFC ClassWizard的的“Membe Variables”頁面頁面 “Add Member Variable” 對話框對話框 對話框和控 4控件的數據交換控件的數據交換(DDX)和數據校驗和數據校驗(DDV) (3) 在在Member variable name框中填好與控件相關聯(lián)的成框中填好與控件相關聯(lián)的成 員變量員變量m_RelBtn,單擊,單擊OK按鈕,回到按鈕,回到MFC ClassWizard對話框的對話框的Me

29、mber Variables頁面中,在頁面中,在 Control IDs列表中出現剛才添加的控件關聯(lián)變量。列表中出現剛才添加的控件關聯(lián)變量。 說明:說明: DDV/DDX技術,允許用戶為同一個控件關聯(lián)多個變量,技術,允許用戶為同一個控件關聯(lián)多個變量, 但必須保證這些變量名是互不相同的,且這些變量在同一但必須保證這些變量名是互不相同的,且這些變量在同一 個類型不能有多個變量,即在個類型不能有多個變量,即在Value和和Control類型中各自類型中各自 有一個關聯(lián)變量。有一個關聯(lián)變量。 若添加的關聯(lián)變量是一個若添加的關聯(lián)變量是一個Value類型,有時還要求用戶輸類型,有時還要求用戶輸 入變量的范

30、圍,這就是控件的數據校驗設置。入變量的范圍,這就是控件的數據校驗設置。 對話框和控 4控件的數據交換控件的數據交換(DDX)和數據校驗和數據校驗(DDV) 單擊單擊確定確定按鈕后,打開按鈕后,打開C*Dlg類源文件,可以發(fā)類源文件,可以發(fā) 現現MFC ClassWizard對上述操作作了以下三方面對上述操作作了以下三方面 的修改。的修改。 在在*Dlg.h文件中,添加控件關聯(lián)變量聲明。文件中,添加控件關聯(lián)變量聲明。 在在*Dlg.cpp文件中的文件中的C*Dlg構造函數實現代碼處,構造函數實現代碼處, 添加控件變量的一些初始代碼。添加控件變量的一些初始代碼。 在在Ex_DlgCtrlsDlg.

31、cpp文件中的文件中的 DoDataExchange函數體內,添加了控件的函數體內,添加了控件的 DDX/DDV代碼,它們都是一些以代碼,它們都是一些以DDV_或或DDX_ 開頭的函數調用。開頭的函數調用。 對話框和控 DoDataExchange()函數函數 MFC在每個對話框類中提供了一個用于重載的虛函在每個對話框類中提供了一個用于重載的虛函 數數DoDataExchange來實現對話框數據交換和驗來實現對話框數據交換和驗 證工作。證工作。 如果使用如果使用DDX機制,機制,則通常在則通常在OnInitDialog程序程序或或 對話框構造函數對話框構造函數中設置對話框對象成員變量的初始值中

32、設置對話框對象成員變量的初始值。 在對話框即將顯示前,應用程序框架的在對話框即將顯示前,應用程序框架的DDX機制將成員機制將成員 變量的值傳遞給對話框的控件,變量的值傳遞給對話框的控件,當對話框響應當對話框響應 DoModal或或Create而被顯示時,對話框控件將而被顯示時,對話框控件將“顯示顯示” 這些值。這些值。Cdialog類中的類中的OnInitDialog函數默認時將調函數默認時將調 用用CWnd類的類的UpdateData成員函數成員函數初始化對話框中的初始化對話框中的 控件。控件。 對話框和控 UpdateData()函數函數 UpdateData函數的原型如下:函數的原型如下

33、: BOOL UpdateData(BOOL bSaveAndValidate=TRUE); UpdateData函數只有一個為函數只有一個為TRUE或或FALSE的參數。的參數。 u調用調用UpdateData(FALSE)時,數據由控件相關聯(lián)的成員變時,數據由控件相關聯(lián)的成員變 量向控件傳輸,量向控件傳輸, u當調用當調用UpdateData(TRUE)或不帶參數的或不帶參數的UpdateData時,時, 數據從控件向相關聯(lián)的成員變量復制。數據從控件向相關聯(lián)的成員變量復制。 當用戶重載當用戶重載DoDataExchange函數時,也就為每一個數據函數時,也就為每一個數據 成員(控件)指定了

34、一個成員(控件)指定了一個DDX函數調用。函數調用。 對話框和控 4控件的數據交換控件的數據交換(DDX)和數據校驗和數據校驗(DDV) (5) 當為一個控件定義一個關聯(lián)的數據變量后,當為一個控件定義一個關聯(lián)的數據變量后, 可以使用可以使用CWnd:UpdateData函數實現控件數據的函數實現控件數據的 輸入和讀取。將輸入和讀取。將Ex_DlgCtrlsDlg:OnButton1修改修改 成下列代碼:成下列代碼: void CEx_DlgCtrlsDlg:OnButton1() UpdateData(); / 沒有參數,表示使用的是默認參數值沒有參數,表示使用的是默認參數值TRUE m_Re

35、lBtn.SetWindowText(m_strEdit); /這兒這兒m_strEdit是某個編輯框連接的控件變量是某個編輯框連接的控件變量 對話框和控 10.3.10.3.1 1 靜態(tài)控件靜態(tài)控件 10.3.10.3.2 2 按鈕控件按鈕控件 10.3.10.3.3 3 編輯框控件和旋轉按鈕控件編輯框控件和旋轉按鈕控件 10.3.4 10.3.4 列表框控件列表框控件 10.3.10.3.5 5 組合框控件組合框控件 10.3.10.3.6 6 滾動條控件、進展條和滑動條滾動條控件、進展條和滑動條 補充日期時間控件補充日期時間控件 10.3.7 10.3.7 基本控件應用舉例基本控件應用舉

36、例 對話框和控 10.3.1 靜態(tài)控件靜態(tài)控件 對話框和控 10.3.10.3.1 1 靜態(tài)控件靜態(tài)控件 一個靜態(tài)控件是用來顯示一個字符串、框、矩形、圖一個靜態(tài)控件是用來顯示一個字符串、框、矩形、圖 標標,位圖或增強的圖元文件。它可以用來作為標簽、框或位圖或增強的圖元文件。它可以用來作為標簽、框或 用來分隔其他的控件。一個靜態(tài)控件一般不接收用戶輸入,用來分隔其他的控件。一個靜態(tài)控件一般不接收用戶輸入, 也不產生通知消息。也不產生通知消息。 在對話框編輯器的控件工具欄中,屬于靜態(tài)控件的有:在對話框編輯器的控件工具欄中,屬于靜態(tài)控件的有: 靜態(tài)文本靜態(tài)文本 、組框、組框 和靜態(tài)圖片和靜態(tài)圖片 三種

37、。三種。 靜態(tài)圖片控件的靜態(tài)圖片控件的General屬性對話框:屬性對話框: 對話框和控 靜態(tài)圖片控件的一般屬性靜態(tài)圖片控件的一般屬性 項項 目目說說 明明 ID控件的標識符。每種控件都有默認的控件的標識符。每種控件都有默認的ID,例如添加的第一個按鈕控,例如添加的第一個按鈕控 件為:件為:IDC_BUTTON1,靜態(tài)控件為靜態(tài)控件為IDC_STATIC。 Group指定控件組中的第一個控件,如果該項未被選中,則此控件后的所指定控件組中的第一個控件,如果該項未被選中,則此控件后的所 有控件均被看成同一組。成組的目的是可以讓用戶用鍵盤方向鍵在有控件均被看成同一組。成組的目的是可以讓用戶用鍵盤方向

38、鍵在 同一組控件中進行切換。同一組控件中進行切換。 Help ID若該項被選中,則為該控件建立一個上下文相關的幫助標識符。若該項被選中,則為該控件建立一個上下文相關的幫助標識符。 Disabled指定控件初始化時是否禁用。指定控件初始化時是否禁用。 TabStop若該項被選中,則用戶可以使用若該項被選中,則用戶可以使用Tab鍵來選擇控件鍵來選擇控件 類型類型(Type)圖片類型,用戶可以從中選擇圖片類型,用戶可以從中選擇Frame(框框)、Rectangle(矩形區(qū)域矩形區(qū)域)、 on(標標)Bitmap(位圖位圖)、Enhanced Metafile(增強圖元文件,它是增強圖元文件,它是 各

39、種繪圖命令的集合各種繪圖命令的集合) 圖像圖像(Image) 當圖片類型為當圖片類型為icon或或bitmap時,通過此框可選擇指定的資源時,通過此框可選擇指定的資源ID號號 顏色顏色(Color)設置設置Frame和和Rectangle的顏色,它可以是的顏色,它可以是black(黑色黑色)、 white(白色白色)、gray(灰色灰色)或或者是具有者是具有3D外觀的外觀的etched(蝕刻風格蝕刻風格) 對話框和控 添加蝕刻線添加蝕刻線 (1) 打開項目中的對話框資源模板打開項目中的對話框資源模板IDD_*_DIALOG。 (2) 在該對話框適當的位置處添加一個靜態(tài)圖片控件,在該對話框適當的

40、位置處添加一個靜態(tài)圖片控件, 右擊該控件,從彈出的快捷菜單中選擇右擊該控件,從彈出的快捷菜單中選擇“屬性屬性”,彈出,彈出 如圖所示的屬性對話框。如圖所示的屬性對話框。 (3)在屬性對話框中,選擇)在屬性對話框中,選擇“顏色顏色”類型為類型為Etched, 然后關閉屬性對話框。然后關閉屬性對話框。 (4)將鼠標移動到添加的靜態(tài)圖片控件的右下角位置,)將鼠標移動到添加的靜態(tài)圖片控件的右下角位置, 使鼠標指針使鼠標指針 變成拖動鼠標使控件的大小變成一條水平變成拖動鼠標使控件的大小變成一條水平 線,單擊對話框測試按扭,則結果如圖所示。線,單擊對話框測試按扭,則結果如圖所示。 水平蝕刻線水平蝕刻線 對

41、話框和控 10.3.2 按鈕控件按鈕控件 對話框和控 10.3.10.3.2 2 按鈕控件按鈕控件 在在Windows中所用的按鈕是用來實現一種開與中所用的按鈕是用來實現一種開與 關的輸入。關的輸入。 常見的按鈕有三種類型:常見的按鈕有三種類型:按鍵按鈕、單選按鈕、按鍵按鈕、單選按鈕、 復選框按鈕復選框按鈕。 對話框和控 1.1.不同按鈕的作用不同按鈕的作用 按鍵按鈕按鍵按鈕通??梢粤⒓串a生某個動作,執(zhí)行某個命令,通??梢粤⒓串a生某個動作,執(zhí)行某個命令, 因此也常被稱為命令按鈕。按鈕有兩種風格:標準按鍵按鈕因此也常被稱為命令按鈕。按鈕有兩種風格:標準按鍵按鈕 和默認按鍵按鈕和默認按鍵按鈕(De

42、fault button)。 單選按鈕單選按鈕的外形是在文本前有一個,當它被選中時,的外形是在文本前有一個,當它被選中時, 單選按鈕中就標上一個黑點,用戶若選中同組按鈕中的某個單選按鈕中就標上一個黑點,用戶若選中同組按鈕中的某個 單選按鈕,其余的單選按鈕的選中狀態(tài)會被清除,確保同組單選按鈕,其余的單選按鈕的選中狀態(tài)會被清除,確保同組 中多個選項只有一個被選中。中多個選項只有一個被選中。 復選框復選框的外形是在文本前有空心方框,當被選中時,復的外形是在文本前有空心方框,當被選中時,復 選框中就加上一個選框中就加上一個 “”標記,通常復選框只有選中和未選標記,通常復選框只有選中和未選 中兩種狀態(tài),

43、若復選框前面有一個灰色是中兩種狀態(tài),若復選框前面有一個灰色是“”,這樣的復,這樣的復 選框是三態(tài)復選框選框是三態(tài)復選框 ,表示復選框的選擇狀態(tài)是,表示復選框的選擇狀態(tài)是“不確定不確定”。 對話框和控 2.2.按鈕控件通知消息按鈕控件通知消息 MFCMFC的的CButtonCButton類封裝了按鈕控件。類封裝了按鈕控件。CButtonCButton類的成員類的成員 函數函數Create()Create()負責創(chuàng)建按鈕控件,用于操作負責創(chuàng)建按鈕控件,用于操作CButtonCButton 類的成員函數如表所示。類的成員函數如表所示。 消息消息含義含義 BN_CLICKED用戶在按鈕上單擊了鼠標。用

44、戶在按鈕上單擊了鼠標。 BN_DOUBLECLICKED用戶在按鈕上雙擊了鼠標。用戶在按鈕上雙擊了鼠標。 對話框和控 3. 按鈕選中操作按鈕選中操作 (1)復選按鈕的選中操作復選按鈕的選中操作 設置或獲取一個按鈕或多個按鈕的選中狀態(tài)。設置或獲取一個按鈕或多個按鈕的選中狀態(tài)。 CButton類的成員函數類的成員函數SetCheck和和GetCheck分別用分別用 來設置或獲取指定按鈕的選中狀態(tài)來設置或獲取指定按鈕的選中狀態(tài) 。 nvoid SetCheck(int nCheck); nint GetCheck() const; 其中,其中, 參數參數nCheck的值和的值和GetCheck()

45、函數的返回值:函數的返回值: 0表示未選中,表示未選中,1表示選中,表示選中,2表示不確定表示不確定。 對話框和控 3. 按鈕選中操作按鈕選中操作 (2)單選按鈕的選中操作單選按鈕的選中操作 同組多個單選按鈕的選中狀態(tài)的設置與獲取,需要使用通用同組多個單選按鈕的選中狀態(tài)的設置與獲取,需要使用通用 窗口類窗口類CWnd的成員函數的成員函數CheckRadioButton的的 GetCheckedRadioButton。 nvoid CheckRadioButton(int nIDFirstButton,int nIDLastFirstButton,int nIDCheckButton); nin

46、t GetCheckedRadioButton(int nIDFirstButton,int nIDLastFirstButton); 其中,其中,nIDFirstButton和和nIDLastFirstButton分別指定同組單選分別指定同組單選 按鈕的第一個和最后一個按鈕按鈕的第一個和最后一個按鈕ID值,值,nIDCheckButton指定要設指定要設 置選中狀態(tài)的按鈕置選中狀態(tài)的按鈕ID值,函數值,函數GetCheckedRadioButton()返回被返回被 選中的按鈕選中的按鈕ID值。值。 對話框和控 示例:示例: 例例buttonex 設計以下界面,程序運行后,單擊某個單選設計以下

47、界面,程序運行后,單擊某個單選 按鈕,就可以在編輯框里顯示其對應的內容。按鈕,就可以在編輯框里顯示其對應的內容。 對話框和控 步驟:步驟: 創(chuàng)建并設計對話框創(chuàng)建并設計對話框 星期的星期的ID為為IDC_WEEK, 月份的月份的ID為為IDC_MONTH, 年份的年份的ID為為IDC_YEAR, 日期的日期的ID為為IDC_DATE, 2. 添加與控件相連的成員變量添加與控件相連的成員變量 編輯框編輯框IDC_EDIT1 CString m_edit 3. 添加消息映射函數添加消息映射函數 對話框和控 3.添加消息映射函數添加消息映射函數 void CButtonexDlg:OnYear() /

48、 TODO: Add your control notification handler code here CTime t=CTime:GetCurrentTime(); m_edit.Format(今年是今年是%d年年 ,t.GetYear(); UpdateData(FALSE); 對話框和控 3.添加消息映射函數添加消息映射函數 void CButtonexDlg:OnDate() / TODO: Add your control notification handler code here CTime t=CTime:GetCurrentTime(); m_edit.Format(現

49、在是現在是%d年年%d月月%d日日 %d:%d:%d,t.GetYear(),t.GetMonth(),t. GetDay(),t.GetHour(),t.GetMinute(),t.Get Second(); UpdateData(FALSE); 對話框和控 擴展擴展 若想在程序運行初始單選按鈕組中某個按鈕若想在程序運行初始單選按鈕組中某個按鈕 是選中狀態(tài),可在對話框的是選中狀態(tài),可在對話框的OnInitDialog()函數函數 中添加代碼:中添加代碼: CheckRadioButton(IDC_WEEK,IDC_DA TE,IDC_WEEK); 若想在程序運行初始就執(zhí)行某個單選按鈕的若想在

50、程序運行初始就執(zhí)行某個單選按鈕的 單擊操作效果,可在對話框的單擊操作效果,可在對話框的OnInitDialog()函函 數中直接調用該消息映射函數:數中直接調用該消息映射函數: OnWeek(); 對話框和控 示例:示例: 例例CheckButton 根據復選按鈕是否被選中,用編輯框根據復選按鈕是否被選中,用編輯框 來顯示相應內容來顯示相應內容 對話框和控 步驟:步驟: 創(chuàng)建并設計對話框創(chuàng)建并設計對話框 設置設置“姓名姓名”復選框的復選框的ID為為IDC_NAME, “年齡年齡”復選框的復選框的ID為為IDC_AGE。 2. 添加與控件相連的成員變量添加與控件相連的成員變量 編輯框編輯框IDC

51、_EDIT1 CString m_editstr 復選框復選框IDC_NAME CButton m_name 復選框復選框IDC_AGE CButton m_age 對話框和控 3.添加消息映射函數添加消息映射函數 void CCheckButtonDlg:OnOK() / TODO: Add extra validation here CString str=; if(m_name.GetCheck()=1) str+=姓名為張三姓名為張三1512; /1512表示回車與換行符的八進制表示回車與換行符的八進制ASCII碼碼 if(m_age.GetCheck()=1) str+=年齡年齡18

52、歲歲; m_editstr=str; UpdateData(FALSE); /CDialog:OnOK(); 對話框和控 示例:制作問卷調查示例:制作問卷調查 本例用到了組框、靜態(tài)文本、單選按鈕、復選框等控本例用到了組框、靜態(tài)文本、單選按鈕、復選框等控 件。實現時需要通過件。實現時需要通過CheckRadioButton函數來設置同函數來設置同 組單選按鈕的最初選中狀態(tài),然后通過組單選按鈕的最初選中狀態(tài),然后通過GetCheck和和 GetCheckedRadioButton判斷被選中的復選框和單選判斷被選中的復選框和單選 按鈕,通過按鈕,通過GetDlgItemText 或或GetWindo

53、wText獲取選獲取選 中控件的窗口文本。中控件的窗口文本。 對話框和控 示例:制作問卷調查示例:制作問卷調查例例Ex_Research 創(chuàng)建并設計對話框創(chuàng)建并設計對話框 設置控件的設置控件的ID “38” IDC_AGE_M38 “FTTL或或ADSL”IDC_CM_FTTL “單位單位LAN” IDC_CM_LAN “拔號拔號56K” IDC_CM_56K “其他其他” IDC_CM_OTHER “收發(fā)郵件收發(fā)郵件”IDC_DO_POP “瀏覽資料瀏覽資料”IDC_DO_READ “聊天游戲聊天游戲” IDC_DO_GAME “其他其他” IDC_DO_OTHER 對話框和控 示例:制作問

54、卷調查示例:制作問卷調查例例Ex_Research 2. 完善代碼完善代碼 (1)添加初始化代碼添加初始化代碼 在類在類CEx_ResearchDlg的的OnInitDialog成員函數中添加下成員函數中添加下 列初始化代碼:列初始化代碼: CheckRadioButton(IDC_AGE_L18, IDC_AGE_M38, IDC_AGE_18T27); CheckRadioButton(IDC_CM_FTTL, IDC_CM_OTHER, IDC_CM_FTTL); CButton* pBtn = (CButton*)GetDlgItem(IDC_DO_POP); pBtn-SetChec

55、k(1); / 使使“收發(fā)郵件收發(fā)郵件”復選框選中復選框選中 GetDlgItem是是CWnd類的成員函數,用來獲得對話框中控類的成員函數,用來獲得對話框中控 件的窗口指針,參數是該控件的件的窗口指針,參數是該控件的ID號。號。 對話框和控 示例:制作問卷調查示例:制作問卷調查例例Ex_Research (2)通過單擊通過單擊“確定確定”按鈕獲取用戶選擇的結果內容。按鈕獲取用戶選擇的結果內容。 在在CEx_ResearchDlg類中添加類中添加IDOK按鈕按鈕BN_CLICKED消息消息 映射,并添加下列代碼,使得用按映射,并添加下列代碼,使得用按確定確定按鈕取用戶所作的選按鈕取用戶所作的選

56、擇內容。擇內容。 CString str, strCtrl; / 定義兩個字符串變量,定義兩個字符串變量, / 獲取第一個問題的用戶選擇獲取第一個問題的用戶選擇 str = 你的年齡:你的年齡:; UINT nID = GetCheckedRadioButton(IDC_AGE_L18, IDC_AGE_M38); GetDlgItemText(nID, strCtrl);/ 獲取指定控件的標題文本獲取指定控件的標題文本 str = str + strCtrl; 對話框和控 / 獲取第二個問題的用戶選擇獲取第二個問題的用戶選擇 str = str + n你使用的接入方式:你使用的接入方式:;

57、nID = GetCheckedRadioButton( IDC_CM_FTTL, IDC_CM_OTHER); GetDlgItemText(nID, strCtrl);/ 獲取指定控件的標題文本獲取指定控件的標題文本 str = str + strCtrl; / 獲取第三個問題的用戶選擇獲取第三個問題的用戶選擇 str = str + n你上網主要是:你上網主要是:n; UINT nCheckIDs4 = IDC_DO_POP, IDC_DO_READ, IDC_DO_GAME, IDC_DO_OTHER; CButton* pBtn; for(int i=0; iGetCheck() )

58、 pBtn-GetWindowText( strCtrl ); str = str + strCtrl+ ; MessageBox( str ); 對話框和控 示例:制作問卷調查示例:制作問卷調查 其中,其中,函數函數GetDlgItemText是是CWnd類成員函類成員函 數,用來獲得對話框(或其他窗口)中的指定控件數,用來獲得對話框(或其他窗口)中的指定控件 的窗口文本。對于單選按鈕和復選框,控件的窗口的窗口文本。對于單選按鈕和復選框,控件的窗口 文本就是它們的標題屬性內容。文本就是它們的標題屬性內容。 該函數有兩個參數:第一個參數用來指定控件該函數有兩個參數:第一個參數用來指定控件 的標

59、識的標識;第二個參數是返回的窗口文本。第二個參數是返回的窗口文本。 函數函數GetWindowText的作用與的作用與GetDlgItemText 相同,也是獲取窗口的文本內容,但該函數只有一相同,也是獲取窗口的文本內容,但該函數只有一 個參數。個參數。 對話框和控 10.3.3 編輯框和旋轉按鈕控件編輯框和旋轉按鈕控件 對話框和控 10.3.10.3.3 3 編輯框控件(文本框控件)編輯框控件(文本框控件) n編輯框控件是一個簡易的正文編輯器,用戶可以在編輯編輯框控件是一個簡易的正文編輯器,用戶可以在編輯 框中輸入并編輯正文。編輯框控件可以自帶滾動條,顯示框中輸入并編輯正文。編輯框控件可以自

60、帶滾動條,顯示 多行文本。編輯框控件有兩種形式,一種是單行的,另一多行文本。編輯框控件有兩種形式,一種是單行的,另一 種是多行的,多行編輯框是從零開始編行號的。在一個多種是多行的,多行編輯框是從零開始編行號的。在一個多 行編輯框中,除了最后一行外,每一行的結尾處都有一對行編輯框中,除了最后一行外,每一行的結尾處都有一對 回車換行符(用回車換行符(用rr、nn表示)表示),這對回車換行符是正,這對回車換行符是正 文換行的標志,在屏幕上是不可見的。文換行的標志,在屏幕上是不可見的。 n編輯框控件會向父窗口發(fā)出如表編輯框控件會向父窗口發(fā)出如表10.710.7所示的控件通知消所示的控件通知消 息。息。

溫馨提示

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

評論

0/150

提交評論