Editar: Creo que el mensaje WM_CREATE no se envía durante la creación de ventanas secundarias (es decir, mi botón). Entonces, al llamar a SendMessage durante WM_CREATE, estoy enviando un mensaje a una ventana que aún no se ha creado. La solución por ahora es llamar a SendMessage() durante el mensaje WM_SHOWWINDOW. ¿Las ventanas secundarias envían mensajes WM_CREATE al momento de la creación?Mostrar un mapa de bits en una ventana de clase "BOTÓN" en WIN32
¿Por qué no se muestra el mapa de bits en el botón? El mapa de bits es de 180x180 píxeles.
Tengo un archivo de recursos con:
Bit BITMAP bit.bmp
Luego de crear la ventana principal y una ventana secundaria "BOTÓN" con:
HWND b, d;
b = CreateWindow(L"a", NULL, WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, 0, 0,
hInstance, 0);
d = CreateWindow(L"BUTTON", NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP,
10, 10, 180, 180, b, 200, hInstance, 0);
Luego, en mi procedimiento ventanas, envío las "BOTÓN" ventana el mensaje "BM_SETIMAGE" con:
HBITMAP hbit;
case WM_CREATE: // It works if I change this to: case WM_SHOWWINDOW
hbit = LoadBitmap(hInstance, L"Bit");
SendMessage(d, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)hbit);
LoadBitmap() devuelve un identificador válido becaus e No devuelve NULL, y puedo mostrar el mapa de bits en el área del cliente utilizando la función BitBlt(). Entonces, o no estoy enviando el mensaje correctamente, o no estoy creando la ventana "BUTTON" correctamente.
¿Qué estoy haciendo mal?
Gracias!
Gracias. Pensé lo mismo, pero cuando lo probé realmente no recibí ningún botón (ni siquiera un esquema). Lo único que ha funcionado ha sido colocar SendMessage() en WM_SHOWWINDOW. – tyler
Apuesto a que es porque estás llamando d = CreateWindow (..., b, ...) en lugar de d = CreateWindow (..., hwnd, ...) - recuerda, estás dentro de la primera llamada a CreateWindow, por lo que b todavía no se ha asignado. – RichieHindle
Guau, genial ... eso tiene sentido. Gracias hombre. – tyler