对象和控件绑定
将控件窗口和类对象绑定具有两大作用
如果和数据类对象绑定,对象和控件可以进行数据交换。
如果和控件类对象绑定,对象就可以代表整个控件。
与数据类型对象绑定的使用
- 数据类型对象和控件可实现数据交互
- 重写父类成员虚函数DoDataExchange,在函数内部通过一系列的DDX_xxx函数,实现控件和数据类型对象的数据交互。
- 如果需要实现数据交互,调用UpdateData函数
a. UpdateData(TRUE) 控件-》变量
b. UpdateData(FALSE) 变量-》控件
与控件类型对象绑定的使用
- 控件类型对象和控件可实现对象代表整个控件
- 重写父类成员虚函数DoDataExchange,在函数内部通过一系列的DDX_xxx函数,实现控件句柄和控件类型对象的绑定。
- 控件类型对象,就代表这个控件
cpp
#include <afxwin.h>
#include "resource.h"
class CMyDlg:public CDialog {
DECLARE_MESSAGE_MAP()
public:
enum{IDD=IDD_DIALOG1};
CMyDlg():CDialog(IDD) {
}
public:
CString m_strEdit;//数据类型对象
CEdit m_ctrlEdit;//控件类型对象
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg void OnBnClickedButton2();
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedOk();
};
void CMyDlg::DoDataExchange(CDataExchange* pDX) {
//IDC_EDIT1 控件ID //m_strEdit 变量
//IDC_EDIT1控件和m_strEdit变量绑定
DDX_Text(pDX, IDC_EDIT1, m_strEdit);
//IDC_EDIT1控件和m_ctrlEdit控件类型对象绑定
DDX_Control(pDX, IDC_EDIT1, m_ctrlEdit);
}
class CMyWinApp:public CWinApp {
public:
virtual BOOL InitInstance();
};
BOOL CMyWinApp::InitInstance() {
CMyDlg dlg;
m_pMainWnd = &dlg;
dlg.DoModal();
return TRUE;
}
CMyWinApp theApp;
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CMyDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDOK, &CMyDlg::OnBnClickedOk)
END_MESSAGE_MAP()
void CMyDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//刷新数据控件(IDC_EDIT1)上的数据刷新到变量(m_strEdit)上
UpdateData(TRUE);
AfxMessageBox(m_strEdit);
}
void CMyDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_strEdit = "ddddd0";
//刷新数据,变量(m_strEdit)上的数据刷新到控件(IDC_EDIT1)上
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedOk()
{
m_ctrlEdit.MoveWindow(0, 0, 200, 200);
// TODO: 在此添加控件通知处理程序代码
//CDialog::OnOK();
}