我有三个窗体,启动顺序如下:
系统自动启动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窗体之上?和我预料的恰恰相反。请高手指点。

解决方案 »

  1.   

    会不会是因为c窗体先show出来的
      

  2.   

    再提供一个线索:
    如果只有A和B两个窗体,没有C窗体。
    我在A窗体的Create事件中用下面代码://创建子窗体
    pChildWnd=new CBDlg(this);
    pChildWnd->Create(IDD_BDLG_DIALOG);
    pChildWnd->ShowWindow(SW_SHOW);B窗体自己会永远飘在A窗体上,单击A窗体,使A变成活动窗体,B都变灰了还是不下去,这是怎么回事?
      

  3.   

    pChildWnd->Create(IDD_CDLG_DIALOG, this);
      

  4.   


    其实就是你要做SetParent();你google下SetParent, SetOwner(), 就知道必须要SetParent的。
      

  5.   

    A窗体:
    void CADlg::OnOK()  
    {
    ShowWindow(SW_HIDE);
    CBDlg BDlg;
    BDlg.DoModal();
    ShowWindow(SW_SHOW);
    }
      

  6.   

    CBDlg BDlg;BDlg.DoModal();
    B窗体在DoModal之前 是不是已经 OnCreate了?如果,那么C肯定先出来了,因为他在B的OnCreate里就Show了..
      

  7.   

    老兄你吧C窗体的创建写在B窗体的OnCreate函数里当然是C先show然后B再show B理所当然的在C上了.打开一个对话框的程序执行顺序中OnCreate是在ShowWindow之前的
      

  8.   

    creat 在domodle 之前就调用了
      

  9.   

    这个是非模态对话框的创建问题,参数设置很重要 以例子说明
    CMyDlg *m_dlg = NULL;
    m_dlg = new CMyDlg(this);
    m_dlg->Create(IDD_MYDLG, GetDesktopWindow());//注意这个参数就行了
    m_dlg->ShowWindow(SW_SHOW);
      

  10.   

    或者这样做非模态对话框也可以
    CMyDlg *m_dlg = NULL;
    m_dlg = new CMyDlg(CDialog::GetDesktopWindow());//窗体的话就用Cwnd对话框就用CDialog
    m_dlg->DoModal();
      

  11.   

    A窗体:
    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;
    }