为什么我无法在OnInitDialog中退出对话框 为什么我在OnInitDialog方法中调用CDialog::OnCancel()无法退出对话框啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看OnCancel()写的位置 一定要在return之前,还有return False调试一下 对话框都没有创建好,调用OnCancle()当然没有用了.如果要退出对话框,像二楼所说return FALSE. 把this->OnCancel();放在return TRUE; 前面就可以了 可以是可以了,不过有内存调用错误,这是为什么啊。我把我的代码贴上来帮我分析一下嘛,谢谢! 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; 好了,现在我的问题已经解决了。我将serverIP的数据类型改为char*就没有错误了.谢谢各位 一道C++/MFC/VC6问题分析题 如何将一个文本嵌入到程序中 串口发送数据郁闷死了,请各位指点一下 大家做软件设置部分的窗体一般都是用属性页继承来的吗 如何在RichEdit中加入表格 基于CListBox的列表控件,怎样才能使其具有拖放动属性呢?(急求....) 已经没得办法了,求助高手。如何获取WIN7桌面图标名称位置等? 串口异步通信 导出类问题 MFC Static Text控件画点画不出来 对话框隐藏问题 vc制作标签页。。。
调试一下
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;