mfc - una - tamaño de un panel java
MFC: ¿qué sabe un FrameWnd cuando se cambia el tamaño de un panel acoplado? (2)
Creo que el problema es que el ''contenido'' de CFrameWndEx es en sí mismo una ventana, y en esa ventana viven las ventanas de ''contenido principal''. Consulte con Spy ++ la jerarquía de la ventana y si alguna de las ventanas secundarias de CFrameWndEx (que no sean los paneles acoplables) recibe un mensaje cuando se cambian de tamaño. Básicamente, cuando se acoplan paneles de acoplamiento, el CFrameWndEx cambia el tamaño de sus elementos secundarios, por lo que tendría que detectarlo allí y (si es necesario) reflejar el mensaje de nuevo a CFrameWndEx si es realmente donde lo necesita.
Alternativamente, tal vez estoy malentendido y es lo que describí exactamente lo que estás tratando de hacer. En ese caso, creo que hay algo mal con la forma en que agrega su ventana a CFrameWndEx, ya que eso debería manejar el cambio de tamaño. ¿El padre de la ventana secundaria está configurado correctamente en CFrameWndEx cuando lo crea?
Tengo un CFrameWndEx con varios CDockablePanes acoplados pero parece que no me notifican cuando se cambia el tamaño del panel acoplado (para poder cambiar el tamaño de mis otras ventanas en consecuencia). Probé Spy ++ para buscar mensajes, pero el sorteo personalizado parece ser el único (que no parece apropiado) y también intenté anular RecalcLayout, pero no se llama bajo esta circunstancia. OnSize no funciona porque el tamaño del marco en sí no se modifica. ¿Algunas ideas?
(Ps: estoy bastante seguro de que es posible porque solía tener una ventana de división como el área de "cliente", y se redimensionaba mágicamente cuando los paneles se redimensionaron)
OK, esto es un poco raro, pero tenía exactamente la misma pregunta, busqué en Google, luego vi que había respondido a esta pregunta hace más de un año, pero entendí por completo de qué se trataba la pregunta :)
De todos modos, como referencia de futuros usuarios de Google, la respuesta a esta pregunta es anular el vacío virtual CFrameWndEx :: EAdjustDockingLayout (HDWP hdwp) y hacer cualquier cambio de tamaño de los controles del cliente allí. Para obtener el área del cliente después del ocultamiento / cierre / lo que sea de los paneles, use m_dockManager.GetClientAreaBounds (). My AdjustDockingLayout se ve así (m_View es la ventana secundaria que se supone que ocupa todo el área del cliente, independientemente del estado de los paneles de acoplamiento, se ajusta según sea necesario):
void CMainFrame::AdjustDockingLayout(HDWP hdwp)
{
CFrameWndEx::AdjustDockingLayout(hdwp);
if (m_View.GetSafeHwnd()) {
CRect rectUsable = m_dockManager.GetClientAreaBounds();
m_View.MoveWindow(rectUsable);
}
}