SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: seba_500 en Viernes 10 de Abril de 2009, 19:36

Título: Botón cambia de imagen al pulsarlo
Publicado por: seba_500 en Viernes 10 de Abril de 2009, 19:36
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.
Título: Re: Botón cambia de imagen al pulsarlo
Publicado por: seba_500 en Martes 14 de Abril de 2009, 02:19
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í.
Título: Re: Botón cambia de imagen al pulsarlo
Publicado por: rfog en Martes 14 de Abril de 2009, 10:28
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.
Título: Re: Botón cambia de imagen al pulsarlo
Publicado por: seba_500 en Miércoles 15 de Abril de 2009, 00:57
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