非模态对话框的关闭有关问题
非模态对话框的关闭问题
如果我在非模式对话框的CreateWindow之后 加上了 SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);
并且在回调函数WndProc里面 加入
switch (message)
{
case WM_TIMER:
if (CONNECT&&BitFlag)
{
BitFlag = false;
DibEvent(hWnd);
BitFlag = true;
}
break;
}
现在有几个问题搞不明白
1.在关闭时,是应该选择WM_DESTROY还是WM_CLOSE ??
2.回调函数WndProc什么时候结束??在收到关闭消息后马上结束还是执行完后面代码?
3.WM_DESTROY后,会造成客户端无反应,机器变慢,像进入了死循环,这是代码
case WM_DESTROY:
ScreenClose();
closesocket(ServerSock);
AfxMessageBox("WM_DESTROY响应");
CONNECT = FALSE;
break;
而ScreenClose()函数为
BOOL ScreenClose()
{
int iMsg;
int Flag;
iMsg=US_CLOSE;
//连接套接字
CONNECT = ConnectSock();
if (!CONNECT)
MessageBox(0,"套接字连接错误!", "管理系统",MB_OK|MB_APPLMODAL);
//Accept Flag
recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);
if (Flag == US_FLAG)
{
//发送鼠标移动消息
send(ServerSock,(char*)&iMsg,sizeof(iMsg)+1,MSG_OOB);
//SendMousePoint(hWnd);
}
return 1;
}
为什么执行该代码的客户端会无响应?处于死机状态
------解决方案--------------------
看深入浅出MFC的程序生与死,第一章内容里面就有,
如果我在非模式对话框的CreateWindow之后 加上了 SetTimer(hWnd,IDT_TIMER,US_TIME,NULL);
并且在回调函数WndProc里面 加入
switch (message)
{
case WM_TIMER:
if (CONNECT&&BitFlag)
{
BitFlag = false;
DibEvent(hWnd);
BitFlag = true;
}
break;
}
现在有几个问题搞不明白
1.在关闭时,是应该选择WM_DESTROY还是WM_CLOSE ??
2.回调函数WndProc什么时候结束??在收到关闭消息后马上结束还是执行完后面代码?
3.WM_DESTROY后,会造成客户端无反应,机器变慢,像进入了死循环,这是代码
case WM_DESTROY:
ScreenClose();
closesocket(ServerSock);
AfxMessageBox("WM_DESTROY响应");
CONNECT = FALSE;
break;
而ScreenClose()函数为
BOOL ScreenClose()
{
int iMsg;
int Flag;
iMsg=US_CLOSE;
//连接套接字
CONNECT = ConnectSock();
if (!CONNECT)
MessageBox(0,"套接字连接错误!", "管理系统",MB_OK|MB_APPLMODAL);
//Accept Flag
recv(ServerSock,(char*)&Flag,sizeof(Flag)+1,0);
if (Flag == US_FLAG)
{
//发送鼠标移动消息
send(ServerSock,(char*)&iMsg,sizeof(iMsg)+1,MSG_OOB);
//SendMousePoint(hWnd);
}
return 1;
}
为什么执行该代码的客户端会无响应?处于死机状态
------解决方案--------------------
看深入浅出MFC的程序生与死,第一章内容里面就有,