[C con Clase] Crear un Bitmap en tiempo de ejecucion y usarlo como fondo de un boton
Salvador Pozo
salvador en conclase.net
Dom Mar 4 14:53:53 CET 2012
El pasado 2012-03-03 13:54:01, clom escribió:
c> ...
c> Alguien tiene idea de como puedo hacer lo que quiero o por que no funciona lo que estoy intnetando?
Hola:
Sólo se me ocurre que estés haciendo algo mal, porque yo lo he intentado y si me funciona (aunque reconozco que me ha costado un poco :))
Sigue un pequeño ejemplo:
----8<------
HWND hctrl;
// Declaraciones necesarias:
static HDC hCompatibleDC;
RECT re = {0, 0, 63, 19};
HDC hDC;
switch (msg) /* manipulador del mensaje */
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
/* Insertar controles */
hctrl = CreateWindowEx(
0,
"BUTTON", /* Nombre de la clase */
"Bitmap", /* Texto del título */
BS_BITMAP | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,
160, 69, /* Posición */
95, 24, /* Tamaño */
hwnd, /* Ventana padre */
(HMENU)ID_BOTON5,/* Identificador del control */
hInstance, /* Instancia */
NULL); /* Sin datos de creación de ventana */
// Parte del código para crear un bitmap
hDC=GetDC(hwnd);
hCompatibleDC = CreateCompatibleDC(hDC);
hBitmap = CreateCompatibleBitmap(hDC, 64, 20);
SelectObject(hCompatibleDC, hBitmap);
// Dibujar el botón:
FillRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(WHITE_BRUSH ));
FrameRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(GRAY_BRUSH ));
Ellipse(hCompatibleDC, 20, 2, 44, 18);
// Liberar los DCs
ReleaseDC(0, hDC);
DeleteDC(hCompatibleDC);
SendMessage(hctrl, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap);
return 0;
...
case WM_DESTROY:
// Al destruir el diálogo destruir el bitmap:
DeleteObject(hBitmap);
...
----8<------
Para modificar el bitmap deberás volver a crear un DC compatible, seleccionar el bitmap en él, volver a dibujarlo y liberar el DC.
Supongo que habrá algunas diferencias entre este ejemplo y tu código.
Suerte, hasta pronto.
--
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Más información sobre la lista de distribución Cconclase