代码之家  ›  专栏  ›  技术社区  ›  foraidt

如何使MDI子窗口保持在其兄弟窗口的顶部?

  •  1
  • foraidt  · 技术社区  · 17 年前

    这个问题与 my previous one.

    我有一个MFC(VC6)MDI应用程序,它有几个MDI子窗口,可以作为一个文档的不同视图。

    是否有可能将其中一个框架设置为位于其他框架之上?

    SetWindowPos(
       &GetParentFrame()->wndTopMost,
       0, 0, 0, 0,
       SWP_NOMOVE | SWP_NOSIZE);
    

    ModifyStyleEx(0, WS_EX_TOPMOST);
    

    来自CMDIChildWnd,但似乎都不起作用。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Aidan Ryan    17 年前

    在CMDIChildWnd类(通常是CChildFrame)中,添加一个静态 HWND m_hTopWnd 。将其设置为您希望始终位于首位的孩子的HWND。

    手柄 WM_WINDOWPOSCHANGED 在……里面 CChildFrame .在处理程序中,检查当前 m_hWnd == m_hTopWnd 如果没有,请致电

    ::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0, 
        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
    

    这样,每当设置任何MDI子窗口的位置时,“始终在顶部”窗口都会被推回顶部。

    还要处理 WM_CLOSE 当顶部窗口关闭时,将m_hTopWnd=NULL。

    另请参见: CodeProject article MSDN knowledgebase

        2
  •  0
  •   Serge Wautier    17 年前

    你们确定将子窗口放在其他窗口之上是好的UI设计吗?这不应该成为一个单独的最上面的框架吗?还是控制栏?

    推荐文章