<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Hola, he seguido el ejemplo que me has puesto, que basicamente era lo que estaba haciendo yo, pero sigue sin hacer nada. Solo veo una diferencia y es que tu lo haces en la gestión del mensage WM_CREATE y yo lo hago en el WM_INITDIALOG ya que el boton está en en un dialogo que abro con CreateDialogParam en unas ocasiones y en otras con DialogBoxParam (aunque esta vez probe con uno abierto con la primera de las dos). Te voy a poner el codigo que he usado a ver si ves algo que se me escape.</span></div><div><br><span></span></div><div><span>#include "includes.h"<br><br>BOOL CALLBACK WProcPuntoProp(HWND hdwnd,UINT message, WPARAM wParam, LPARAM lParam)<br>{<br>    static HINSTANCE hInstance;<br>    HDC hDC;<br>    PAINTSTRUCT ps;<br>    RECT
 clien;<br>    HBRUSH hbrush;<br>    HPEN hpen;<br>    static HDC hDcmem;<br>    static PointProp* vistaprevia;<br>    static PointProp* Param;<br>    static PointProp Param_antiguo;<br>    static HBITMAP hBitmap;<br>    static HDC hCompatibleDC;<br>    RECT re = {0, 0, 63, 19};<br>    static HBITMAP hBitmap1;<br><br>    switch(message){<br><br>        case WM_INITDIALOG:<br>            hInstance = ((LPCREATESTRUCT)lParam)->hInstance;<br><br>            Param = (PointProp*)lParam;<br>            Param_antiguo = *Param;<br><br>           
 vistaprevia = new PointProp(31,Param->GetTipo(),Param->GetColor(), Param->GetRelleno());<br><br>            if(Param->GetRelleno() == true)<br>            {<br>                CheckDlgButton(hdwnd,IDC_CHECKBOX_RELLENO,BST_CHECKED);<br>            }<br><br>            GetClientRect(hdwnd,&clien);<br><br>            hDC = GetDC(hdwnd);<br>            hDcmem = CreateCompatibleDC(hDC);<br>            hBitmap =
 CreateCompatibleBitmap(hDC,clien.right,clien.bottom);<br>            hCompatibleDC = CreateCompatibleDC(hDC);<br>            hBitmap1 = CreateCompatibleBitmap(hDC, 64, 20);<br>            SelectObject(hCompatibleDC, hBitmap1);<br>            // Dibujar el botón:<br>            FillRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(WHITE_BRUSH ));<br>            FrameRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(GRAY_BRUSH ));<br>            Ellipse(hCompatibleDC, 20, 2, 44, 18);<br>           
 ReleaseDC(hdwnd,hDC);<br>            SelectObject(hDcmem,hBitmap);<br>            hpen = CreatePen(PS_SOLID,1,vistaprevia->GetColor());<br>            SelectObject(hDcmem,hpen);<br>            PatBlt(hDcmem,0,0,clien.right,clien.bottom,PATCOPY);<br>            SendDlgItemMessage(hdwnd,IDC_BUTTON1_RESPUNTOPROP, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap);<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"1");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0,
 (LPARAM)"3");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"5");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"7");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"9");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"11");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"15");<br>            SendDlgItemMessage(hdwnd, IDC_COMBO_TAM,CB_ADDSTRING, 0, (LPARAM)"21");<br>            SendDlgItemMessage(hdwnd,
 IDC_COMBO_TAM, CB_SELECTSTRING,(WPARAM)-1, (LPARAM)"7");<br>            break;<br><br>        case WM_SYSCOMMAND:<br>            switch(wParam)<br>            {<br>                case SC_CLOSE:<br>                    *Param = Param_antiguo;<br>                    EndDialog(hdwnd,-1);<br>                    break;<br>            }<br>           
 break;<br>        case WM_COMMAND:<br>           switch(LOWORD(wParam)) {<br>              case IDCANCEL_RESPUNTOPROP:<br>                *Param = Param_antiguo;<br>                 EndDialog(hdwnd, FALSE);<br>                 break;<br><br>              case IDC_CHECKBOX_RELLENO:<br>                if(IsDlgButtonChecked(hdwnd,IDC_CHECKBOX_RELLENO)==BST_CHECKED)<br>           
         {<br>                        vistaprevia->SetRelleno(true);<br>                    }else{<br>                        vistaprevia->SetRelleno(false);<br>                    }<br>                    InvalidateRect(hdwnd,NULL,TRUE);<br><br>              break;<br><br>              case
 IDOK_RESPUNTOPROP:<br>                 InvalidateRect(hdwnd,NULL,TRUE);<br>                 break;<br>           }<br>            break;<br><br>        case WM_PAINT:<br>            hDC = BeginPaint(hdwnd,&ps);<br>            GetClientRect(hdwnd,&clien);<br>            hbrush = CreateSolidBrush(RGB(240,240,240));<br>            SelectObject(hDcmem,hbrush);<br>           
 PatBlt(hDcmem,0,0,clien.right,clien.bottom,PATCOPY);<br>            vistaprevia->Figura(hDcmem,45,65);<br>            BitBlt(hDC,0,0,clien.right,clien.bottom,hDcmem,0,0,SRCCOPY);<br>            EndPaint(hdwnd,&ps);<br>            break;<br><br>            return TRUE;<br>    }<br>    return FALSE;<br>}<br></span></div><div><br><span></span></div><div><span>/////////////////////////////////</span></div><div><span>El fichero de recursos es <br></span></div><div>/////////////////////////////////</div><div><br></div><div>LANGUAGE 0, SUBLANG_NEUTRAL<br>IDD_RESPUNTOPROP DIALOG 0, 0, 221, 121<br>STYLE DS_3DLOOK | DS_ABSALIGN | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT |
 WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU | WS_MINIMIZEBOX<br>CAPTION "Detalles de Puntos"<br>FONT 8, "Ms Shell Dlg"<br>{<br>    DEFPUSHBUTTON   "Ok", IDOK_RESPUNTOPROP, 8, 99, 50, 14<br>    PUSHBUTTON      "Cancelar", IDCANCEL_RESPUNTOPROP, 71, 99, 50, 14<br>    LTEXT           "Vista Previa", IDC_STATIC_RESPUNTOPROP, 12, 16, 38, 8, SS_LEFT<br>    AUTOCHECKBOX    "Relleno", IDC_CHECKBOX_RELLENO, 12, 65, 50, 10<br>    LTEXT           "Tamaño", IDC_STATIC_RESPUNTOPROP, 103, 29, 27, 8, SS_LEFT<br>    LTEXT           "Símbolo", IDC_STATIC_RESPUNTOPROP, 104, 46, 26, 8, SS_LEFT<br>    COMBOBOX        IDC_COMBO_TAM,
 135, 25, 39, 130, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP<br>    COMBOBOX        IDC_COMBO2_RESPUNTOPROP, 135, 45, 41, 12, CBS_DROPDOWN | CBS_HASSTRINGS<br>    LTEXT           "Color", IDC_STATIC_RESPUNTOPROP, 104, 68, 17, 8, SS_LEFT<br>    PUSHBUTTON      "Negro", IDC_BUTTON1_RESPUNTOPROP, 125, 65, 85, 15, BS_BITMAP | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP<br>}<br><br><span></span></div><div><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight:bold;">De:</span></b> Salvador Pozo <salvador@conclase.net><br> <b><span style="font-weight: bold;">Para:</span></b>
 cconclase@listas.conclase.net <br> <b><span style="font-weight: bold;">Enviado:</span></b> Domingo 4 de marzo de 2012 14:53<br> <b><span style="font-weight: bold;">Asunto:</span></b> Re: [C con Clase] Crear un Bitmap en tiempo de ejecucion y usarlo como fondo de un boton<br> </font> </div> <br>El pasado 2012-03-03 13:54:01, clom escribió:<br> <br>c> ...<br>c> Alguien tiene idea de como puedo hacer lo que quiero o por que no funciona lo que estoy intnetando? <br><br>Hola:<br><br>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 :))<br><br>Sigue un pequeño ejemplo:<br><br>----8<------<br>    HWND hctrl;<br>    // Declaraciones necesarias:<br>    static HDC hCompatibleDC;<br>    RECT re = {0, 0, 63, 19};<br>    HDC hDC;<br><br>    switch (msg)               
   /* manipulador del mensaje */<br>    {<br>        case WM_CREATE:<br>           hInstance = ((LPCREATESTRUCT)lParam)->hInstance;<br>           /* Insertar controles */<br>           hctrl = CreateWindowEx(<br>              0,<br>              "BUTTON",        /* Nombre de la clase */<br>              "Bitmap",        /* Texto del título */<br>              BS_BITMAP | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, <br>              160, 69,         /* Posición */<br>              95, 24,          /* Tamaño */<br>         
     hwnd,            /* Ventana padre */<br>              (HMENU)ID_BOTON5,/* Identificador del control */<br>              hInstance,       /* Instancia */<br>              NULL);           /* Sin datos de creación de ventana */<br><br>           // Parte del código para crear un bitmap<br>           hDC=GetDC(hwnd);<br>           hCompatibleDC = CreateCompatibleDC(hDC);<br>           hBitmap = CreateCompatibleBitmap(hDC, 64, 20);<br>           SelectObject(hCompatibleDC, hBitmap);<br>           // Dibujar el botón:<br>           FillRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(WHITE_BRUSH
 ));<br>           FrameRect(hCompatibleDC, &re, (HBRUSH)GetStockObject(GRAY_BRUSH ));<br>           Ellipse(hCompatibleDC, 20, 2, 44, 18);<br>           // Liberar los DCs<br>           ReleaseDC(0, hDC);<br>           DeleteDC(hCompatibleDC);<br><br>           SendMessage(hctrl, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hBitmap);<br>           return 0;<br>...<br>        case WM_DESTROY:<br>           // Al destruir el diálogo destruir el bitmap:<br>           DeleteObject(hBitmap);<br>...<br>----8<------<br><br>Para modificar el bitmap deberás volver a crear un DC compatible, seleccionar el bitmap en él, volver a dibujarlo y liberar el DC.<br><br>Supongo que habrá algunas diferencias entre este
 ejemplo y tu código.<br><br>Suerte, hasta pronto.<br><br>-- <br>Salvador Pozo (Administrador)<br>mailto:<a ymailto="mailto:salvador@conclase.net" href="mailto:salvador@conclase.net">salvador@conclase.net</a><br>_______________________________________________<br>Lista de correo Cconclase <a ymailto="mailto:Cconclase@listas.conclase.net" href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br><br><br> </div> </div>  </div></body></html>