在View类中动态创建一个Edit控件如下:editT1.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(0,0,50,20),this, IDC_EDITT1);现在想实现类似对话框中的数据交换功能。我的方法是:
void CMatlabPrintView::DoDataExchange(CDataExchange* pDX) 
{
// TODO: Add your specialized code here and/or call the base class
CView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMatlabPrintView)
DDX_Text(pDX, IDC_EDITT1, m_dT1);
//}}AFX_DATA_MAP
}可是没有效果,怎么回事呀?谢谢。

解决方案 »

  1.   

    有了DoDataExchange就不要再Create了
      

  2.   

    IDC_EDITT1是在资源编辑时放进去的吗?如果不是的话,在运行DoDataExchange时,你的编辑框还没有生成,IDC_EDITT1和m_dT1当然关联不上。可以设断点来验证。
      

  3.   

    我不是在资源编辑时放进去的 而是用用代码生成 不用create怎么行呢?
      

  4.   

    直接在资源对话框上面拖放一个Edit控件,加上DoDataExchange的关联。不要再创建了。
      

  5.   

    动态创建和窗口子类化(DoDataExchange or SubClassWindow)不要在一起用,既然已经子类化了,就没必要再动态创建了.
      

  6.   

    不是从 CFormView继承的View类能直接发放Edit控件吗?
      
     
      

  7.   

    直接用
    editT1.SetWindowText( m_dT1 );
    editT1.GetWindowText( m_dT1 );
      

  8.   

    感觉自己说的还不是很清楚,把相关的代码写出来:
    我的DoDataExchange是要在class CMatlabPrintView : public CView中实现的
    能直接拖放控件到View类中吗?怎么弄呀?int CMatlabPrintView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;
        editT1.Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
    CRect(T1x,T1y,T1x+30,T1y+20),this, IDC_EDITT1);        return 0;
    }
    void CMatlabPrintView::DoDataExchange(CDataExchange* pDX) 
    {
    // TODO: Add your specialized code here and/or call the base class
    CView::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMatlabPrintView) DDX_Text(pDX, IDC_EDITT1, m_dT1); //}}AFX_DATA_MAP
    }
      

  9.   

    LZ这样做岂不多此一举,既然动态创建已经得到edit对象或者指针,直接用editT1.SetWindowText和editT1.GetWindowText不就可以了
      

  10.   

    在运行DoDataExchange时,你的编辑框还没有生成,IDC_EDITT1和m_dT1当然关联不上.
    _____________________________________________________________________________
    我同意着个说法,所以我的做法是:
    在初始化(OnInitDialog())函数里加:
             editT1 = new CEdit();//要加这条语句
    editT1->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE 
    | WS_TABSTOP | WS_BORDER,CRect(0,0,50,20),this, IDC_EDITT1);
    在函数的开头声名一个全局的控件变量:CEdit *editT1;
    在函数的其他地方使用editT1去处理这个edit,如:editT1->SetWindowText("edit");