如何使MDI子窗口保持在其兄弟姐妹之上?

时间:2009-02-27 11:17:17

标签: mfc vc6 mdi always-on-top

此问题与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 个答案:

答案 0 :(得分:1)

在您的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子窗口的位置,“always on top”窗口就会被推回到顶部。

同时处理WM_CLOSE,当顶部窗口关闭时,设置m_hTopWnd = NULL。

另请参阅:CodeProject articleMSDN knowledgebase

答案 1 :(得分:1)

您确定将儿童窗口置于其他窗口之上是否是良好的UI设计?这不应该成为一个单独的最顶层框架吗?还是一个控制栏?