用MFC做的登入时界面跳转的一些问题

CoolEgos 2014-04-29 07:38:08
我希望首先有个输入用户名和密码的界面,然后点击登入界面以后就登入到另外一个界面
我用这个函数
this->ShowWindow(SW_HIDE);     //隐藏本对话框

可以将登入的对话框隐藏
但是我继续登入的时候它又把第一个已经登入的对话框给隐藏了


VC 6.0上面好像可以用
CDialog::OnOK();


而VS 2010这个方法好像不行

VS 2010如何解决这个问题啊??
...全文
703 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2014-06-10
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
sichuanwww 2014-05-10
  • 打赏
  • 举报
回复
lis2012 2014-05-10
  • 打赏
  • 举报
回复
引用 6 楼 A38017032 的回复:
[quote=引用 1 楼 lis2012 的回复:] 先说一下你的代码this->ShowWindow(SW_HIDE); 这里只是隐藏窗体并没有销毁,而CDialog::OnOK();调用了系统的OnOK函数,这个函数销毁了窗体 我给你提供一个思路,你这里估计是使用的对话框程序,所以你可以在CxXXXapp类中的 BOOL CXXXXXApp::InitInstance() 函数中 你有个登陆对话框名称为 CLoginDlg CLoginDlg dlg; if(dlg.DoModal()!=IDOK)//具体的验证你可以在CLoginDlg ::OnOK()函数中如果正确就调用CDialog:: OnOK() { // 验证失败可以退出了 return FALSE; } //验证成功 这里可以显示 你的主对话框了
CMap3DDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
这样还是有一个问题呢?就是我只要关闭登入窗口(就是点击X)那么工作窗口就会弹出来[/quote] 点击关闭以后else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 return;//后边的代码不会执行,所以其他的窗口也不会显示的 }
china_119 2014-05-07
  • 打赏
  • 举报
回复
引用 5 楼 A38017032 的回复:
[quote=引用 3 楼 china_119 的回复:] 一个登录窗口,一个工作窗口。 工作模式如果是先登录,验证通过才显示工作窗口。 BOOL CXXXXXApp::InitInstance()//注意这里是工作窗口的APP 创建登录窗口 显示登录窗口(在登录窗口类中处理用户名密码验证) 删除登录窗口 创建工作窗口 显示工作窗口 你的问题在于你想在同一个窗口中实现两个不同的对话界面(分别适用于登录和工作)。不是不可以。而是太麻烦了,用上述的方式作更方便.楼上说的也是这个意思.
MFC里面的界面跳转都是这样的吗??那如果跳转的界面很多的话那不是很麻烦了吗?[/quote] 如果需要操作的界面比较多的话(这里指的是同一进程里)可以考虑用属性页的方式去做。就是上方是每个子页面的标签。点击标签进入相应的子页面。
CoolEgos 2014-05-06
  • 打赏
  • 举报
回复
引用 1 楼 lis2012 的回复:
先说一下你的代码this->ShowWindow(SW_HIDE); 这里只是隐藏窗体并没有销毁,而CDialog::OnOK();调用了系统的OnOK函数,这个函数销毁了窗体 我给你提供一个思路,你这里估计是使用的对话框程序,所以你可以在CxXXXapp类中的 BOOL CXXXXXApp::InitInstance() 函数中 你有个登陆对话框名称为 CLoginDlg CLoginDlg dlg; if(dlg.DoModal()!=IDOK)//具体的验证你可以在CLoginDlg ::OnOK()函数中如果正确就调用CDialog:: OnOK() { // 验证失败可以退出了 return FALSE; } //验证成功 这里可以显示 你的主对话框了
CMap3DDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
这样还是有一个问题呢?就是我只要关闭登入窗口(就是点击X)那么工作窗口就会弹出来
CoolEgos 2014-05-06
  • 打赏
  • 举报
