这个问题与 我的上一个。

我有一个 MFC (VC6) MDI 应用程序,它有多个 MDI 子窗口,充当一个文档的不同视图。

是否可以将其中一个框架设置为位于其他框架之上?
我试过打电话

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

ModifyStyleEx(0, WS_EX_TOPMOST);

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

有帮助吗?

解决方案

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

处理 WM_WINDOWPOSCHANGEDCChildFrame. 。在处理程序中,检查当前是否 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。

也可以看看: 代码项目文章MSDN 知识库

其他提示

您确定这是很好的用户界面设计,以保持一个子窗口在别人的顶部?如果不是这成为一个独立的最顶层的框架?或控制杆?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top