<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2995" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hola,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>estoy creando una aplicación con una matriz de
botones en la ventana principal para dibujar sobre el que se pulse un bitmap u
otro en función del item seleccionado en un menú.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Si dentro del cuerpo del mensaje WM_CREATE hago lo
siguiente sobre el botón se dibuja el bitmap correctamente:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>hBitmapFondo = (HBITMAP)LoadImage(NULL,
"fondo.bmp",
IMAGE_BITMAP,<BR>
0, 0, LR_LOADFROMFILE);<BR>hBoton = CreateWindowEx( 0, "Button",
"",<BR>
WS_CHILD | WS_VISIBLE | BS_BITMAP, 10, 10, ANCHO_CELDA, ANCHO_CELDA, hwnd,
(HMENU)0, hInstance, NULL);<BR>SendMessage( (HWND)hBoton, (UINT)BM_SETIMAGE,
(WPARAM)IMAGE_BITMAP, (LPARAM)hBitmapFondo );</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Pero lo quiero hacer es dentro de WM_CREATE entre
otras cosas llamar a una función que me genere todos los botones en la ventana
principal. Esta función tiene el siguiente prototipo:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>void CrearEscenario( HWND hwnd, HINSTANCE
hInstance, bool modo ); </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>En el cuerpo de esta función lo más interesante de
mostrar es:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>for(columna = 0;columna <
COLUMNAS;columna++)<BR>
{<BR> for(fila = 0;fila <
FILAS;fila++)<BR>
{<BR>
CreateWindowEx( 0, "Button",
"",<BR>
WS_CHILD | WS_VISIBLE |WS_BORDER |
BS_BITMAP,<BR>
columna*ANCHO_CELDA + xorigen, fila*ANCHO_CELDA + yorigen,
<BR>
ANCHO_CELDA, ANCHO_CELDA, hwnd, (HMENU)boton, hInstance,
NULL);<BR>
<BR> boton +=
1;<BR>
}<BR> }</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Los botones se generar correctamente. boton es una
variable que empieza con el valor 200 y termina con el 596, ya que son 396
botones.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Entonces cuando se pulsa unos de estos botones pues
se enviará el mensaje WM_COMMAND al CALLBACK y el handle (HWND) que recibe
la función será el de botón pulsado creo. Dentro del mensaje WM_COMMANAD tengo
lo siguiente:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>case CM_DESTINO_JUGADOR:<BR> //un
item del menú</FONT></DIV>
<DIV><FONT face=Arial size=2>
CheckMenuRadioItem(GetMenu(hwnd),CM_FONDO, CM_DESTINO_JUGADOR,
CM_DESTINO_JUGADOR, MF_BYCOMMAND);<BR>
break;<BR>default:<BR> //compruebo si wParam tiene en valor
entre 200 y 596, es decir, el mensaje procede de los botones</FONT></DIV>
<DIV><FONT face=Arial size=2> if((wParam >=
PRIMERA_CELDA)&&(wParam <= ULTIMA_CELDA))<BR>
{</FONT></DIV>
<DIV><FONT face=Arial size=2>
//Compruebo si el menú tiene seleccionado el item fondo</FONT></DIV>
<DIV><FONT face=Arial size=2>
if(GetMenuState(GetMenu(hwnd),CM_FONDO,MF_BYCOMMAND) &
MF_CHECKED)</FONT></DIV>
<DIV><FONT face=Arial size=2>
{<BR> //hwnd
es el primer parámetro de la función CALLBACK</FONT></DIV>
<DIV><FONT face=Arial size=2>
SendMessage( (HWND)hwnd, (UINT)BM_SETIMAGE,
(WPARAM)IMAGE_BITMAP, (LPARAM)hBitmapFondo
);<BR> }<BR> }</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Pues no funciona. Entoces si de la primera forma
que he puesto funciona y de esta no será problema del primer parámetro que estoy
pasando a SendMessage, pero yo pienso que cuando un botón de estos envía el
mensaje WM_COMMAND el primer parámetro de la función CALLBACK es el handle del
botón pulsado.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Lo único que se me ocurre para resolverlo es crear
un array del tipo HWND con todos mis botones y usar como índice del array
wParam.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Espero sus comentarios porque lo mismo de esta
segunda también se puede hace pero se me está escapando algo.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Gracias de antemano.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Un saludo,</FONT></DIV>
<DIV><FONT face=Arial size=2>Juan Antonio.</FONT></DIV></BODY></HTML>