[简单] VC中关于窗口的小问题

cn_panguan 2008-04-12 05:55:26
我想用MFC做一个登陆型的软件,窗口我已经添加好了,现在就需要在程序刚开始运行时候设置1号窗体隐藏,2号窗体显示,

等我按了“登陆”按钮以后1号窗体显示,2号窗体销毁,这个功能不知道在哪里添加。具体代码能大概写一下吗?

在线等!!
...全文
65 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
RFbenson 2008-04-13
按照这个思路
在主对话框显示前,显示一个login对话框

BOOL CTest6App::InitInstance()
{
//...
int nResponse;
CLoginDlg loginDlg;

nResponse = loginDlg.DoModal();
if (nResponse == IDOK)
{
}
if (nResponse == IDCANCEL)
{
return FALSE;
}

CTest6Dlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK )
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}

然后重载CLoginDlg对话框的OnOK(),在其中判断条件
void CLoginDlg::OnOK()
{
if (条件满足)
CDialog::OnOK();
else
AfxMessageBox(_T("invalid password!"));
}
回复
cn_panguan 2008-04-13
继续我的痛苦又漫长的等待。
回复
cn_panguan 2008-04-13
在哪里初始化?在哪里隐藏dlg1?
回复
雨中的月儿 2008-04-13
楼上的至少有三个错误

1. 在主窗口的OnInitDialog()中,
CAddNum addNum; //创建登陆窗口的对象addNum
addNum.DoModal(); //登陆窗口显示出来

this->ShowWindow(SW_HIDE); //主界面隐藏

这段代码有问题,addNum.DoModal()是阻塞操作,程序一直会死在这儿,不会在CAddNum窗口销毁前运行到 “this->ShowWindow(SW_HIDE); //主界面隐藏”,因此,你说的“以上代码也成功了,程序运行起来的时候主窗口隐藏,登陆窗口显示出来了。”,其实并不是this->ShowWindow(SW_HIDE)起了作用,而是由于主窗口的OnInitDialog()函数没有执行完,因此,主窗口没有显示出来。

2. 在副窗口的OnOK()中,
CLoginTextDlg MainWin321;
试图通过如此构造一个窗口,来对主窗口进行操作,是不对的,绝对实现不了目的。因为MainWnd321,只是CLoginTextDlg的另外一个实例,而绝对不是你所想要的主窗口。

3. CLoginTextDlg MainWin321; //创建主窗口的对象MainWin321
MainWin321.ShowWindow(SW_SHOW); //将主窗口显示出来

上两句中,CLoginTextDlg构造了一个新的实例之后,它还不是一个窗口,只是一个实例,也就是说,它的GetSafeHwnd()根本就没有意义,因此,你对它进行ShowWindow()操作,必然会出现Assert错误。


如果想实现你所需要的功能,其实很简单,
(1) 把
CLoginTextDlg MainWin321; //创建主窗口的对象MainWin321
MainWin321.ShowWindow(SW_SHOW); //将主窗口显示出来
去掉就可以了。

(2)this->ShowWindow(SW_HIDE); //主界面隐藏
也要去掉。

回复
cn_panguan 2008-04-13
我在主窗口的OnInitDialog()函数中这样写的。
BOOL CLoginTextDlg::OnInitDialog()
{

CAddNum addNum; //创建登陆窗口的对象addNum
addNum.DoModal(); //登陆窗口显示出来

this->ShowWindow(SW_HIDE); //主界面隐藏
}

以上代码也成功了,程序运行起来的时候主窗口隐藏,登陆窗口显示出来了。

而我在副窗口中响应OK按钮的时候,出现了错误,副窗口的OK按钮响应函数入下:
void CAddNum::OnOK()
{
// TODO: Add extra validation here

this->ShowWindow(SW_HIDE); //副窗口隐藏

CLoginTextDlg MainWin321; //创建主窗口的对象MainWin321
MainWin321.ShowWindow(SW_SHOW); //将主窗口显示出来

CDialog::OnOK();
}


问题:
在debug模式下执行到“MainWin321.ShowWindow(SW_SHOW);” 这里的时候就提示错误,我不知道是什么原因,希望高手能解答我一下。
回复
bitxinhai 2008-04-12
窗口1:dlg1 ,窗口2:dlg2

如下操作:
dlg2.DoModal();
在他的一个按钮(OK)
里添加函数;里面
dlg1.DoModal
回复
cn_panguan 2008-04-12
高手来恢复下!!
回复
cn_panguan 2008-04-12
按钮在窗口2上呀。
回复
season030441 2008-04-12
不知道你的登陆按钮是否设在窗口2中。一开始的时候窗口2.show(1);窗口1.show(0);,当你点击登陆后,窗口2.show(0);窗口1.show(1);就可以了。
回复
cn_panguan 2008-04-12
??????
回复
cn_panguan 2008-04-12
自己顶了。等高手。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-04-12 05:55
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……