一个基于对话框的应用,在主对话框中放置了两个上下紧邻的无标题栏的子对话框。运行过程中,下边子对话框可能需要伸缩来调整窗口位置,而上边那个字对话框无需调整窗口位置。问题在于下边的子对话框在向上拉伸的时候,代码虽然调整了位置,但是界面上看不到了该子对话框,我怀疑是该子对话框没有被置前,请问该怎么做,谢谢。

解决方案 »

  1.   

    window关系是怎样的?
    下面的这个子对话框是主对话框的child吗? 有WS_CHILD吗?如果有,应该会自动放在主对话框前面的。 如果不是,SetWindowPos改变Z-order可以吗
      

  2.   

    window关系是怎样的? 
    一个主对话框嵌套2个上下并列的字对话框。
    ===========================================下面的这个子对话框是主对话框的child吗? 有WS_CHILD吗?

    ===========================================如果有,应该会自动放在主对话框前面的。 如果不是,SetWindowPos改变Z-order可以吗
      

  3.   

    用::SetWindowPos( m_hWnd,HWND_TOP,rt.left,rt.top,rt.Width(),rt.Height(),SWP_SHOWWINDOW);试试但是不管怎么设置 要想让两个窗口同时处于最上层是不可能的 如果两个窗口可以拖动的话 肯定会有遮盖的时候的
      

  4.   

    给楼主一个建议,把上下对话框填充不同的颜色,看得更清楚一些。
    下对话框在前端显示有两种方法
    1 CDialog dlg2;
    dlg2.SetForegroundWindow();
    2 CDialog dlg2;
    dlg2.SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0,
          SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
      

  5.   

    光简单调用::SetWindowPos是不行的,给你个函数void BringWindowToTop(HWND hWnd)
    {
    if (::IsWindow(hWnd))
    {
    ::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
    ::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
    }
    }
      

  6.   

    调整的时候用MoveWindow分别改变两个子对话框的大小,确保两个子对话框不重叠。