我建立了一个基于对话框的MFC应用程序,里面有一个主窗口,在主窗口中的一个按钮点击事件里创建了另一个窗口(Dlg2),并将Dlg2显示出来(这时Dlg2是在主窗口的前端的,即覆盖了主窗口)。我想在Dlg2中的一个按钮的点击事件里实现让主窗口显示在子窗口的前端,但一直实现不了,希望高手解答!主窗口中创建Dlg2的方法如下:void CD2Dlg::OnButton1()
{
if(m_pDlg2 == NULL)
{
m_pDlg2 = new CDialog2;
m_pDlg2->Create(IDD_DIALOG1);
m_pDlg2->SetParent(this);
m_pDlg2->ShowWindow(SW_SHOW);
}
m_pDlg2->SetActiveWindow();
}
在Dlg2的按钮点击事件里是这样写的:void CDialog2::OnButton1()
{
CWnd *pParentWnd = this->GetParent();
pParentWnd->SetActiveWindow();
//pParentWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}被注释掉的SetWindowPos也用过,没有效果。还有用过SetForegroundWindow(),但同样没有。我还看到一位高手在别人的回帖中说了:存在父子关系的窗口中,上面用的那些方法是无效的(如SetWindowPos,SetForegroundWindow)。那么我想问下,怎样才能去掉窗口之间的这种父子关系呢?

解决方案 »

  1.   

    怎样才能去掉窗口之间的这种父子关系呢?
    -------------------------------------------
    SetParent(NULL)你也可以在CDialog2::OnButton1()里面隐藏子窗口,需要的时候再显示,看起来就像是子窗口到后面了。
      

  2.   

    m_pDlg2->Create(IDD_DIALOG1);
    -->
    m_pDlg2->Create(IDD_DIALOG1, GetDesktopWindow());
      

  3.   


    SetParent(CDialog2, NULL)
    注意查MSDN,参数要正确,不要照搬
      

  4.   

    你把m_pDlg2->SetParent(this);
    去掉不就可以了!
      

  5.   

    void CXXDlg::OnOK() 
    {
    // TODO: Add extra validation here

    CNewDlg* pDlg = new CNewDlg;
    pDlg->Create(IDD_DIALOG1, GetDesktopWindow());
    pDlg->ShowWindow(SW_SHOW);
    SetForegroundWindow();
    }
      

  6.   


    用了你的方法还是不行,当我点击Dlg2中的按钮时,程序遇到错误挂掉了!
    Dlg2中的按钮事件:void CDialog2::OnButton1()
    {
    CWnd *pParentWnd = this->GetParent();
    if(pParentWnd == GetDesktopWindow())
    MessageBox("YES");
    else
    MessageBox("no"); // 这里被执行到了
    pParentWnd->SetActiveWindow();
    //pParentWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
    }
      

  7.   

    楼上,帮我解决一下,是否可留下email?
      

  8.   


    LZ,这里大家是帮忙找出问题的原因或者解决方案,不是包办问题。
    LZ最终还是应该自己去解决。
    人,总是要靠自己的
      

  9.   

    去掉topmost属性
    CRect winrect;
    GetWindowRect(&winrect);
    SetWindowPos(&this->wndNoTopMost, winrect.left, winrect.top, winrect.Width(), winrect.Height(), SWP_NOSIZE);