回复
引用 3 楼 china_119 的回复:
一个登录窗口,一个工作窗口。 工作模式如果是先登录,验证通过才显示工作窗口。 BOOL CXXXXXApp::InitInstance()//注意这里是工作窗口的APP 创建登录窗口 显示登录窗口(在登录窗口类中处理用户名密码验证) 删除登录窗口 创建工作窗口 显示工作窗口 你的问题在于你想在同一个窗口中实现两个不同的对话界面(分别适用于登录和工作)。不是不可以。而是太麻烦了,用上述的方式作更方便.楼上说的也是这个意思.
MFC里面的界面跳转都是这样的吗??那如果跳转的界面很多的话那不是很麻烦了吗?
CoolEgos 2014-05-06
  • 打赏
  • 举报
回复
引用 2 楼 A38017032 的回复:
[quote=引用 1 楼 lis2012 的回复:] 先说一下你的代码this->ShowWindow(SW_HIDE); 这里只是隐藏窗体并没有销毁,而CDialog::OnOK();调用了系统的OnOK函数,这个函数销毁了窗体 我给你提供一个思路,你这里估计是使用的对话框程序,所以你可以在CxXXXapp类中的 BOOL CXXXXXApp::InitInstance() 函数中 你有个登陆对话框名称为 CLoginDlg CLoginDlg dlg; if(dlg.DoModal()!=IDOK)//具体的验证你可以在CLoginDlg ::OnOK()函数中如果正确就调用CDialog:: OnOK() { // 验证失败可以退出了 return FALSE; } //验证成功 这里可以显示 你的主对话框了
CMap3DDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
我没听的很懂,你的意思是在按钮事件里面进行验证,得到某个值,然后在登入以后的对话框里面的InitInstance函数里面写东西?[/quote] MFC里面的界面跳转都是这样的吗??那如果跳转的界面很多的话那不是很麻烦了吗?
china_119 2014-04-29
  • 打赏
  • 举报
回复
一个登录窗口,一个工作窗口。 工作模式如果是先登录,验证通过才显示工作窗口。 BOOL CXXXXXApp::InitInstance()//注意这里是工作窗口的APP 创建登录窗口 显示登录窗口(在登录窗口类中处理用户名密码验证) 删除登录窗口 创建工作窗口 显示工作窗口 你的问题在于你想在同一个窗口中实现两个不同的对话界面(分别适用于登录和工作)。不是不可以。而是太麻烦了,用上述的方式作更方便.楼上说的也是这个意思.
CoolEgos 2014-04-29
  • 打赏
  • 举报
回复
引用 1 楼 lis2012 的回复:
先说一下你的代码this->ShowWindow(SW_HIDE); 这里只是隐藏窗体并没有销毁,而CDialog::OnOK();调用了系统的OnOK函数,这个函数销毁了窗体 我给你提供一个思路,你这里估计是使用的对话框程序,所以你可以在CxXXXapp类中的 BOOL CXXXXXApp::InitInstance() 函数中 你有个登陆对话框名称为 CLoginDlg CLoginDlg dlg; if(dlg.DoModal()!=IDOK)//具体的验证你可以在CLoginDlg ::OnOK()函数中如果正确就调用CDialog:: OnOK() { // 验证失败可以退出了 return FALSE; } //验证成功 这里可以显示 你的主对话框了
CMap3DDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
我没听的很懂,你的意思是在按钮事件里面进行验证,得到某个值,然后在登入以后的对话框里面的InitInstance函数里面写东西?
lis2012 2014-04-29
  • 打赏
  • 举报
回复
先说一下你的代码this->ShowWindow(SW_HIDE); 这里只是隐藏窗体并没有销毁,而CDialog::OnOK();调用了系统的OnOK函数,这个函数销毁了窗体 我给你提供一个思路,你这里估计是使用的对话框程序,所以你可以在CxXXXapp类中的 BOOL CXXXXXApp::InitInstance() 函数中 你有个登陆对话框名称为 CLoginDlg CLoginDlg dlg; if(dlg.DoModal()!=IDOK)//具体的验证你可以在CLoginDlg ::OnOK()函数中如果正确就调用CDialog:: OnOK() { // 验证失败可以退出了 return FALSE; } //验证成功 这里可以显示 你的主对话框了
CMap3DDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}

15,979

社区成员

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

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