La Web del Programador: Comunidad de Programadores
 
    Pregunta:  27872 - BARRA SEPARADORA
Autor:  Luis
Hola a tod@s,

Programo en VC++ y he creado una aplicacion SDI con una barra 'split' perteneciente a 'CMainFrame' (como el explorador de windows). Al seleccionar una opción de menú, la vista de la derecha del 'split' (y sólo esa) debe ser sustituida por otra distinta (obviamente con el mismo documento). ¿Cómo lo hago? He conseguido sustituirla mediante:

m_wndSplitter.DeleteView(0,1);
m_wndSplitter.CreateView(0, 1, pSearchClass, CSize(0,0), &context);

pero sólo se hace visible al desplazar o presionar la barra 'split', nunca antes. ¿Porqué no se visualiza? ¿Que me falta?

Gracias de antemano ...

  Respuesta:  Eduard Pascual
No estoy del todo seguro, pero creo que hay una forma (algo chapucera) de resolver tu problema.
Si no lo he entendido mal, la ventana no se actualiza hasta que se produce un click o un drag en la barra separadora. En tal caso, tal vez baste con hacer creer al sistema que se ha producido un click.
Si tu programa no hace nada al clickar la barra, crea un evento vacío, si hace algo, ya tienes el evento creado. Hecha un vistazo a la función que maneja el evento: si llamas manualmente a esa función, se debería simular un click en la barra separadora y, por tanto, actualizar la ventana.
Puede surgir un pequeño problema si ya tienes código como respuesta al evento del click: se ejecutará tanto las veces que se produzca un click como cuando hagas la llamanda manual a la función. Como solución a esto, puedes crear una variable bool o int (externa a la función) en la que controles si el evento es real o simulado. Algo así:
bool simulado;
cambiar vista(){
...
simulado = true;
barra_evento_click();
...
}
barra_evento_click(){
if (simulado){
simulado = false;
return;
}else{
//codigo del evento
}
return;}

Espero que te sirva de ayuda.
by Herenvardö