void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
DDX_Text(pDX, IDC_EDIT1, m_strTest);
//}}AFX_DATA_MAP
}
pDX是指向对话框的数据交换类指针,IDC_EDIT1是对话框资源上的Edit控件资源号,m_strTest是对应为该控件生成的该对话框类成员变量:
//{{AFX_DATA(CTestDlg)
enum { IDD = IDD_TEST_DIALOG };
CString m_strTest;
//}}AFX_DATA
通过这一函数,自动帮你完成数据交换,在响应IDOK时无需编写代码就能更新变量数据

解决方案 »

  1.   

    就是说画面上IDC_NAME和m_sMessage连在一起了.
    你改了m_sMessage,画面就变了,画面上改了IDC_NAME内容,m_sMessage就改了.
    不过要叫一下UpdateData函数
      

  2.   

    在DDX_Control放一个端点,跟踪看看就知道是怎么回事了。
    下面是DDX_Control的代码,你可以同样的方式看到DDX_Text的代码。
    if (rControl.m_hWnd == NULL)    // not subclassed yet
    {
    HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
    if (!rControl.SubclassWindow(hWndCtrl))
    {
    AfxThrowNotSupportedException();
    }
    #ifndef _AFX_NO_OCC_SUPPORT
    else
    {
    if (pDX->m_pDlgWnd->m_hWnd != ::GetParent(rControl.m_hWnd))
    rControl.AttachControlSite(pDX->m_pDlgWnd);
    }
    #endif //!_AFX_NO_OCC_SUPPORT
    }