MFC关于如何隐藏和显示主窗体

西安风影 2009-03-06 09:00:52
BOOL CXaInfoClientDlg::OnInitDialog()//主窗体
{
CDialog::OnInitDialog();
。。。。。

m_pSocket = new CSocketClient(this);
if(!m_pSocket->Create())
{
MessageBox("创建Socket失败","提示",MB_ICONINFORMATION);
exit(0);
}
if(!m_pSocket->Connect(loginDlg.m_ServerIP,4321))
{
MessageBox("服务器已关闭","提示",MB_ICONINFORMATION);
exit(0);
}

if(loginDlg.DoModal()==IDOK)//调用子窗体
{
memset(&m_userInfo,0,sizeof(USER_INFO));
memcpy(&m_userInfo.userName[0],LPCTSTR(loginDlg.m_UserName),loginDlg.m_UserName.GetLength());
memcpy(&m_userInfo.password[0],LPCTSTR(loginDlg.m_Password),loginDlg.m_Password.GetLength());

m_pSocket->Send((char*)(&messageHead),sizeof(MESSAGE_HEAD),0);
m_pSocket->Send((char*)(&m_userInfo),sizeof(USER_INFO),0);
在这里如何使主窗体不显示

}
else
{
exit(0);
}
return TRUE;
}

void CXaInfoClientDlg::ProcessReceive(CSocketClient* pSocketClient)
{
MESSAGE_HEAD messageRcvHead;
memset(&messageRcvHead,0,sizeof(MESSAGE_HEAD));
pSocketClient->Receive((char*)(&messageRcvHead),sizeof(MESSAGE_HEAD),0);

if(messageRcvHead.messageType == 'n')
{
验证客户端成功,显示主窗体
}
}

我就想实现这样的功能,请问应该如何实现,可能我这样调用子窗体的时机也是错的,希望高手给予指导。
...全文
1356 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonykee 2010-12-25
  • 打赏
  • 举报
回复
我也正在找这个问题
西安风影 2009-03-19
  • 打赏
  • 举报
回复
cnzdgs方案可行
CNNRNNCNNRNN 2009-03-06
  • 打赏
  • 举报
回复
楼主的这种搞不法似乎不妥,登陆验证窗口可先于主窗口的创建显示,直接在app类的InitInstance中先显示验证窗口,待验证通过再显示主窗口
cnzdgs 2009-03-06
  • 打赏
  • 举报
回复
在CXxxApp::InitInstance里面用new构造CXaInfoClientDlg,调用Create函数创建对话框,然后return TRUE。这样创建的对话框是不显示的,需要显示时调用ShowWindow函数。另外还需要重载OnOK和OnCancel函数,执行DestoryWindow和PostQuitMessage,再重载PostNcDestroy函数,执行delete this。
yc_8301 2009-03-06
  • 打赏
  • 举报
回复
loginDlg.DoModal()
该成使用非模态对话框就可以隐藏主窗体了,待登陆后再显示
不知道符合不符合LZ的要求。
西安风影 2009-03-06
  • 打赏
  • 举报
回复
up
yangangs 2009-03-06
  • 打赏
  • 举报
回复
学习
西安风影 2009-03-06
  • 打赏
  • 举报
回复
主窗体一开始就隐藏,那我什么时候让子窗体显示呢。
ouyh12345 2009-03-06
  • 打赏
  • 举报
回复
socket操作可能会延时,在OnInitDialog函数里做这些操作可能导致长时间界面不能出现
主窗体一开始就隐藏,显示登录界面,点连接后开始socket操作
我是苦力 2009-03-06
  • 打赏
  • 举报
回复
那里隐藏的话,就什么都没有了,子窗体也没有了
我是苦力 2009-03-06
  • 打赏
  • 举报
回复
this->ShowWindow(SW_HIDE); 隐藏
this->ShowWindow(SW_SHOW); 显示
西安风影 2009-03-06
  • 打赏
  • 举报
回复
主要是socket发送消息得一段时间响应,所以不好控制。
SWenJing 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 whuchlee 的回复:]
楼主的这种搞不法似乎不妥,登陆验证窗口可先于主窗口的创建显示,直接在app类的InitInstance中先显示验证窗口,待验证通过再显示主窗口
[/Quote]
在theapp的InitInstance函数的开始出调用DoMdal()函数

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