Código
#include <windows.h>
#include <stdio.h>
/* Declaración del procedimiento de ventana */
MSG mensaje2; /* Mensajes recibidos por la aplicación */
HWND hwnd2[15]; /* Manipulador de ventana */
WNDCLASSEX wincl2; /* Estructura de datos para la clase de ventana */
int numero=0;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProcedure2 (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HINSTANCE hThisInstance2;
HWND hwnd; /* Manipulador de ventana */
MSG mensaje; /* Mensajes recibidos por la aplicación */
WNDCLASSEX wincl; /* Estructura de datos para la clase de ventana */
/* Estructura de la ventana */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = "NUESTRA_CLASE";
wincl.lpfnWndProc = WindowProcedure; /* Esta función es invocada por Windows */
wincl.style = CS_DBLCLKS; /* Captura los doble-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);
/* Usar icono y puntero por defector */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* Sin menú */
wincl.cbClsExtra = 0; /* Sin información adicional para la */
wincl.cbWndExtra = 0; /* clase o la ventana */
/* Usar el color de fondo por defecto para la ventana */
wincl.hbrBackground = GetSysColorBrush(2);
wincl2.hInstance = hThisInstance2;
wincl2.lpszClassName = "NUESTRA_CLASE";
wincl2.lpfnWndProc = WindowProcedure2; /* Esta función es invocada por Windows */
wincl2.style = CS_DBLCLKS; /* Captura los doble-clicks */
wincl2.cbSize = sizeof (WNDCLASSEX);
/* Usar icono y puntero por defector */
wincl2.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl2.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl2.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl2.lpszMenuName = NULL; /* Sin menú */
wincl2.cbClsExtra = 0; /* Sin información adicional para la */
wincl2.cbWndExtra = 0; /* clase o la ventana */
wincl2.hbrBackground = GetSysColorBrush(5);
/* Registrar la clase de ventana, si falla, salir del programa */
if(!RegisterClassEx(&wincl)) return 0;
if(!RegisterClassEx(&wincl2)) return 0;
/* La clase está registrada, crear la ventana */
hwnd = CreateWindowEx(
0, /* Posibilidades de variación */
"NUESTRA_CLASE", /* Nombre de la clase */
"Madre", /* Texto del título */
WS_OVERLAPPEDWINDOW, /* Tipo por defecto */
CW_USEDEFAULT, /* Windows decide la posición */
CW_USEDEFAULT, /* donde se coloca la ventana */
544, /* Ancho */ 375, /* Alto en pixels */
HWND_DESKTOP, /* La ventana es hija del escritorio */
NULL, /* Sin menú */
hThisInstance, /* Manipulador de instancia */
NULL /* No hay datos de creación de ventana */
);
for(int x=0;x<16;x++)
{
hwnd2[x] = CreateWindowEx(
0, /* Posibilidades de variación */
"NUESTRA_CLASE", /* Nombre de la clase */
"Hija", /* Texto del título */
WS_OVERLAPPEDWINDOW, /* Tipo por defecto */
CW_USEDEFAULT, /* Windows decide la posición */
CW_USEDEFAULT, /* donde se coloca la ventana */
544, /* Ancho */ 375, /* Alto en pixels */
hwnd, /* La ventana es hija del escritorio */
NULL, /* Sin menú */
hThisInstance2, /* Manipulador de instancia */
NULL /* No hay datos de creación de ventana */
);
}
/* Mostrar la ventana */
ShowWindow(hwnd, SW_SHOWDEFAULT);
/* Bucle de mensajes, se ejecuta hasta que haya error o GetMessage devuelva FALSE */
while(TRUE == GetMessage(&mensaje, NULL, 0, 0))
{
/* Traducir mensajes de teclas virtuales a mensajes de caracteres */
TranslateMessage(&mensaje);
/* Enviar mensaje al procedimiento de ventana */
DispatchMessage(&mensaje);
/* Enviar mensaje al procedimiento de ventana */
}
/* Salir con valor de retorno */
return mensaje.wParam;
}
/* Esta función es invocada por la función DispatchMessage() */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
HDC hdc;/* A device context used for drawing */
PAINTSTRUCT ps;/* Also used during window drawing */
RECT rc;/* A rectangle used during drawing */
static HWND hwndButton = 0;
HWND hLog =0;
HWND hLog2 =0;
HWND hLog3 =0;
switch (mensaje) /* manipulador de mensaje */
{
case WM_CREATE:
hwndButton = CreateWindow ("button","Cerrar",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,0, 0, 50, 20,hwnd,(HMENU) 1,((LPCREATESTRUCT) lParam)->hInstance,NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case 1:
ShowWindow(hwnd2[numero],1);
numero++;
Sleep(10);
break;
}
break;
case WM_DESTROY:
PostQuitMessage (0);
/* Envía el mensaje WM_QUIT a la cola de mensajes */
break;
default: /* Mensajes que no queremos manejar */
return DefWindowProc (hwnd, mensaje, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK WindowProcedure2 (HWND hwndz, UINT mensaje2, WPARAM wParam2, LPARAM lParam)
{
HDC hdc;/* A device context used for drawing */
PAINTSTRUCT ps;/* Also used during window drawing */
RECT rc;/* A rectangle used during drawing */
static HWND hwndButton2 = 0;
static HWND hwndButton3 = 0;
HWND hLog =0;
HWND hLog2 =0;
HWND hLog3 =0;
static int quo;
char xa[6];
xa[0]='\0';
char nombre[40];
const char *nom;
nombre[0]='\0';
//MessageBox(hwndz,xa,0,0);
int i=0;
switch (mensaje2) /* manipulador de mensaje */
{
case WM_PAINT:
quo =numero;
break;
case WM_CREATE:
hwndButton2 = CreateWindow ("button","clor",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,0, 0, 250, 30,hwndz,(HMENU) 4,((LPCREATESTRUCT) lParam)->hInstance,NULL);
break;
case WM_COMMAND:
switch(LOWORD(wParam2))
{
case 4:
sprintf(xa,"%i",quo);
strcat(nombre,"Esta es la ventana Nº ");
strcat(nombre,xa);
SetWindowText(GetDlgItem(hwndz, 4), nombre);
break;
}
break;
case WM_CLOSE:
ShowWindow(hwndz, 0);
break;
case WM_DESTROY:
ShowWindow(hwndz, 0);
/* Envía el mensaje WM_QUIT a la cola de mensajes */
break;
default: /* Mensajes que no queremos manejar */
return DefWindowProc (hwndz, mensaje2, wParam2, lParam);
}
return 0;
}
Me gustaria que me ayuden y me digan cual es el mejor metodo para pasarle valores a una ventana desde la ventana padre eh interactuar con muchas ventanas hijas
y crearlas todas juntas pork seria feo declarar cada ventana aparte =S
Muchas Gracias ^^










Autor



En línea

