class CCom : public CDialog其中有一IDC_EDIT控件而后:
void CMyDlg::OnRecvData()
{
CCom com;
com.DoModal();
com.SetDlgItemText(IDC_EDIT1,"asd");
}
我要它在执行OnRecvData时弹出一CCom型对话框并IDC_EDIT1中值设置为"asd";
但问题是为什么只能显示对话框,而IDC_EDIT控件中没显示“asd”呢??

解决方案 »

  1.   

    com.SetDlgItemText(IDC_EDIT1,"asd");放在DoModal前面
      

  2.   


    或改为GetDlgItem(IDC_EDIT1)->SetWindowText("asd");
      

  3.   

    两个都试过了,
    如何com.SetDlgItemText(IDC_EDIT1,"asd");或com.GetDlgItem(IDC_EDIT1)->SetWindowText("asd");放到DoModal前面执行时都报错!真是搞不明白
      

  4.   

    放到DoModal之前之后都不可以。
    放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
    放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。正确做法:用Create创建,然后ShowWindow,然后再调用那个函数。
              而且不能在函数内部声明com,那样很快函数执行完退出,com也就销毁了。
      

  5.   

    使用DoModal的方法:
    对IDC_EDIT1映射一个字符串变量m_ed1,因为是私有的,令加在CCom中加函数:
    void CCom::SetValue(CString str)
    {
      m_ed1 = str;
    }调用时:
    void CMyDlg::OnRecvData()
    {
    CCom com;
             com.SetValue("asd");
    com.DoModal();
    }
    这样DoModal时触发OnInitialDialog事件,会刷新。
      

  6.   

    还是放在DoModal()后,GetDlgItem(IDC_EDIT1)->SetWindowText("asd");
      

  7.   

    放到DoModal之前之后都不可以。
    放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
    放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。正确做法:用Create创建,然后ShowWindow,然后再调用那个函数。
              而且不能在函数内部声明com,那样很快函数执行完退出,com也就销毁了。
    --------------------------------------
    顶这个
      

  8.   

    我觉得最好的方法是在CCom型对话框中的初始化OnInitDialog()函数中加入这些代码,肯定没有问题,为什么一定要在那个地方得到呢?即使不愿意在初始化中得到,也可以在CCom类的IDC_EDIT1编辑框的更新函数中得到.
      

  9.   

    放到DoModal之前之后都不可以。
    放到前面:界面对象还没有创建(只是声明了对象),对界面的操作肯定出错。
    放到后面:DoModal在界面退出后才返回,因此界面显示时,一直执行不到后面的语句。
    ------------------------
    同意把SetDlgItemText(IDC_EDIT1,"asd")这句放到CCom的OnInitDialog() 里。
      

  10.   

    可以,但还有问题请教!放到前面:界面对象还没有创建(只是声明了对象),
    void CMyDlg::OnRecvData()
    {
    CCom com;
             com.SetValue("asd");
    com.DoModal();
    }
    --------------------------------------------------------
    我试了Ivy_zheng(最后一只恐龙)的第二个方法(定义一成员函数SetValue),可以
    但为什么行呢??
    我原先com.SetDlgItemText(IDC_EDIT1,"asd");不也是com的一个成员函数吗,为什么又不行呢?
      

  11.   

    我的问题是:为什么前者可以,后者不行?
    void CMyDlg::OnRecvData()                   void CMyDlg::OnRecvData()      
    {                                            {
    CCom com;                               CCom com;
     //SetValueCComm类中的成员函数     //SetDlgItemText也是CCom类的成员函呀(继承的)  
             com.SetValue("asd");                  com.SetDlgItemText(IDC_EDIT1,"asd");
    com.DoModal();                    com.DoModal();
    }                                            }
     
      

  12.   

    因为前者是字符串变量m_ed1,CCom com后,m_ed1已经分配空间,但窗体还没有创建
        后者是窗体控件IDC_EDIT1,只有当DoModal后它才存在,
    所以后者不行前者使用的映射,当DoModal中创建窗体时,会自动将m_ed1的值赋给IDC_EDIT1控件