[C con Clase] Win32 sin ficheros de recursos

Salvador Pozo salvador en conclase.net
Lun Feb 26 12:03:49 CET 2007


El pasado 2007-02-26 10:47:27, Ferran Ferri escribió:
 
FF> Hola a todos. Me preguntaba si es posible crear, con win32, guis con
FF> botones, texto, iconos, etc... sin usar ficheros de recursos. Ultimamente
FF> leo tutoriales de win32 pero o bien code blocks no gestiona bien los
FF> recursos, o usa un sistema diferente de usarlos o algo asi. La cosa es que
FF> no me funcionan, y no tengo manera de saber cual es el fallo (un simple
FF> sysntax error, en la linea). Asi que voy a ver si es posible crear ventanas
FF> sin usarlos.
FF> Existe algun documento o tutorial que explique esto?

Hola:

Es relativamente simple insertar controles en cualquier ventana usando las funciones CreateWindow o CreateWindowEx, tan sólo hay que saber el nombre de la clase de ventana a la que pertenece el control.

Por ejemplo, los botones pertenecen a la clase "BUTTON" y los combo boxes a "COMBOBOX", etc.

Estos temas se tratan en los próximos capítulos del curso del WinAPI de nuestra página, que espero estén disponibles en breve (dias o semanas, depende del tiempo que pueda dedicarle).

Mientras tanto, puedes experimentar con esas funciones. La parte lógica para insertar controles es al procesar los mensajes WM_CREATE o WM_INITDIALOG, para ventanas o cuadros de diálogo, respectivamente.

Para insertar, por ejemplo, un control de edición, podemos usar esta llamada:

        case WM_CREATE:
           hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
           /* Insertar control Edit */
           hctrl = CreateWindow(
              "EDIT",          /* Nombre de la clase */
              "",              /* Texto del título, no tiene */
              ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, /* Estilo */ 
              36, 20,          /* Posición */
              120, 20,         /* Tamaño */
              hwnd,            /* Ventana padre */
              (HMENU)ID_TEXTO, /* Identificador del control */
              hInstance,       /* Instancia */
              NULL);           /* Sin datos de creación de ventana */ 
           /* Inicialización de los datos de la aplicación */
           SetDlgItemText(hwnd, ID_TEXTO, "Inicial");
           SetFocus(hctrl);
           return 0;

En este ordenador no tengo instalado CodeBlocks, pero en casa sí. Intentaré ver qué problema tiene este IDE con los ficheros de recursos.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase