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.

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top