C/Visual C - Redibujar en Visual C y menus largos

 
Vista:

Redibujar en Visual C y menus largos

Publicado por José Luis Sogorb (3 intervenciones) el 04/05/2001 21:49:23
Saludos:
Estoy haciendo un programa en Visual C++, que se baja una página html de Internet, lee los
datos que necesita de dicho fichero y genera un gráfico con los mismos. La
función que lo realiza es:

void CMeteoGraficaView::OnCargarDatos()
{
//Función para conectarse y bajar fichero de Internet
getHttp();
//Lee fichero de datos y adquiere resultados para gráfica
leeFichero();
}

La gráfica se realiza dentro de la función
void CMeteoGraficaView::OnDraw(CDC* pDC) pero, claro, hasta que no se redibuja
la pantalla (se minimiza,p. ej.) no aparece el gráfico. La función
OnCargarDatos() es llamada desde un item de un menú. Qué debo hacer para que
automáticamente se dibuje el gráfico al pulsar el menú?.
Y otra pregunta:
En uno de los menus se debe selecionar entre más de 40 opciones. Por defecto me
crea un menú largo que tiene unas flechas arriba y abajo para poder acceder a
todo. Hay alguna manera de dividir el menú en paneles adosados repartiendo los
items para que se visualicen todos?(del modo de como se muestran los programas
en
el menú Inicio - Programas de windows).
Muchas gracias

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Dibujar gráfico automáticamente al pulsar un menú y dividir menú en paneles adosados

Publicado por Alejandro (913 intervenciones) el 24/09/2024 20:06:35
Saludos, José.

Para que el gráfico se dibuje automáticamente al pulsar el menú, puedes llamar a la función `Invalidate()` después de llamar a la función `leeFichero()`. Esto provocará que la vista se invalide y se solicite un redibujo, lo que a su vez llamará a la función `OnDraw()` para dibujar el gráfico actualizado en la pantalla. Aquí tienes un ejemplo de cómo modificar tu código:

1
2
3
4
5
6
7
8
9
10
void CMeteoGraficaView::OnCargarDatos()
{
    // Función para conectarse y bajar fichero de Internet
    getHttp();
    // Lee fichero de datos y adquiere resultados para gráfica
    leeFichero();
 
    // Invalida la vista y solicita un redibujo
    Invalidate();
}

En cuanto a la segunda pregunta, si deseas dividir el menú en paneles adosados para que se visualicen todos los elementos, puedes utilizar submenús. Puedes crear submenús dentro del menú principal y agregar los elementos correspondientes a cada submenú. De esta manera, los elementos se organizarán en paneles adosados y se podrán visualizar todos los elementos sin necesidad de utilizar las flechas de desplazamiento.

Aquí tienes un ejemplo de cómo crear un submenú en Visual C++:

1
2
3
4
5
6
7
8
9
10
11
CMenu menuPrincipal;
menuPrincipal.CreateMenu();
 
CMenu submenu;
submenu.CreatePopupMenu();
submenu.AppendMenu(MF_STRING, ID_OPCION1, _T("Opción 1"));
submenu.AppendMenu(MF_STRING, ID_OPCION2, _T("Opción 2"));
 
menuPrincipal.AppendMenu(MF_POPUP, (UINT_PTR)submenu.m_hMenu, _T("Submenú"));
 
SetMenu(&menuPrincipal);

En este ejemplo, se crea un menú principal (`menuPrincipal`) y un submenú (`submenu`). Se agregan elementos al submenú utilizando la función `AppendMenu()`. Luego, se agrega el submenú al menú principal utilizando la bandera `MF_POPUP` en la función `AppendMenu()`. Finalmente, se establece el menú principal utilizando la función `SetMenu()`.

Espero que esta información te sea útil. ¡Buena suerte con tu programa!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar