轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-12-21 16:13:49.440|閱讀 1805 次
概述:前兩講中為大家講解了如何創(chuàng)建對話框資源。創(chuàng)建好對話框資源后要做的就是生成對話框類了。本文將針對如何創(chuàng)建對話框類和添加控件變量進行詳細說明。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
前兩講中為大家講解了如何創(chuàng)建對話框資源。創(chuàng)建好對話框資源后要做的就是生成對話框類了。這里再聲明下,生成對話框類主要包括新建對話框類、添加控件變量和控件的消息處理函數(shù)等。當功能實現(xiàn)了想要擁有美觀的界面可以借助Toolkit Pro進行界面優(yōu)化。
Xtreme Toolkit Pro:是屢獲殊榮的VC界面庫,是MFC開發(fā)中最全面界面控件套包,它提供了Windows開發(fā)所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
因為給大家的例程Addition是基于對話框的程序,所以程序自動創(chuàng)建了對話框模板IDD_ADDITION_DIALOG,并自動生成了對話框類CAdditionDlg,它是從CDialogEx類派生的。大家用過VC++ 6.0的可能記得,我們定義的對話框類都是從CDialog類派生的,但在VS2010中,一般對話框類都是繼承自CDialogEx類。
創(chuàng)建對話框類
如果是自己新添加的對話框模板,怎樣為它創(chuàng)建對話框類呢?
1.首先按第六講:創(chuàng)建對話框模板和修改對話框?qū)傩灾姓f的那樣,在Resource View的“Dialog”節(jié)點上右鍵,然后在右鍵菜單中選擇“Insert Dialog”創(chuàng)建一個新的對話框模板,ID就使用默認的IDD_DIALOG1。
2.在中間區(qū)域會顯示新建的對話框模板,然后選中此對話框模板,點右鍵,在右鍵菜單中選擇Add Class。
3.選擇“Add Class”后會彈出一個對話框,在對話框中“Class name”下的編輯框中寫入自定義的類名就可以了,例如CMyDialog。
4.最后點“Finish”完成。
最終你就可以在Class View中看到新生成的對話框類CMyDialog了,并且在Solution Explorer中有相應的MyDialog.h頭文件和MyDialog.cpp源文件生成。CMyDialog類同樣派生于CDialogEx類。
注意,一般類名都以C打頭,又比如,CTestDlg。
為對話框中的控件添加變量
在上一講中為對話框添加了幾個控件,包括三個靜態(tài)文本框,三個編輯框,一個按鈕控件。程序自動生成的Cancel按鈕保留,作為退出按鈕,而OK按鈕刪除掉了。
靜態(tài)文本框只是為了說明后面緊跟的編輯框中數(shù)據(jù)的意義,是被加數(shù)、加數(shù)還是和,所以它們是不會變的,我們就不為它們添加變量了。按鈕控件是用來操作的,這里也不為它們添加變量。編輯框中的數(shù)據(jù)可能會經(jīng)常變化,有必要為它們每個控件關(guān)聯(lián)一個變量。
首先為被加數(shù)的編輯框IDC_SUMMAND_EDIT添加變量。
1.在編輯框上點右鍵,在右鍵菜單中選擇“Add Variable”。彈出添加成員變量的向?qū)υ捒颉?
2.我們想為其添加值變量而不是控件變量,所以對話框中“Category”下的組合框中選擇Value。
3.“Variable type”下的組合框此時默認選中的是“CString”,CString是字符串類,顯然不能進行加法運算。我們可以選擇double、float、int等。這里我們選擇double,即編輯框關(guān)聯(lián)一個double類型的變量。
4.在“Variable name”中寫入自定義的變量名。雞啄米為其取名m_editSummand。
5.點“Finish”完成。
注意,類的成員變量名一般以m_打頭,以標識它是一個成員變量。
參照此方法,再分別為加數(shù)的編輯框IDD_ADDEND_EDIT添加double型變量m_editAddend、和的編輯框IDD_SUM_EDIT添加double型變量m_editSum。
對話框類的數(shù)據(jù)交換和檢驗
在程序運行界面中,用戶往往會改變控件的屬性,例如,在編輯框中輸入字符串,或者改變組合框的選中項,又或者改變復選框的選中狀態(tài)等。控件的屬性改變后MFC會相應修改控件關(guān)聯(lián)變量的值。這種同步的改變是通過MFC為對話框類自動生成的成員函數(shù)DoDataExchange()來實現(xiàn)的,這也叫做對話框的數(shù)據(jù)交換和檢驗機制。
我們?yōu)槿齻€編輯框添加了變量以后,在AdditionDlg.cpp中CAdditionDlg的DoDataExchange()函數(shù)的函數(shù)體中多了三條DDX_Text調(diào)用語句。下面是函數(shù)體代碼和雞啄米添加的注釋。
C++代碼
void CAdditionDlg::DoDataExchange(CDataExchange* pDX) { // 處理MFC默認的數(shù)據(jù)交換 CDialogEx::DoDataExchange(pDX); // 處理控件IDC_SUMMAND_EDIT和變量m_editSummand之間的數(shù)據(jù)交換 DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand); // 處理控件IDC_ADDEND_EDIT和變量m_editAddend之間的數(shù)據(jù)交換 DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend); // 處理控件IDC_SUM_EDIT和變量m_editSum之間的數(shù)據(jù)交換 DDX_Text(pDX, IDC_SUM_EDIT, m_editSum); }
再以Addition程序為例簡單說下數(shù)據(jù)交換機制。如果我們在程序運行界面中輸入被加數(shù),則通過CAddition的DoDataExchange()函數(shù)可以將輸入的值保存到m_editSummand變量中,反之如果程序運行中修改了變量m_editSummand的值,則通過CAddition的DoDataExchange()函數(shù)也可以將新的變量值顯示到被加數(shù)的編輯框中。
但是這種數(shù)據(jù)交換機制中,DoDataExchange()并不是被自動調(diào)用的,而是需要我們在程序中調(diào)用CDialogEx::UpdateData()函數(shù),由UpdateData()函數(shù)再去自動調(diào)用DoDataExchange()的。
CDialogEx::UpdateData()函數(shù)的原型為:
BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
參數(shù):bSaveAndValidate用于指示數(shù)據(jù)傳輸?shù)姆较颍琓RUE表示從控件傳給變量,F(xiàn)ALSE表示從變量傳給控件。默認值是TRUE,即從控件傳給變量。
返回值:CDialogEx::UpdateData()函數(shù)的返回值表示操作是否成功,成功則返回TRUE,否則返回FALSE。
在下一講中將具體演示CDialogEx::UpdateData()函數(shù)如何使用。
本節(jié)主要講的是新建對話框類和添加控件變量,控件的消息處理函數(shù)將在下一講詳細介紹。
轉(zhuǎn)載自:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn