[C con Clase] Botones creados en archivos de recursos

Steven Davidson srd4121 en njit.edu
Vie Sep 12 02:17:18 CEST 2008


Hola Daniel,

Roberto Daniel Virgili wrote:
> Hola a todos
> Creo que si no me echan me van a tener periódicamente por aquí, si
> bien el curso podríamos decir que es maravilloso por lo completo y
> didáctico ( por lo menos es lo que me parece dado que apenas llevo
> leído el 10%) hay cosas que las quiero hacer a mi manera y con esto
> me refiero a crear los botones,campos de edición, etc. etc. pero no
> activando un menú sino tenerlos directamente en la ventana principal,
> créanme que hace días que estoy practicando y buscando la manera de
> hacerlo pero no lo logro.-
> Lo que les pido en concreto (si así lo desean) que me pongan un ej.
> de como crear un botón en un archivo de recurso y como llamarlo desde
> la ventana .cpp, crearlo en la misma ventana ya lo aprendí pero
> quiero trabajar con archivos .rc.-
> 

Si he entendido bien, quieres mostrar un control directamente en la 
ventana principal desde el RC. Me temo que no puedes. El RC no permite 
definir controles "sueltos"; siempre existen en la definición de un 
cuadro de diálogo.

Supongo que podrías crear una cadena de caracteres como recurso que 
contenga la información que necesites para crear explícitamente los 
controles que necesitas. Esto sería el recurso STRINGTABLE. Por otro 
lado, quizá sea mejor usar el recurso RCDATA, ya que puedes guardar 
cadenas de caracteres, junto con números enteros. Por ejemplo,

// proyecto.rc
#include <windows.h>
#include "ids.h"

control1 RCDATA
{
   "&Aceptar\0",
   IDC_BOTON1,
   "BUTTON\0",
   WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
   10,10,
   120,30,
   0L
}

Luego, carga el recurso interpretando la información alineada por DWORD; 
o sea, cada dato empieza en un múltiplo del tamaño de DWORD en bytes.

Otra forma, ahora que lo pienso, es usar el recurso de diálogo, pero 
cargarlo como una plantilla en memoria. Obtendrás información que 
aparece el la estructura 'DLGTEMPLATE' o 'DLGTEMPLATEEX', si se trata de 
un cuadro de diálogo extendido. A continuación existe una serie de 
estructuras contiguas de tipo 'DLGITEMTEMPLATE' o 'DLGITEMTEMPLATEEX' si 
es extendido. Podrías sacar la información necesaria de estas 
estructuras para cada control.


Espero que todo esto te ayude.

Steven





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