Como hacer una ventana secundaria MDI estar al tanto de sus hermanos?
-
09-09-2019 - |
Pregunta
Esta pregunta se relaciona con mi anterior uno.
Tengo una aplicación MFC (VC6) MDI que tiene varias ventanas MDI secundarios que actúan como puntos de vista diferentes para un mismo documento.
¿Es posible establecer una de esas tramas para mantenerse por encima de los demás?
He tratado de llamar
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
y
ModifyStyleEx(0, WS_EX_TOPMOST);
Del CMDIChildWnd pero ninguno parece funcionar.
Solución
En la clase CMDIChildWnd (por lo general CChildFrame), añadir un HWND m_hTopWnd
estática. Establezca su valor en el HWND del niño desea estar siempre en la parte superior.
WM_WINDOWPOSCHANGED
manija en CChildFrame
. En el controlador, compruebe si el m_hWnd == m_hTopWnd
actual. Si no es así, la llamada
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
De esta manera cada vez que se establece la posición de cualquier ventana secundaria MDI, la ventana "siempre encima" será empujado de nuevo a la parte superior.
también manejar WM_CLOSE
y cuando la ventana superior se está cerrando, establecer m_hTopWnd = NULL.
Vea también: CodeProject artículo y MSDN base de conocimiento
Otros consejos
¿Estás seguro de que es un buen diseño de interfaz de usuario para mantener una ventana secundaria en la parte superior de los demás? No debería convertirse en un marco superior separada? O una barra de control?