在编程的时候 有这么一段代码
void CTcpclientDlg::OnClose() 
{
 int confirm=MessageBox("确定退出吗","请确定",MB_YESNO|MB_ICONQUESTION);
 if(confirm==IDYES){
  CString enterinfo=clientname+"退出了聊天室";
  int len=enterinfo.GetLength();
  clconect.Send(enterinfo,len); 
  CDialog::OnClose();
 }
}CTcpclientDlg是CDialog 派生出来的,OnClose封装在CDialog 内 这里关闭 窗口为什么要用CDialog::OnClose,而不直接调用 OnClose呢!!!另外,我试了直接用CTcpclientDlg类的函数来调用OnClose的方法,结果始终弹出提示框要我确定是否关闭窗口,谁知道是什么原因吗??

解决方案 »

  1.   

    重载了CDialog::OnClose的方法,不加CDialog调用OnClose()就是调用自身重载过的函数,
    形成递归
      

  2.   

    这不属于mfc知识! 这属于C++基础概念!
      

  3.   

    你试一下把你的TcpDialog的onClose()写成virtual函数.
      

  4.   

    CTcpclientDlg是CDialog 派生出来的,OnClose封装在CDialog 内 这里关闭 窗口为什么要用CDialog::OnClose,而不直接调用 OnClose呢!!!你直接调用OnClose可是调用你CTcpclientDlg类的OnClose函数,而不是基类的OnClose
      

  5.   

    简单说,我反问你,你觉得OnClose和close是做了同样的事情吗?
      

  6.   

    CDialog::OnClose()
    是在调用父类CDialog本身的OnClose()函数,直接用OnClose()的话会调用本类型里重载的OnClose()
      

  7.   


    是啊 当时我就在想改选择哪个论坛,但这个是在做MFC时出现的问题嘛