es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MFC, aplicación SDI, ¿Por qué el diseño de las vistas no puede ser cambiado mediante código?

Soy nuevo en MFC. Acabo de crear una aplicación SDI con el asistente, luego intenté modificar el código generado para controlar la disposición de cada vista, barra de herramientas o menú:


m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)

DockPane(&m_wndToolBar); // m_wndToolBar es una barra de herramientas

DockPane(&m_wndFileView);
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
DockPane(&m_wndOutput);
// m_wndFileView, m_wndClassView, m_wndOutput son algunas vistas.

Pero parece que no funciona: las ventanas siempre se comportan como si recordaran la última operación realizada por el usuario. Por ejemplo, las últimas 3 líneas de código crean 3 vistas como esta:

View post on imgur.com

Ejecuté el código y lo cerré, luego las modifiqué a:

DockPane(&m_wndFileView);
DockPane(&m_wndOutput);
m_wndClassView.AttachToTabWnd(&m_wndOutput, DM_SHOW, TRUE, &pTabbedBar);

Supongo que debería aparecer así pero falló (Esta captura de pantalla no es el resultado de la ejecución, cambié el diseño manualmente):

https://i.stack.imgur.com/2REEy.png

Mantiene el diseño de la última vez que se cerró (como en la imagen 1). Además, cualquier cambio manual en el diseño realizado por el usuario se puede recordar. Entonces, ¿por qué? ¿Quién dijo que se debía hacer así?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el diseño de la aplicación SDI no se actualiza incluso después de modificar el código puede deberse a las siguientes razones:

    1. La aplicación recuerda el diseño guardado anteriormente y las modificaciones en el código no lo han sobrescrito.
    2. El marco de acoplamiento de MFC no se está utilizando correctamente.

    Para solucionar este problema, se pueden seguir los siguientes pasos:

    1. Para sobrescribir el diseño guardado, es necesario restablecer o eliminar la aplicación manualmente. Una forma de hacer esto es eliminar los datos de la aplicación almacenados en el registro o eliminar los archivos .sdf si existen. Esto restablecerá el diseño cuando se vuelva a lanzar la aplicación.
  2. Al utilizar el marco de acoplamiento de MFC, es importante usarlo correctamente. El marco de acoplamiento utiliza una jerarquía de paneles y barras, y cada panel puede contener una o más barras. Para crear un diseño, los paneles deben acoplarse o adjuntarse entre sí de una manera específica.

  3. Por ejemplo, para crear el diseño en la segunda captura de pantalla proporcionada, el código debe modificarse de la siguiente manera:

    DockPane(&m_wndOutput, AFX_IDW_DOCKBAR_BOTTOM); 
    DockPane(&m_wndClassView, AFX_IDW_DOCKBAR_LEFT, &m_wndOutput);
    DockPane(&m_wndFileView, AFX_IDW_DOCKBAR_LEFT, &m_wndClassView);
    

    Esto creará un diseño donde la ventana de salida está acoplada en la parte inferior, la vista de clases está acoplada a la izquierda de la ventana de salida y la vista de archivos está acoplada a la izquierda de la vista de clases.

    También es importante asegurarse de crear y acoplar los paneles en el orden correcto.

    Siguiendo estos pasos, se puede controlar y modificar con éxito el diseño de la aplicación SDI.

Comments are closed.