在一个视图类点击一个菜单,弹出一个对话框,对话框有两个IDC_STATIC的静态文本框IDC_STATIC_KM,IDC_STATIC_M
然后将试图类的2个成员变量分别显示在IDC_STATIC_KM,IDC_STATIC_M这2个文本框内
void  CAPPView::ONclick()
{
CXXXDialog *dlg=new CXXXDialog;
dlg->SetDlgItemText(IDC_STATIC_KM,Tem_KM);//<------------------跟踪到此出错
dlg->SetDlgItemText(IDC_STATIC_M,Tem_M);
dlg->DoModal();}
编译没有问题,执行出错。这是什么原因呢,我下面这样实现就没有问题,想追根溯源以求更好的学习
void  CAPPView::ONclick()
{
CXXXDialog *dlg=new CXXXDialog;
dlg->m_STATIC_KM=Tem_KM;//<------------------Tem_KM,Tem_M为IDC_STATIC_KM,IDC_STATIC_M对应的数值变量
dlg->m_STATIC_M=Tem_M;
dlg->DoModal();}
是什么原因呢,请高手根据MFC或者windows应用程序的运行机制帮忙解答一下。
谢谢了。

解决方案 »

  1.   

    怀疑是Tem_KM的问题,做初始化了吗?
      

  2.   

    还有就是你只是new了一个对话框的指针这个对话框还没创建。。需要create
      

  3.   

    CXXXDialog *dlg=new CXXXDialog;//CXXXDialog还没有建立
    dlg->SetDlgItemText(IDC_STATIC_KM,Tem_KM);//SetDlgItemText之前会 ASSERT(::IsWindow(m_hWnd))
      

  4.   

    2楼正解.需要选Create.
    CXXXDialog *dlg=new CXXXDialog;//CXXXDialog还没有建立 
    dlg->Create(自已加参数.)
    dlg->SetDlgItemText(IDC_STATIC_KM,Tem_KM
      

  5.   

    我跟踪,这些变量数值都没有问题。
    您说Create怎么了呢,请继续,讲明了一点。
      

  6.   


    那我的第二种
    void  CAPPView::ONclick() 

    CXXXDialog *dlg=new CXXXDialog; 
    dlg->m_STATIC_KM=Tem_KM;// <------------------Tem_KM,Tem_M为IDC_STATIC_KM,IDC_STATIC_M对应的数值变量 
    dlg->m_STATIC_M=Tem_M; 
    dlg->DoModal(); } 
    这个为什么就能够成功呢,请高手深度解析一下,虽然知道怎么做,知道到底还是进步会快些。
      

  7.   

    谁能告诉我的第二种方法 
    void  CAPPView::ONclick()  
    {  
    CXXXDialog *dlg=new CXXXDialog;  
    dlg->m_STATIC_KM=Tem_KM;//  <------------------Tem_KM,Tem_M为IDC_STATIC_KM,IDC_STATIC_M对应的数值变量  
    dlg->m_STATIC_M=Tem_M;  
    dlg->DoModal();  }  
    这个为什么就能够成功呢,请高手解析一下
      

  8.   

    因为m_STATIC_KM和m_STATIC_M是一个变量不是窗口。 ,变量在对像new出来的时候就已在在了。所以不会出问题。
      

  9.   


    那用第二种方法成功的弹出对话框,也显示了相应的值,也是从前到后、也没有Create这个对话框它是在什么时候被创建的呢,而第一种方法为什么就不行。
      

  10.   

    dlg->DoModal();   这就是一种create 对话框的方式。。不知道你现在明白了吗?
      

  11.   


    比较模糊的知道了些,但是还有点就是,我用void  CAPPView::ONclick() 

    CXXXDialog *dlg=new CXXXDialog; 
    dlg->SetDlgItemText(IDC_STATIC_KM,Tem_KM);// <------------------跟踪到此出错 
    dlg->SetDlgItemText(IDC_STATIC_M,Tem_M); 
    dlg->DoModal(); }操作也有dlg->DoModal(); 啊
      

  12.   

    是有DoMoadl,但是你是在他DoModal之前做的操作啊