Visual C++/MFC編程入門:如何建立對話框類和添加控件變量

前兩講中爲你們講解了如何建立對話框資源。建立好對話框資源後要作的就是生成對話框類了。這裏再聲明下,生成對話框類主要包括新建對話框類、添加控件變量和控件的消息處理函數等。當功能實現了想要擁有美觀的界面能夠藉助Toolkit Pro進行界面優化。html

Xtreme Toolkit Pro:是屢獲殊榮的VC界面庫,是MFC開發中最全面界面控件套包,它提供了Windows開發所須要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。編程

點擊下載Xtreme Toolkit Pro最新試用版函數

由於給你們的例程Addition是基於對話框的程序,因此程序自動建立了對話框模板IDD_ADDITION_DIALOG,並自動生成了對話框類CAdditionDlg,它是從CDialogEx類派生的。你們用過VC++ 6.0的可能記得,咱們定義的對話框類都是從CDialog類派生的,但在VS2010中,通常對話框類都是繼承自CDialogEx類。優化

建立對話框類url

若是是本身新添加的對話框模板,怎樣爲它建立對話框類呢?.net

1.首先按第六講:建立對話框模板和修改對話框屬性中說的那樣,在Resource View的「Dialog」節點上右鍵,而後在右鍵菜單中選擇「Insert Dialog」建立一個新的對話框模板,ID就使用默認的IDD_DIALOG1。code

2.在中間區域會顯示新建的對話框模板,而後選中此對話框模板,點右鍵,在右鍵菜單中選擇Add Class。htm

VS2010/MFC編程入門之八(對話框:建立對話框類和添加控件變量)

3.選擇「Add Class」後會彈出一個對話框,在對話框中「Class name」下的編輯框中寫入自定義的類名就能夠了,例如CMyDialog。繼承

4.最後點「Finish」完成。教程

最終你就能夠在Class View中看到新生成的對話框類CMyDialog了,而且在Solution Explorer中有相應的MyDialog.h頭文件和MyDialog.cpp源文件生成。CMyDialog類一樣派生於CDialogEx類。

注意,通常類名都以C打頭,又好比,CTestDlg。

爲對話框中的控件添加變量

在上一講中爲對話框添加了幾個控件,包括三個靜態文本框,三個編輯框,一個按鈕控件。程序自動生成的Cancel按鈕保留,做爲退出按鈕,而OK按鈕刪除掉了。

靜態文本框只是爲了說明後面緊跟的編輯框中數據的意義,是被加數、加數仍是和,因此它們是不會變的,咱們就不爲它們添加變量了。按鈕控件是用來操做的,這裏也不爲它們添加變量。編輯框中的數據可能會常常變化,有必要爲它們每一個控件關聯一個變量。

首先爲被加數的編輯框IDC_SUMMAND_EDIT添加變量。

1.在編輯框上點右鍵,在右鍵菜單中選擇「Add Variable」。彈出添加成員變量的嚮導對話框。

2.咱們想爲其添加值變量而不是控件變量,因此對話框中「Category」下的組合框中選擇Value。

3.「Variable type」下的組合框此時默認選中的是「CString」,CString是字符串類,顯然不能進行加法運算。咱們能夠選擇double、float、int等。這裏咱們選擇double,即編輯框關聯一個double類型的變量。

4.在「Variable name」中寫入自定義的變量名。雞啄米爲其取名m_editSummand。

VS2010/MFC編程入門之八(對話框:建立對話框類和添加控件變量)

5.點「Finish」完成。

注意,類的成員變量名通常以m_打頭,以標識它是一個成員變量。

參照此方法,再分別爲加數的編輯框IDD_ADDEND_EDIT添加double型變量m_editAddend、和的編輯框IDD_SUM_EDIT添加double型變量m_editSum。

對話框類的數據交換和檢驗

在程序運行界面中,用戶每每會改變控件的屬性,例如,在編輯框中輸入字符串,或者改變組合框的選中項,又或者改變複選框的選中狀態等。控件的屬性改變後MFC會相應修改控件關聯變量的值。這種同步的改變是經過MFC爲對話框類自動生成的成員函數DoDataExchange()來實現的,這也叫作對話框的數據交換和檢驗機制。

咱們爲三個編輯框添加了變量之後,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函數的函數體中多了三條DDX_Text調用語句。下面是函數體代碼和雞啄米添加的註釋。

C++代碼

void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
{
// 處理MFC默認的數據交換
CDialogEx::DoDataExchange(pDX);
// 處理控件IDC_SUMMAND_EDIT和變量m_editSummand之間的數據交換
DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);
// 處理控件IDC_ADDEND_EDIT和變量m_editAddend之間的數據交換
DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);
// 處理控件IDC_SUM_EDIT和變量m_editSum之間的數據交換
DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
}

再以Addition程序爲例簡單說下數據交換機制。若是咱們在程序運行界面中輸入被加數,則經過CAddition的DoDataExchange()函數能夠將輸入的值保存到m_editSummand變量中,反之若是程序運行中修改了變量m_editSummand的值,則經過CAddition的DoDataExchange()函數也能夠將新的變量值顯示到被加數的編輯框中。

可是這種數據交換機制中,DoDataExchange()並非被自動調用的,而是須要咱們在程序中調用CDialogEx::UpdateData()函數,由UpdateData()函數再去自動調用DoDataExchange()的。

CDialogEx::UpdateData()函數的原型爲:

BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

參數:bSaveAndValidate用於指示數據傳輸的方向,TRUE表示從控件傳給變量,FALSE表示從變量傳給控件。默認值是TRUE,即從控件傳給變量。

返回值:CDialogEx::UpdateData()函數的返回值表示操做是否成功,成功則返回TRUE,不然返回FALSE。

在下一講中將具體演示CDialogEx::UpdateData()函數如何使用。

本節主要講的是新建對話框類和添加控件變量,控件的消息處理函數將在下一講詳細介紹。

點擊獲取更多教程資源>>

轉載自:http://www.jizhuomi.com/software/153.html

相關文章
相關標籤/搜索