[C con Clase] Poner Controles: static, edit, button en ventana de la aplicación

Steven Davidson steven en conclase.net
Dom Dic 31 13:25:46 CET 2006


Hola Antonio,

El pasado 2006-12-30 20:27:36, Antonio Pérez López escribió:
 
APL> Saludos a los miembros de la lista.
APL> Soy nuevo en esto y los ejemplos de "static", "edit", "button" que hay en el Curso "Win Api" están ubicados en una ventana de diálogo.
APL> Lo que yo quiero es ponerlos en la ventana principal de la aplicación. ¿Me echais una mano?

Recuerda que los controles siguen siendo ventanas, pero ya creadas. Lo que tenemos que hacer es crear esas ventanas explícitamente a través de 'CreateWindowEx()'. Por ejemplo,

HWND hEdicion, hBoton;
...
CreateWindowEx( 0L, "STATIC", "Texto:", SS_LEFT | WS_CHILD | WS_VISIBLE,
                8,9, 28,8,
                hwnd, (HMENU)-1, hInstancia, NULL );

hEdicion = CreateWindowEx( 0L, "EDIT", "",
                ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 
                36,9, 76,12,
                hwnd, (HMENU) ID_TEXTO, hInstancia, NULL );

hBoton = CreateWindowEx( 0L, "BUTTON", "OK",
                BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
                56,26, 50,14,
                hwnd, (HMENU) IDOK, hInstancia, NULL );

Como puedes ver, la información es muy parecida a la que escribimos en el fichero de recursos. Si te fijas, en este ejemplo, no nos interesa tener un manipulador de ventana para el control estático, ya que no lo vamos a usar para nada más que mostrar su texto.

Típicamente, crearemos estos controles al procesar el mensaje 'WM_CREATE'. Por lo tanto, tendremos que declarar estáticamente las variables de tipo 'HWND'. Por ejemplo,

static HWND hEdicion;
static HWND hBoton;

switch( msg )
{
  case WM_CREATE:
  {
    HINSTANCE hInstancia = ((LPCREATESTRUCT)lParam)->hInstance;
    CreateWindowEx( 0L, "STATIC", "Texto:", SS_LEFT | WS_CHILD | WS_VISIBLE,
                8,9, 28,8,
                hwnd, (HMENU)-1, hInstancia, NULL );

    hEdicion = CreateWindowEx( 0L, "EDIT", "", ... );

    hBoton = CreateWindowEx( 0L, "BUTTON", "OK", ... );

    return 0;
  }
  ...
}


Espero que esto te ayude.

Steven


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