一)如题,首先我定义了一个对话框,此类中有公共成员函数:OnUpdateControls(),代码如下:
void CFRDlg::OnUpdateControls()
{
m_picture.ShowWindow(SW_SHOWNORMAL);
m_picture1.ShowWindow(SW_HIDE);
        GetDlgItem(IDC_PROGRAMMING)->EnableWindow(TRUE);}二)通过点击此对话框中的菜单项,创建了模态对话框。
void CFRDlg::OnConnect() 
{
CConnect conDlg;
conDlg.DoModal();
}三)我想通过点击模态对话框中的OK按钮来调用对话框中的公共成员函数OnUpdateControls(),来更新对话框中的控件状态。我试过了指针,对象,有元等都会有问题,请帮忙看看是什么原因,或者还有什么更好的方法来实现:a)用对象,编译OK,但是运行时报错:“Debug Asserition Failed!  Pragram:.. gram Files\Debug\FR.exe    File:winocc.cpp   Line:301”。代码如下:
void CConnect::OnOK() 
{
// TODO: Add extra validation here

CDialog::OnOK();
CFRDlg cfrDlg;
cfrDlg.OnUpdateControls();
}b) 考虑到对象的生命周期等问题,我用了指针,运行时还是报错:“Debug Asserition Failed!  Pragram:.. gram Files\Debug\FR.exe    File:winocc.cpp   Line:301”,代码如下:
void CConnect::OnOK() 
{
// TODO: Add extra validation here
CDialog::OnOK();
CFRDlg *cfrDlg=new CFRDlg();
cfrDlg->OnUpdateControls();
}3)用友元,连接的时候出错。请大家帮我解决此问题。

解决方案 »

  1.   


    void CConnect::OnOK() 
     
    {
    // TODO: Add extra validation here
    CFRDlg* m_dlg=(CFRDlg*)GetParent();
    m_dlg->msg();
    CDialog::OnUpdateControls();
    }这样做就可以了
      

  2.   

    晕一个,
    对话框new了之后都没有Create,相信你的picture也没有创建吧,你就让它ShowWindow,要知道ShowWindow之前要检查窗口句柄,这里就通不过,几个问题类似。
    解决:
    做一个有参构造,CConnect conDlg(CFRDlg* pDlg);
    然后
    void CFRDlg::OnConnect() 

    CConnect conDlg(this); 
    conDlg.DoModal(); 

    然后在OnOk里面把指针取出来OnUpdateControls(); 
      

  3.   

    void CFRDlg::OnConnect() 

    CConnect conDlg; 
    if(conDlg.DoModal()==IDOK)
    {CDialog::OnUpdateControls();} 

    这样应该可以,当conDlg对话框中点OK按钮就执行OnUpdateControls()
      

  4.   

    你的代码有很大的问题:
    CDialog::OnOK(); 
    之后不应该再写代码。
    CConnect类中定义一个成员变量:CFRDlg *cfrDlg
    void CFRDlg::OnConnect() 

    CConnect conDlg; 
    conDlg.cfrDlg=this;
    conDlg.DoModal(); 
    } void CConnect::OnOK() 

    // TODO: Add extra validation here cfrDlg->OnUpdateControls(); 
    CDialog::OnOK();