Pregunta

Tengo un cuadro principal con un divisor. A la izquierda tengo mi CAppView_Lefta (con un nombre imaginativo) y a la derecha tengo CAppView_Right_1 y CAppView_Right_2. Mediante el siguiente código, inicializo las dos vistas principales correctamente:

if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
    TRACE0("Failed to CreateStaticSplitter\n");
    return FALSE;
}
else 
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CAppView_Left), CSize(300, 200), pContext))
{
    TRACE0("Failed to create left pane\n");
    return FALSE;
}
else 
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_1), CSize(375, 200), pContext))
{
    TRACE0("Failed to create first right pane\n");
    return FALSE;
}

...

Lo que me gustaría hacer es crear una segunda vista dentro del marco derecho, sin embargo, cuando trato de agregar esto:

if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
{
    TRACE0("Failed to create first right pane\n");
    return FALSE;
}

VS compila pero no puede ejecutar la aplicación, generando una excepción que me dice que ya he definido la vista.

¿Alguien puede sugerir cómo hago esto? Además, ¿cómo cambiar entre las vistas desde una vista o desde la clase de documento?

¿Fue útil?

Solución

Hay un artículo de CodeProject que debería ayudarlo a lograr lo que desea:

http://www.codeproject.com/KB/splitter/usefulsplitter.aspx

He reemplazado vistas en un divisor antes, así que si lo anterior no ayuda, publicaré algo de mi propio código.

Otros consejos

No puede crear una segunda vista a la derecha porque su

m_wndSplitter.CreateStatic(this, 1, 2) 

solo ha creado dos columnas. Puedes cambiar esto a

m_wndSplitter.CreateStatic(this, 1, 3)

y cambie su segunda vista derecha a

if (!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CAppView_Right_2), CSize(375, 200), pContext))
{    
TRACE0("Failed to create first right pane\n");   
 return FALSE;
}

Esto da como resultado tres columnas cada una con una vista separada. También puede crear una ventana divisor adicional para dividir una de las vistas existentes, p. algo como

m_wndSplitter2.CreateStatic(m_View2, 2, 1)

donde m_view2 fue su segunda vista

Para cambiar entre vistas, deberá eliminar explícitamente ViewView antes de crear otra vista en su lugar.

Si necesita preservar el estado de las vistas intercambiables, será mejor que haga que las vistas puedan inicializar su estado desde el documento. Tenga cuidado de actualizar el documento con cualquier estado que deba permanecer entre la eliminación y la recreación de una de las vistas.

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