我有三个窗体,启动顺序如下:
系统自动启动A窗体,A窗体按下OK按钮自己隐身,再启动B窗体,B窗体启动的同时会启动一个C窗体压在B窗体之上。看起来B和C窗体有点像父子窗体结构。我用的代码如下:
A窗体:
void CADlg::OnOK()
{
CBDlg BDlg;
BDlg.DoModal();
ShowWindow(SW_HIDE);
}B窗体:
int CBDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
//创建子窗体
pChildWnd=new CCDlg(this);
pChildWnd->Create(IDD_CDLG_DIALOG);
pChildWnd->ShowWindow(SW_SHOW);
return 0;
}这些代码写出来,出乎我意料的是:这B窗体怎么老盖在C窗体之上?和我预料的恰恰相反。请高手指点。
系统自动启动A窗体,A窗体按下OK按钮自己隐身,再启动B窗体,B窗体启动的同时会启动一个C窗体压在B窗体之上。看起来B和C窗体有点像父子窗体结构。我用的代码如下:
A窗体:
void CADlg::OnOK()
{
CBDlg BDlg;
BDlg.DoModal();
ShowWindow(SW_HIDE);
}B窗体:
int CBDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
//创建子窗体
pChildWnd=new CCDlg(this);
pChildWnd->Create(IDD_CDLG_DIALOG);
pChildWnd->ShowWindow(SW_SHOW);
return 0;
}这些代码写出来,出乎我意料的是:这B窗体怎么老盖在C窗体之上?和我预料的恰恰相反。请高手指点。
如果只有A和B两个窗体,没有C窗体。
我在A窗体的Create事件中用下面代码://创建子窗体
pChildWnd=new CBDlg(this);
pChildWnd->Create(IDD_BDLG_DIALOG);
pChildWnd->ShowWindow(SW_SHOW);B窗体自己会永远飘在A窗体上,单击A窗体,使A变成活动窗体,B都变灰了还是不下去,这是怎么回事?
其实就是你要做SetParent();你google下SetParent, SetOwner(), 就知道必须要SetParent的。
void CADlg::OnOK()
{
ShowWindow(SW_HIDE);
CBDlg BDlg;
BDlg.DoModal();
ShowWindow(SW_SHOW);
}
B窗体在DoModal之前 是不是已经 OnCreate了?如果,那么C肯定先出来了,因为他在B的OnCreate里就Show了..
CMyDlg *m_dlg = NULL;
m_dlg = new CMyDlg(this);
m_dlg->Create(IDD_MYDLG, GetDesktopWindow());//注意这个参数就行了
m_dlg->ShowWindow(SW_SHOW);
CMyDlg *m_dlg = NULL;
m_dlg = new CMyDlg(CDialog::GetDesktopWindow());//窗体的话就用Cwnd对话框就用CDialog
m_dlg->DoModal();
void CADlg::OnOK()
{
ShowWindow(SW_HIDE);
CBDlg BDlg;
BDlg.DoModal();
ShowWindow(SW_SHOW);
}B窗体:
int CBDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;//创建子窗体
pChildWnd=new CCDlg;
pChildWnd->Create(IDD_CDLG_DIALOG, GetDesktopWindow());
pChildWnd->ShowWindow(SW_SHOW);
return 0;
}