我调用dlg.DoModal();打开一个模式对话框,然后在对话框上添加一个按钮,单击此按钮调用this->OnCancel();退出!!模式对话框退出来了,但是也退出了整个系统。
系统中的其他模式对话框就没有此问题。
这个模式对话框一开始还没有这个问题,后来不知道怎么的就有了这个问题。
是不是因为我的VC是盗版的,所以才。
有遇到过这种情况的吗?

解决方案 »

  1.   

    1 是不是在OnCancel()里面有退出的代码?
    2 在DoModal()返回之后是不是有退出的代码?
      

  2.   

    不能用this->OnCancel();
    而应当用CDialog::OnCancel();
    你应该看看这个按钮的ID是不是IDCANCEL如果是的话,这就成了一个递归调用。
      

  3.   

    我做过实验了JFlyer(姜飞 [email protected]) 说的是对的假如你的按纽的ID是IDCANCEL,那么添加的函数如下,你调用的函数如下,则不行,则会递归调用CDialog::OnCancel, 而第一次的CDialog::OnCancel是退出模式对话框,而第二次是退出第二个对话框,如果还有上一级,则会一直退的,所以一定会退出整个程序的。
    void CB::OnCancel() 
    {
       this->OnCancel();
      CDialog::OnCancel();
    }
      

  4.   

    1、程序没有异常,正常操作。
    2、ID为IDCANCEL的按钮没有添加单击事件。
    3、我把ID为IDCANCEL的按钮删除,新添加一个按钮,
       ID:IDC_BUTTON9,
       单击事件:
    void CProduIn::OnButton9() 
    {
    // TODO: Add your control notification handler code here
    this->OnCancel();
    }
    4、OnCancel()函数没有重载。栈溢出???就不明白了。
      

  5.   

    你的目的是退出本对话框,那就不要用this->OnCancel();退出,可能发生异常
      

  6.   

    我知道原因了。
    我添加了一个静态文本,ID改为IDC_STACOUNT,添加Control、CStatic类型的变量m_stacount,
    然后就出现了这个情况。
    我把m_stacount变量删除以后,就只退出模式对话框了。
    这个对话框已经定义了40个变量,Control类型,CEdit、CComboBox、CStatic、CButton
    m_stacount是第41个变量。原因已经找到,问题可以解决,但不明白为什么?