MFC常用函數

1.CDialog(CTestDlg::IDD, pParent)

 

       在CMyDlg.h中有定義,其實這裏的IDD就是指的是你設計的Dialog,你可以到資源視圖下看Dialog的名稱。

 

2.DoDataExchange

 
MSDN是這樣描述的:Called by the framework to exchange and validate dialog data.大意是框架調用此函數來改寫與確認對話框數據。
       它是專門用於對話框控件和成員變量交換的函數
在調用UpdateData時會調用
注意到你程序裏的DDX_Control(id,var)沒有,他用於一些控件的動態數據交換,比如你在對話框中加一個editBox 在classWizard裏的member variable 裏將editBox的id和一個CEditBox類型變量m_edit相關聯 這樣在程序運行的時候,你可以通過對m_edit的操作來接受你在editBox裏的輸入
      
 
   (1)  DDX_Control
DDX_Control
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl );
參數: pDX是 指向CDataExchange對象的指針。這種結構爲指定對象提供了建立數據交換的環境,也包括結構的指向。
nIDC 子控件類的資源ID繼承控件的屬性。
rControl 對對話框成員變量的一個引用,形成視圖資源,或者控制數據被交換的視圖對象。
說明:
DDX_Control函數管理着在對話框、表格視或控件視中被子類化的控件與對話框、表格視或控件視的CWnd數據成員之間的數據交換。
有關DDX的更多信息參見《Visual C++程序員指南》中的“對話框數據交換和校驗”和《Visual C++教程》中的“加入對話框”。
用例:
void Cdialog2Dlg::DoDataExchange(CDataExchange* pDX)
  {
  CDialog::DoDataExchange(pDX);
  DDX_Control(pDX, IDC_EDIT, m_Edit);
  //IDC_EDIT是樹控件的ID,m_Edit是樹控件對應類的對象
  }
  通俗的說:
1.將變量m_Edit和控件IDC_EDIT進行綁定
2.通過修改變量的數值控制控件操作。
 
 
(2)DDX_Text
 
 

參數

pDX 指向CDataExchange對象的指針。框架提供了這個對象,用於建立數據交換的環境,包括其方向。
nIDC 對話框、表格視圖或控件視圖中編輯控件的ID。
value 對對話框、表格視圖或控件視圖對象的成員變量的引用,其類型取決於你使用了DDX_Text的哪一個重載版本。

說明

DDX_Text函數管理着對話框、表格視或控件視對象中的編輯控件與對話框、表格視或控件視對象的CString型數據成員之間的int,UINT,long,DWORD,CString,float或double型數據交換。
關於DDX的更多信息參見Visual C++聯機教程中的“加入對話框”和Visual C++程序員聯機指南中的“對話框數據交換與校驗”。[1]

      與DDX_Control 的區別

       DDX_TEXT()的作用可以理解爲把字符串變量和控件的文本(WindowText)關聯起來,DDX_Control()的作用可以理解爲把變量和控件本身關聯起來, DoDataExchange(pDX)就是處理所有變量與其關聯控件交換數據的函數。
void CView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID_VALUE, m_strID);
DDX_Control(pDX, IDC_ID_VALUE, m_editID);
}
在程序中通過update(TRUE)取得控件上的值到m_strID,處理修改後通過update(FALSE)傳回控件,界面顯示通過m_editID.GetWindText(str),取得值,處理後,通過m_editID.SetWindText(str)傳回控件界面顯示。
 
 
(3)BEGIN_MESSAGE_MAP
1簡單用法:編輯 
BEGIN_MESSAGE_MAP(CpassApp, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
這些都是宏定義,不是函數。 
在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之間添加你的消息響應函數,爲每個消息處理函數加入一個入口
BEGIN_MESSAGE_MAP( theClass, baseClass )

2參數:編輯

theClass 
指定消息映射所屬的類的名字。 
baseClass 
指定theClass的基類的名字。 

3說明:編輯

使用BEGIN_MESSAGE_MAP宏開始你的消息映射的定義。
在你的類的成員函數的實現文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏開始消息映射,然後爲每個消息處理函數加入一個入口,最後用END_MESSAGE_MAP宏結束消息映射。
每個消息映射入口的格式如下:
ON_Notification(id, memberFxn)
其中id指定了發送通知的控件的子窗口的ID,而memberFxn指定了處理該通知的父對象中的成員函數名。
父對象的函數原型格式如下:
afx_msg void memberFxn( );
可能的消息映射入口如下:
映射入口
何時向父對象發送消息
ON_BN_CLICKED 
用戶單擊按鈕時
ON_BN_DOUBLECLICKED
用戶雙擊按鈕時 

4舉例:編輯

1 BEGIN_MESSAGE_MAP(CpassDlg, CDialog)
2 ON_WM_SYSCOMMAND()
3 ON_WM_PAINT()
4 ON_WM_QUERYDRAGICON()
5 //}}AFX_MSG_MAP
6 ON_BN_CLICKED(IDOK, OnOK)
7 ON_BN_CLICKED(IDCANCEL, OnExit)
8 END_MESSAGE_MAP()
void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
這個函數響應系統控制菜單的命令.(即左上角圖標處)。
OnSysCommand:The framework calls this member function when the user selects a command from the Control menu, or when the user selects the Maximize or the Minimize button.

5另外:編輯

DoDataExchange:當UpdateData時候
OnInitDialog:對話框類已經構造,但是對話框還沒有顯示出來的時候
 
 
 
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章