Comment faire une fenêtre enfant MDI rester au-dessus de ses frères et sœurs?
-
09-09-2019 - |
Question
Cette question est liée à href="https://stackoverflow.com/questions/591508/user-interface-best-way-to-toggle-mdi-frames-on-top-status"> .
J'ai une application MDI MFC (VC6) qui a plusieurs fenêtres enfant MDI agissant comme des vues différentes pour un seul document.
Est-il possible de définir un de ces cadres pour rester au-dessus des autres?
J'ai essayé d'appeler
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
et
ModifyStyleEx(0, WS_EX_TOPMOST);
de la CMDIChildWnd mais ne semble fonctionner.
La solution
Dans votre classe CMDIChildWnd (généralement CChildFrame), ajoutez un HWND m_hTopWnd
statique. Le mettre à l'HWND de l'enfant que vous voulez être toujours sur le dessus.
Poignée WM_WINDOWPOSCHANGED
en CChildFrame
. Dans le gestionnaire, vérifiez si le m_hWnd == m_hTopWnd
courant. Dans le cas contraire, appel
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
De cette façon, chaque fois que la position d'une fenêtre enfant MDI est définie, la fenêtre « toujours au-dessus » sera repoussé vers le haut.
gérer aussi WM_CLOSE
et quand la fenêtre du haut est la fermeture, définissez m_hTopWnd = NULL.
Voir aussi: CodeProject article et MSDN knowledgebase
Autres conseils
Êtes-vous sûr qu'elle est bonne conception de l'interface utilisateur de garder une fenêtre enfant au-dessus des autres? Devrait pas devenir un cadre distinct le plus élevé? Ou une barre de contrôle?