C/Visual C - Bitmap con máscara

 
Vista:

Bitmap con máscara

Publicado por luis (17 intervenciones) el 16/11/2001 10:25:42
Hola a tod@s,

Programo en Visual C++ y me gustaría que alguien me respondiera de cómo puedo crear un botón CButton que contenga un bitmap, siendo uno de sus colores utilizado como máscara (zona transparente), al igual que se puede hacer en una CToolBar asignándole una lista de imágenes CImageList con el 'flag' ILC_MASK.

¿Se puede asignar una lista de imágenes (con una sóla imagen) a un botón CButton?
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

Asignar un bitmap con transparencia a un CButton en Visual C++

Publicado por Alejandro (913 intervenciones) el 22/10/2024 22:11:44
¡Hola, Luis! Para crear un botón `CButton` que contenga un bitmap con un color de máscara (transparente) en Visual C++, puedes seguir estos pasos:

Pasos para asignar un bitmap a un CButton



1. Cargar el bitmap: Primero, necesitas cargar el bitmap que deseas usar en el botón.

2. Crear un CImageList: Aunque no puedes asignar directamente un `CImageList` a un `CButton`, puedes usar un `CImageList` para manejar la imagen y luego dibujarla en el botón.

3. Dibujar el bitmap en el CButton: Sobrescribe el método `OnPaint` del botón para dibujar el bitmap con la transparencia.

Ejemplo de código



Aquí tienes un ejemplo de cómo hacerlo:

1. Cargar el bitmap



Asegúrate de tener un bitmap en tu proyecto. Puedes cargarlo en el constructor de tu clase de botón.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <afxwin.h>
#include <afxext.h>
 
class CMyButton : public CButton {
public:
    CImageList m_ImageList;
 
    CMyButton() {
        // Cargar el bitmap
        m_ImageList.Create(32, 32, ILC_COLOR32 | ILC_MASK, 1, 0);
        CBitmap bmp;
        bmp.LoadBitmap(IDB_MY_BITMAP); // IDB_MY_BITMAP es el ID de tu bitmap
 
        // Agregar el bitmap a la lista de imágenes
        m_ImageList.Add(&bmp, RGB(255, 255, 255)); // Usar el color blanco como máscara
    }
 
protected:
    afx_msg void OnPaint() {
        CPaintDC dc(this); // Objeto de dispositivo de contexto
 
        // Dibujar la imagen en el botón
        m_ImageList.Draw(&dc, 0, CPoint(0, 0), ILD_TRANSPARENT);
    }
 
    DECLARE_MESSAGE_MAP()
};
 
BEGIN_MESSAGE_MAP(CMyButton, CButton)
    ON_WM_PAINT()
END_MESSAGE_MAP()

2. Usar el CMyButton en tu diálogo



En tu diálogo, puedes crear una instancia de `CMyButton` y agregarla al diálogo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CMyDialog : public CDialog {
public:
    CMyButton m_MyButton;
 
    CMyDialog() : CDialog(IDD_MY_DIALOG) {}
 
    BOOL OnInitDialog() {
        CDialog::OnInitDialog();
 
        // Crear el botón
        m_MyButton.Create(_T(""), WS_CHILD | WS_VISIBLE | BS_OWNERDRAW, CRect(10, 10, 42, 42), this);
        return TRUE;
    }
};

Consideraciones



- Transparencia: Asegúrate de que el color que uses como máscara (en este caso, blanco) sea el que deseas que sea transparente en el bitmap.
- Dibujo: El método `OnPaint` se encarga de dibujar el bitmap en el botón. Puedes ajustar la posición y el tamaño según sea necesario.
- Propiedades del botón: Puedes personalizar el estilo del botón según tus necesidades.

¡Buena suerte con tu proyecto!
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