为什么我在OnInitDialog方法中调用CDialog::OnCancel()无法退出对话框啊。

解决方案 »

  1.   

    看看OnCancel()写的位置 一定要在return之前,还有return False
    调试一下
      

  2.   

    对话框都没有创建好,调用OnCancle()当然没有用了.如果要退出对话框,像二楼所说return FALSE.
      

  3.   

    把this->OnCancel();放在return TRUE; 前面就可以了
      

  4.   

    可以是可以了,不过有内存调用错误,这是为什么啊。我把我的代码贴上来帮我分析一下嘛,谢谢!
    CDialog::OnInitDialog();
    int linkPort;
    long lEvent;
    CString serverPort;
    CString serverIP;
    CString szMsg;
    lEvent= FD_READ|FD_CLOSE|FD_CONNECT|FD_WRITE; serverPort.Format("3000");
    GetPrivateProfileString("ServerInfo","PORT","3000",
    serverPort.GetBuffer(0),MAX_PATH,"./Server.ini");
    linkPort = atoi(serverPort.GetBuffer(0)); switch(InitSocket(&logonSocket, linkPort, m_hWnd,  CM_LOGONMESSAGE, lEvent))
    {
    case 0: //加载套接字失败
    szMsg.Format("加载套接字失败\ncode:\t%d", WSAGetLastError());
    MessageBox(szMsg,"错误提示",MB_OK|MB_ICONINFORMATION);
    break;
    case -1: //创建套接字失败
    szMsg.Format("创建套接字失败\ncode:\t%d", WSAGetLastError());
    MessageBox(szMsg,"错误提示",MB_OK|MB_ICONINFORMATION);
    break;
    case -2: //绑定IP地址出错
    szMsg.Format("绑定IP地址出错\ncode:\t%d", WSAGetLastError());
    MessageBox(szMsg,"错误提示",MB_OK|MB_ICONINFORMATION);
    break;
    case -3: //IP地址无郊
    szMsg.Format("IP地址无郊\ncode:\t%d", WSAGetLastError());
    MessageBox(szMsg,"错误提示",MB_OK|MB_ICONINFORMATION);
    break;
    default:
    break;
    }
    nConnStatus = 0;
    //连接服务器 serverIP.Format("127.0.0.1");
    GetPrivateProfileString("ServerInfo","IP","127.0.0.1",
    serverIP.GetBuffer(0),MAX_PATH,"./Server.ini");
    //我发现问题就在这儿,如果没有上面这一句就不会出错.
    if(!ConnectServer(logonSocket,serverIP.GetBuffer(0) , linkPort)){
    CDialog::OnCancel();
    return FALSE;
    }
    /*//等待服务端发来的连接正常的应答信息
    int time = 0;
    while(time < 50){
    time++;
    Sleep(300);
    if(nConnStatus == -1){ //连接服务器出错
    CString szMsg;
    szMsg.Format("连接服务器出错,是否重新连接?\ncode:\t%d", WSAGetLastError());
    if(MB_OK == MessageBox(szMsg,"错误提示",MB_YESNO|MB_ICONQUESTION))
    continue;
    closesocket(logonSocket);
    CDialog::OnCancel();
    return FALSE;
    }
    if(nConnStatus == 1)
    break;
    }
    */
    if(!nConnStatus){
    szMsg.Format("连接服务器超时\ncode:\t%d", WSAGetLastError());
    MessageBox(szMsg,"错误提示",MB_OK|MB_ICONINFORMATION);
    closesocket(logonSocket);
    CDialog::OnCancel();
    return FALSE;
    } CString username, password, autologon;
    GetPrivateProfileString("[UserInfo]","AUTOLOGO","0",
    autologon.GetBuffer(0),MAX_PATH,"./Server.ini");
    GetPrivateProfileString("[UserInfo]","USER","",
    username.GetBuffer(0),MAX_PATH,"./Server.ini");
    GetPrivateProfileString("[UserInfo]","PWD","",
    password.GetBuffer(0),MAX_PATH,"./Server.ini");
    m_un = username;
    m_psw = password;
    UpdateData(FALSE);
    if(autologon.Compare("1"))
    OnOK(); return TRUE;
      

  5.   

    好了,现在我的问题已经解决了。我将serverIP的数据类型改为char*就没有错误了.谢谢各位