Wie ein untergeordnetes MDI-Fenster bleiben auf seiner Geschwister machen?
-
09-09-2019 - |
Frage
Diese Frage wird im Zusammenhang href="https://stackoverflow.com/questions/591508/user-interface-best-way-to-toggle-mdi-frames-on-top-status"> meinen vorherigen zum
Ich habe eine MFC (VC6) MDI-Anwendung, die mehr untergeordneten MDI-Fenster, die als unterschiedliche Ansichten für ein Dokument hat.
Ist es möglich, eine dieser Rahmen zu setzen oben auf den anderen zu bleiben?
Ich habe versucht anzurufen
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
und
ModifyStyleEx(0, WS_EX_TOPMOST);
aus dem CMDIChildWnd aber weder scheint zu funktionieren.
Lösung
In Ihrer CMDIChildWnd-Klasse (in der Regel CChildFrame), eine statische HWND m_hTopWnd
hinzufügen. Stellen Sie sie gleich den HWND des Kindes Sie immer oben sein wollen.
Handle WM_WINDOWPOSCHANGED
in CChildFrame
. In dem Handler, überprüfen Sie die aktuelle m_hWnd == m_hTopWnd
wenn. Wenn nicht, Anruf
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
Auf diese Weise, wenn die Position eines Fensters MDI Kindes eingestellt ist, werden die „always on top“ Fenster nach oben geschoben werden.
Griff Auch WM_CLOSE
und wenn das obere Fenster schließt, setzt m_hTopWnd = NULL.
Siehe auch: Codeproject Artikel und MSDN Knowledgebase
Andere Tipps
Sind Sie sicher, dass es eine gute UI-Design, ein Kind Fenster oben auf den anderen zu halten? Sollte dies nicht über einen separaten obersten Rahmen werden? Oder eine Steuerleiste?