• Lunes 29 de Abril de 2024, 06:39

Autor Tema:  Botón cambia de imagen al pulsarlo  (Leído 1371 veces)

seba_500

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Botón cambia de imagen al pulsarlo
« en: Viernes 10 de Abril de 2009, 19:36 »
0
Hola,

uso el Visual Studio 2005 y tengo este código para cargarle una imagen a un botón:

Código: Text
  1. CBitmap btn1;
  2. btn1.LoadBitmapW(IDB_BITMAP3);
  3. btn_em1.ModifyStyle(0,BS_BITMAP);
  4. btn_em1.SetBitmap(btn1);
  5. btn_em1.RedrawWindow();
  6.  

donde btn_em1 es variable de tipo CButton y este código está dentro de su manejador de clicks.

El problema es q me carga la imagen justo al pulsarlo (es lo que quiero) pero sólo me la mantiene mientras el raton se quede sobre la misma (yo quisiera que ya se quedara fija).

Sabéis qué falla??

Gracias x anticipado y saludos.

                                    -Seba-

p.d Encontré un tema abierto sobre esto pero no me resolvía la duda y al ir a preguntar ahí mismo salió un mensaje q me aconsejaba crear uno nuevo.
"Si no puedes deslumbrar con tu inteligencia, desconcierta con gilipolleces"

seba_500

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Botón cambia de imagen al pulsarlo
« Respuesta #1 en: Martes 14 de Abril de 2009, 02:19 »
0
Hey,

alguna sugerencia? Como lo haríais/hacéis vosotros?
Daos cuenta que yo uso la variable asociada al button, de tipo CButton.

Por ahí he leído algo sin usarla y por tanto accediendo al botón como recurso del diálogo principal (obteniendo un puntero al mismo con la función "GetDlgItem" o algo similar) pero en principio no me gustaría tener que hacerlo así.
"Si no puedes deslumbrar con tu inteligencia, desconcierta con gilipolleces"

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Botón cambia de imagen al pulsarlo
« Respuesta #2 en: Martes 14 de Abril de 2009, 10:28 »
0
Por lo que veo la variable CBitmap es local al método en el que lo cargas, por lo que cuando salga de ámbito será destruida y el bitmap (que se asocia con el handle del CBitmap, no se copia), apuntará a cualquier lado. El bitmap ha de ser una variable miembro del diálogo. Ésta permanece pintada hasta que el botón se invalida y cuando tira a pintarse a sí mismo, el bitmap ya no está.

Otra cosa, cuando asignes el bitmap al botón, debes hacerlo mediante la llamada GetSafeHandle() del propio bitmap.

Por otro lado, podrías usas CBitmapButton, y especificar tres bitmpas diferentes, uno para el botón normal, otro para cuando esté presionado y uno más para cuando esté deshabilitado.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

seba_500

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Botón cambia de imagen al pulsarlo
« Respuesta #3 en: Miércoles 15 de Abril de 2009, 00:57 »
0
Hey, gracias rfog!!!

Efectivamente era eso. Al hacer la variable CBitmap global a todo el diálogo ya la imagen se queda cargada.

En cuanto a lo de usar CBitmapButton, parece interesante. Si tengo tiempo lo probaré (no me vendría mal tener 3 posibles apariencias pal botón ese)

Saludos
"Si no puedes deslumbrar con tu inteligencia, desconcierta con gilipolleces"