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里的输入
在调用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是树控件对应类的对象
}
通俗的说:
{
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:对话框类已经构造,但是对话框还没有显示出来的时候
转载于:https://blog.51cto.com/8724052/1380740