• Sábado 14 de Diciembre de 2024, 17:59

Autor Tema:  Usar funciones GDI tras pulsar un comando  (Leído 1406 veces)

maxstepin

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Usar funciones GDI tras pulsar un comando
« en: Martes 5 de Enero de 2010, 13:12 »
0
Hola.
Quiero que el programa responda y dibuje una linea como resultado de presionar un elemento de menu.
De momento solo puedo dibujar procesando los mensajes WM_PAINT:

{
Código: C
  1. HDC hdc;
  2. PAINTSTRUCT est;
  3.  
  4. switch(mensaje)
  5. {
  6.         hdc = BeginPaint(hwnd, &est);
  7.         Ellipse(hdc, 10, 10, 100, 100);
  8.         EndPaint(hwnd, &est);
  9.         break;
  10.  
  11.  

Pero esto lo dibuja al principio cuando la ventana es mostrada por 1 vez, yo lo que quiero que la ventana no muestre nada hasta que pulse el boton de menu correspondiente. Porque si proceso el comando WM_COMMAND como puedo hacer que envie un mensaje WM_PAINT y que identifique el comando pulsado?
GRacias por adelantado.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Usar funciones GDI tras pulsar un comando
« Respuesta #1 en: Lunes 11 de Enero de 2010, 13:25 »
0
pues en el WM_COMMAND, si se dan las condiciones, puedes llamar a :

UpdateWindow

o

RedrawWindow

son sutilmente diferentes miratelas en msdn.

Deberias mirar tambien InvalidateRect...  


PD:
a ese switch le faltan cases...

EI: juntando mensajes.

Cita de: "maxstepin"
WM_COMMAND como puedo hacer que envie un mensaje WM_PAINT y que identifique el comando pulsado?
te vendran en los lparam y wparam.

maxstepin

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Usar funciones GDI tras pulsar un comando
« Respuesta #2 en: Lunes 11 de Enero de 2010, 16:26 »
0
Código: C
  1. case WM_COMMAND:
  2.         comando = LOWORD(wParam);
  3.         InvalidateRect(hwnd, NULL, TRUE);
  4.         //UpdateWindow(hwnd);
  5.  

updatewindow por si solo no funciona, lo he visto en algun ejemplo justo despues de showwindow, pero jamas he entendido su funcionamiento (¿no esta dentro del procedimiento de ventana sino dentro de main).
InvalidateRect se que envia el mensaje WM_PAINT a la ventana de nuevo.