problema en dev c++ con windows.h

Iniciado por anfeli96, 4 Diciembre 2014, 23:02 PM

0 Miembros y 1 Visitante están viendo este tema.

anfeli96

Hola, tengo un problema con un código de interfaz gráfica que estoy creando en el cual no he podido crear paginas hijas o limpiar la pantalla para poner unas nuevas opciones, por favor alguien podría decirme como hacerlo gracias. Este es mi código:


Código (cpp) [Seleccionar]
#include <windows.h>
#include <sstream>

using namespace std;
/* La función ProcedimientoVentana() es necesaria porque es la
  encargada de recibir los eventos (movimientos del ratón,
  tecla, clics a un botón, etc). En este caso, solo monitorea
  el momento el que el usuario decide cerrar la ventana para
  descargar la aplicación de memoria                           */
 
HWND textbox;  
HWND Etiqueta;
HWND hCTexto;
void ventana_principal(HWND);
void ventana_registroNuevo(HWND);
void ventana_nueva(HWND hwnd);
//void boton1;
 
LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje,
                                     WPARAM wParam, LPARAM lParam)
                                     
{
   switch (mensaje)
   {
       
      case WM_DESTROY:{  //salir de la aplicacion
                      //MessageBox(hwnd, "¡Adiós mundo cruel!", "Cerrando...", MB_ICONERROR | MB_OK);
                      PostQuitMessage (0);//Manda WM_QUIT a la cola de mensajes que hará
                                           //que el programa salga del bucle de mensajes              
                       return 0;
                    break;
                      }
     /*case WM_COMAND:{
                     switch(wParam){
                     
                      case
                     
 }
     
     
               break;
                }*/
     
     case WM_CREATE:
                       {
                        ventana_principal(hwnd);  
                       }
                   
   case WM_COMMAND: //Llamadas a funciones de cada boton
   {
   switch(LOWORD(wParam))
   {
    case 2:
{
system ("cls");
 
 ventana_registroNuevo(  hwnd);
 break;
    }
       case 3:
{
//ventana_nueva(hwnd);
     //MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
 break;
    }
    case 4:
{

     MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
 break;
    }
    case 5:
{
ShowWindow(hwnd, SW_SHOWDEFAULT);
     MessageBox(hwnd,"elemento","Eborro pantallaA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
 break;
    }
    case 6: //salir de la aplicacion
{
     //MessageBox(hwnd, "¡Adiós !", "Cerrando...", MB_ICONERROR | MB_OK);
                      PostQuitMessage (0);//Manda WM_QUIT a la cola de mensajes que hará
                                           //que el programa salga del bucle de mensajes              
                       return 0;
    }
   
   }


   }
   /*case WM_LBUTTONUP:
                       {
                         int xPos = LOWORD(lParam);
                         int yPos = HIWORD(lParam);

                        ostringstream os;
                        os << "Hizo clic con el botón izquierdo";

                        if (wParam == MK_CONTROL)
                        os << " mientras oprimía la tecla CONTROL";
                        else if (wParam == MK_SHIFT)
                        os << " mientras oprimía la tecla SHIFT";
                        os << "\n\nCoordenadas: " << xPos << ", " << yPos;

        MessageBox(hwnd, os.str().c_str(), "Clic!", MB_ICONINFORMATION | MB_OK);
        break;
     }*/
             
   }
   return DefWindowProc (hwnd, mensaje, wParam, lParam);
}



/* Esta cadena se ocupa para la clase de ventana y la función
  CreateWindowEx() se refieran a un mismo nombre */
char szNombreAplicacion[] = "Ejercicio2";

int WINAPI WinMain(HINSTANCE hInstancia, HINSTANCE hInstanciaPrev,
                  LPSTR lpLineaCmd, int nEstadoVentana)
{
   //Los 4 pasos para crear una ventana...
   //1. Establecer los 12 campos de la "clase de ventana"
   WNDCLASSEX ventana;

   ventana.cbSize        = sizeof(WNDCLASSEX);
   ventana.style         = CS_HREDRAW | CS_VREDRAW;
   ventana.lpfnWndProc   = ProcedimientoVentana; //recibe y maneja los eventos de la ventana como clics movimientos cierre de ventana etc. con punteros
   ventana.cbClsExtra    = 0;
   ventana.cbWndExtra    = 0;
   ventana.hInstance     = hInstancia;
   ventana.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
   ventana.hCursor       = LoadCursor (NULL, IDC_ARROW);
   ventana.hbrBackground =  (HBRUSH) (COLOR_WINDOWTEXT+8);//CreateSolidBrush( RGB(0xa0, 0x60, 0xf8) );
   ventana.lpszMenuName  = NULL;
   ventana.lpszClassName = szNombreAplicacion;//nombre de la clase de ventana
   ventana.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);

   //2. Dar de alta en el sistema a la "clase de ventana"
   if( !RegisterClassEx(&ventana) )
   {
     MessageBox(NULL,
                "No fue posible dar de alta a la ventana, abortando ejecución",
                "¡Error!", MB_ICONEXCLAMATION | MB_OK);
     return FALSE;
   }

   //3. Crear la ventana en base a la "clase de ventana" anteriormente registrada
   HWND hwnd;
   hwnd = CreateWindowEx(
          1,                      //dwExEstilo
          szNombreAplicacion,     //Nombre de clase de la ventana a la que pertenece
          "Tienda de videos",  //Título de la ventana
         //variables que permiten editar intefaz con usiario habilitando o desabilitando botones
  WS_OVERLAPPED |
     WS_CAPTION |
 WS_SYSMENU ,   //poner | despues de cada opcion y coma al final
  //WS_THICKFRAME |
   // WS_MINIMIZEBOX  |
    //WS_MAXIMIZEBOX

 
  //WS_OVERLAPPEDWINDOW,    //Tipo de ventana es igual a dwEstilo
          CW_USEDEFAULT,          //Posición de la ventana en pantalla en "x"
          CW_USEDEFAULT,          //Posición de la ventana en pantalla en "y"
          500,                    //Ancho
          450,                    //Alto
          HWND_DESKTOP,
          NULL,
          hInstancia,
          NULL);
         

  if(hwnd == NULL)
  {
     MessageBox(NULL, "Error al crear la ventana, abortando ejecución",
                "¡Error!", MB_ICONEXCLAMATION | MB_OK);
     return FALSE;
  }

   //4. Mostrar la ventana en pantalla
   ShowWindow(hwnd, SW_SHOWDEFAULT);

   //Necesario para manipular los mensajes o eventos de la ventana
   MSG mensaje;
   while(GetMessage(&mensaje, 0, 0, 0) > 0)  //bucle de mensajes para cola de mensajes entrantes
   {
    TranslateMessage(&mensaje);
       DispatchMessage(&mensaje);
   }

   return mensaje.wParam;
}

void ventana_principal(HWND hwnd)//se crea ventana principal
{
//MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK);
                         
Etiqueta = CreateWindowEx(0, "STATIC", "MENU PRINCIPAL",
          WS_CHILD | WS_VISIBLE,
          180,//posicion en x
          200,//posicion en y
          150,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);
 
 /*textbox= CreateWindow("edit",  
         " Menu principal", //nombre de la ventana
           WS_BORDER | WS_CHILD|
           WS_VISIBLE,
          120,//posicion en x
          180,//posicion en y
          115,//ancho
          20,//alto
          hwnd,
          NULL,NULL,NULL);*/
                                       
   CreateWindow("BUTTON",
                "Registro Nuevo",
                WS_VISIBLE//VIsIBILIDAD DEL OBJETO
                |WS_CHILD|
        WS_BORDER, //MARGEN AL TEXTO
        90, //x
        240,//y
        130,//ancho
        30,//alto
        hwnd,
        (HMENU)2,NULL,NULL
        );
  CreateWindow("BUTTON",
               "Buscar pelicula",
                WS_VISIBLE//VIsIBILIDAD DEL OBJETO
                |WS_CHILD| WS_BORDER,
                240, //x
                240,//y
                130,//ancho
                30,//alto
                hwnd,
               (HMENU)3,NULL,NULL
              );
 CreateWindow("BUTTON",
              "Editar Registro",
              WS_VISIBLE//VIsIBILIDAD DEL OBJETO
             |WS_CHILD| WS_BORDER,
              90, //x
              290,//y
              130,//ancho
              30,//alto
              hwnd,
             (HMENU)4,NULL,NULL
             );
  CreateWindow("BUTTON",
               "Eliminar Registro",
               WS_VISIBLE//VIsIBILIDAD DEL OBJETO
              |WS_CHILD| WS_BORDER,
               240, //x
               290,//y
               130,//ancho
               30,//alto
               hwnd,
              (HMENU)5,NULL,NULL
             );
  CreateWindow("BUTTON",//boton salir
               "Salir",
               WS_VISIBLE//VIsIBILIDAD DEL OBJETO
              |WS_CHILD| WS_BORDER,
               180, //x
               340,//y
               110,//ancho
               30,//alto
               hwnd,
              (HMENU)6,NULL,NULL
               );            
                       
}

void ventana_registroNuevo(HWND hwnd)//se crea ventana para un registro nuevo
{
//MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK);


                         
Etiqueta = CreateWindowEx(0, "STATIC", "REGISTRO NUEVO",
          WS_CHILD | WS_VISIBLE,
          170,//posicion en x
          40,//posicion en y
          150,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);

Etiqueta = CreateWindowEx(0, "STATIC", "NOMBRE",
          WS_CHILD | WS_VISIBLE,
          40,//posicion en x
          80,//posicion en y
          70,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);

hCTexto = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
                               WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL,
                               120,
   80,
270,
25,
hwnd,
NULL, NULL, NULL);

Etiqueta = CreateWindowEx(0, "STATIC", "DIRECTOR",
          WS_CHILD | WS_VISIBLE,
          40,//posicion en x
          120,//posicion en y
          150,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);

Etiqueta = CreateWindowEx(0, "STATIC", "FECHA DE LANZAMIENTO",
          WS_CHILD | WS_VISIBLE,
          40,//posicion en x
          160,//posicion en y
          150,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);

Etiqueta = CreateWindowEx(0, "STATIC", "PROTAGONISTA",
          WS_CHILD | WS_VISIBLE,
          40,//posicion en x
          200,//posicion en y
          150,//ancho
          30,//alto
              hwnd,
      NULL, 0,0
);  
 /*textbox= CreateWindow("edit",  
         " Menu principal", //nombre de la ventana
           WS_BORDER | WS_CHILD|
           WS_VISIBLE,
          120,//posicion en x
          180,//posicion en y
          115,//ancho
          20,//alto
          hwnd,
          NULL,NULL,NULL);*/
                                       
  CreateWindow("BUTTON",//boton salir
               "GUARDAR",
               WS_VISIBLE//VIsIBILIDAD DEL OBJETO
              |WS_CHILD| WS_BORDER,
               120, //x
               340,//y
               110,//ancho
               30,//alto
               hwnd,
              (HMENU)7,NULL,NULL
               );            
                       
}


/*void ventana_nueva(HWND hwnd)
{
LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje,
                                     WPARAM wParam, LPARAM lParam)
     {
     
      CreateWindow("BUTTON",//boton salir
               "GUARDAR",
               WS_VISIBLE//VIsIBILIDAD DEL OBJETO
              |WS_CHILD| WS_BORDER,
               120, //x
               340,//y
               110,//ancho
               30,//alto
               hwnd,
              (HMENU)7,NULL,NULL
               );            
 }                                

 
}*/



_Enko

Hola, creo que lo que estas buscando es crear Tabs/Pestañas o hacer ventanas hijas usado MDI.

Saludos

x64core

Sí creando una ventana hija estaría bien. con CreateWindow, estableces un WndProc (SetWindowLongptr), creas los controles, etc.
Using Windows:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632598(v=vs.85).aspx

anfeli96

si eso es lo que busco pero no entiendo como abrir 2 ventanas al tiempo, no se donde declarar la segunda ventana si me pueden explicar un poco mas de verdad se lo agradeceria

x64core

sólo agregue la creación de una segunda clase en tu código. El tema de la creación de ventanas en Windows es un asunto importante y creo que uno debería de sentarse a pensar en eso y leer un buen libro como este:
http://www.amazon.com/Programming-Windows%C2%AE-Fifth-Developer-Reference/dp/157231995X
En el código he creado una nueva clase, no redirigi nada, al veces es conveniente crear nuevas clases o crear apartir de ya existentes todo va a depender de cómo será el diseño de tu aplicación.

Código (cpp) [Seleccionar]

#include <windows.h>
#include <sstream>

using namespace std;
/* La función ProcedimientoVentana() es necesaria porque es la
encargada de recibir los eventos (movimientos del ratón,
tecla, clics a un botón, etc). En este caso, solo monitorea
el momento el que el usuario decide cerrar la ventana para
descargar la aplicación de memoria                           */

HWND textbox;
HWND Etiqueta;
HWND hCTexto;
void ventana_principal(HWND);
void ventana_registroNuevo(HWND);
void ventana_nueva(HWND hwnd);
//void boton1;

LRESULT CALLBACK ProcedimientoVentana(HWND hwnd, UINT mensaje,
    WPARAM wParam, LPARAM lParam)

{
    switch (mensaje)
    {

    case WM_DESTROY:{  //salir de la aplicacion
        //MessageBox(hwnd, "¡Adiós mundo cruel!", "Cerrando...", MB_ICONERROR | MB_OK);
        PostQuitMessage(0);//Manda WM_QUIT a la cola de mensajes que hará
        //que el programa salga del bucle de mensajes             
        return 0;
        break;
    }
        /*case WM_COMAND:{
        switch(wParam){

        case

        }


        break;
        }*/

    case WM_CREATE:
    {
        ventana_principal(hwnd);
    }

    case WM_COMMAND: //Llamadas a funciones de cada boton
    {
        switch (LOWORD(wParam))
        {
        case 2:
        {
            break;
        }
        case 3:
        {
            //ventana_nueva(hwnd);
            //MessageBox(hwnd,"elemento","ESTA ES LA FUNCION RESTA",MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
            break;
        }
        case 4:
        {

            MessageBoxA(hwnd, "elemento", "ESTA ES LA FUNCION RESTA", MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
            break;
        }
        case 5:
        {
            ShowWindow(hwnd, SW_SHOWDEFAULT);
            MessageBoxA(hwnd, "elemento", "Eborro pantallaA", MB_OK);//CAJA DE TEXTO TITULO DE LA VENTANA E INTRUCCION DENTRO
            break;
        }
        case 6: //salir de la aplicacion
        {
            //MessageBox(hwnd, "¡Adiós !", "Cerrando...", MB_ICONERROR | MB_OK);
            PostQuitMessage(0);//Manda WM_QUIT a la cola de mensajes que hará
            //que el programa salga del bucle de mensajes             
            return 0;
        }

        }


    }
        /*case WM_LBUTTONUP:
        {
        int xPos = LOWORD(lParam);
        int yPos = HIWORD(lParam);

        ostringstream os;
        os << "Hizo clic con el botón izquierdo";

        if (wParam == MK_CONTROL)
        os << " mientras oprimía la tecla CONTROL";
        else if (wParam == MK_SHIFT)
        os << " mientras oprimía la tecla SHIFT";
        os << "\n\nCoordenadas: " << xPos << ", " << yPos;

        MessageBox(hwnd, os.str().c_str(), "Clic!", MB_ICONINFORMATION | MB_OK);
        break;
        }*/

    }
    return DefWindowProc(hwnd, mensaje, wParam, lParam);
}



LRESULT CALLBACK WndChildClass(HWND hwnd, UINT mensaje, WPARAM wParam, LPARAM lParam)
{
    switch (mensaje)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hwnd, mensaje, wParam, lParam);
}



/* Esta cadena se ocupa para la clase de ventana y la función
CreateWindowEx() se refieran a un mismo nombre */
char szNombreAplicacion[] = "Ejercicio2";
char SzChildWindowClass[] = "MyChildWindowClass";


int WINAPI WinMain(HINSTANCE hInstancia, HINSTANCE hInstanciaPrev,
    LPSTR lpLineaCmd, int nEstadoVentana)
{
    //Los 4 pasos para crear una ventana...
    //1. Establecer los 12 campos de la "clase de ventana"
    WNDCLASSEXA ventana;

    ventana.cbSize = sizeof(WNDCLASSEXA);
    ventana.style = CS_HREDRAW | CS_VREDRAW;
    ventana.lpfnWndProc = ProcedimientoVentana; //recibe y maneja los eventos de la ventana como clics movimientos cierre de ventana etc. con punteros
    ventana.cbClsExtra = 0;
    ventana.cbWndExtra = 0;
    ventana.hInstance = hInstancia;
    ventana.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    ventana.hCursor = LoadCursor(NULL, IDC_ARROW);
    ventana.hbrBackground = (HBRUSH)(COLOR_WINDOWTEXT + 8);//CreateSolidBrush( RGB(0xa0, 0x60, 0xf8) );
    ventana.lpszMenuName = NULL;
    ventana.lpszClassName = szNombreAplicacion;//nombre de la clase de ventana
    ventana.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    //2. Dar de alta en el sistema a la "clase de ventana"
    if (!RegisterClassExA(&ventana))
    {
        MessageBoxA(NULL,
            "No fue posible dar de alta a la ventana, abortando ejecución",
            "¡Error!", MB_ICONEXCLAMATION | MB_OK);
        return FALSE;
    }

    ventana.cbSize = sizeof(WNDCLASSEXA);
    ventana.style = CS_HREDRAW | CS_VREDRAW;
    ventana.lpfnWndProc = WndChildClass;
    ventana.cbClsExtra = 0;
    ventana.cbWndExtra = 0;
    ventana.hInstance = hInstancia;
    ventana.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    ventana.hCursor = LoadCursor(NULL, IDC_ARROW);
    ventana.hbrBackground = (HBRUSH)(COLOR_WINDOWTEXT + 8);
    ventana.lpszMenuName = NULL;
    ventana.lpszClassName = SzChildWindowClass;
    ventana.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    if (!RegisterClassExA(&ventana))
    {
        return FALSE;
    }

    //3. Crear la ventana en base a la "clase de ventana" anteriormente registrada
    HWND hwnd;
    hwnd = CreateWindowExA(
        1,                      //dwExEstilo
        szNombreAplicacion,     //Nombre de clase de la ventana a la que pertenece
        "Tienda de videos",  //Título de la ventana
        //variables que permiten editar intefaz con usiario habilitando o desabilitando botones
        WS_OVERLAPPED |
        WS_CAPTION |
        WS_SYSMENU,   //poner | despues de cada opcion y coma al final
        //WS_THICKFRAME |
        // WS_MINIMIZEBOX  |
        //WS_MAXIMIZEBOX


        //WS_OVERLAPPEDWINDOW,    //Tipo de ventana es igual a dwEstilo
        CW_USEDEFAULT,          //Posición de la ventana en pantalla en "x"
        CW_USEDEFAULT,          //Posición de la ventana en pantalla en "y"
        500,                    //Ancho
        450,                    //Alto
        HWND_DESKTOP,
        NULL,
        hInstancia,
        NULL);

    if (hwnd == NULL)
    {
        MessageBoxA(NULL, "Error al crear la ventana, abortando ejecución",
            "¡Error!", MB_ICONEXCLAMATION | MB_OK);
        return FALSE;
    }

    HWND hChild = 0;

    hChild = CreateWindowA(
        SzChildWindowClass,
        "REGISTRO NUEVO",
        WS_OVERLAPPEDWINDOW | WS_CHILD | WS_VISIBLE,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        400,
        400,
        hwnd,
        NULL,
        hInstancia,
        0);


    //4. Mostrar la ventana en pantalla
    ShowWindow(hwnd, SW_SHOWDEFAULT);
    ShowWindow(hChild, SW_SHOWDEFAULT);

    //Necesario para manipular los mensajes o eventos de la ventana
    MSG mensaje;
    while (GetMessage(&mensaje, 0, 0, 0) > 0)  //bucle de mensajes para cola de mensajes entrantes
    {
        TranslateMessage(&mensaje);
        DispatchMessage(&mensaje);
    }

    return mensaje.wParam;
}

void ventana_principal(HWND hwnd)//se crea ventana principal
{
    //MessageBox(hwnd, "Se creó la ventana", "Ejemplo",MB_ICONINFORMATION | MB_OK);

    Etiqueta = CreateWindowExA(0, "STATIC", "MENU PRINCIPAL",
        WS_CHILD | WS_VISIBLE,
        180,//posicion en x
        200,//posicion en y
        150,//ancho
        30,//alto
        hwnd,
        NULL, 0, 0
        );

    /*textbox= CreateWindow("edit",
    " Menu principal", //nombre de la ventana
    WS_BORDER | WS_CHILD|
    WS_VISIBLE,
    120,//posicion en x
    180,//posicion en y
    115,//ancho
    20,//alto
    hwnd,
    NULL,NULL,NULL);*/

    CreateWindowA("BUTTON",
        "Registro Nuevo",
        WS_VISIBLE//VIsIBILIDAD DEL OBJETO
        | WS_CHILD |
        WS_BORDER, //MARGEN AL TEXTO
        90, //x
        240,//y
        130,//ancho
        30,//alto
        hwnd,
        (HMENU)2, NULL, NULL
        );
    CreateWindowA("BUTTON",
        "Buscar pelicula",
        WS_VISIBLE//VIsIBILIDAD DEL OBJETO
        | WS_CHILD | WS_BORDER,
        240, //x
        240,//y
        130,//ancho
        30,//alto
        hwnd,
        (HMENU)3, NULL, NULL
        );
    CreateWindowA("BUTTON",
        "Editar Registro",
        WS_VISIBLE//VIsIBILIDAD DEL OBJETO
        | WS_CHILD | WS_BORDER,
        90, //x
        290,//y
        130,//ancho
        30,//alto
        hwnd,
        (HMENU)4, NULL, NULL
        );
    CreateWindowA("BUTTON",
        "Eliminar Registro",
        WS_VISIBLE//VIsIBILIDAD DEL OBJETO
        | WS_CHILD | WS_BORDER,
        240, //x
        290,//y
        130,//ancho
        30,//alto
        hwnd,
        (HMENU)5, NULL, NULL
        );
    CreateWindowA("BUTTON",//boton salir
        "Salir",
        WS_VISIBLE//VIsIBILIDAD DEL OBJETO
        | WS_CHILD | WS_BORDER,
        180, //x
        340,//y
        110,//ancho
        30,//alto
        hwnd,
        (HMENU)6, NULL, NULL
        );

}







anfeli96

#5
oyeee muchisimas gracias eres mi heroe, pero me resultan dos preguntas como hago para que esta ventana quede por fuera de la principal (a un lado) y como hago para que salga solo cuando se presione un boton seria dejandola oculta por defecto y despues al presionar el boton colocar el showwindow' y acerca del libro no hay algun otro en español

x64core

Cita de: anfeli96 en  5 Diciembre 2014, 01:46 AM
oyeee muchisimas gracias eres mi heroe, pero me resultan dos preguntas como hago para que esta ventana quede por fuera de la principal (a un lado) y como hago para que salga solo cuando se presione un boton seria dejandola oculta por defecto y despues al presionar el boton colocar el showwindow' y acerca del libro no hay algun otro en español

Eliminar la bandera WS_CHILD en la creación de la ventana hija:
    hChild = CreateWindowA(
        SzChildWindowClass,
        "REGISTRO NUEVO",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        400,
        400,
        hwnd,
        NULL,
        hInstancia,
        0);


Respecto a lo de ocultar la ventana podrias ocultar la ventana al momento de la creación usando ShowWindow con SW_HIDE:

ShowWindow(hChild, SW_HIDE);

Luego al presionar el boton usar la misma función ShowWindow con SW_SHOW para mostrarla de esa manera evitas estar creando el objeto siempre que se presiona el boton, nosé todo depende del diseño de tu aplicación... sino colocar el código para crear la ventana en el case del boton.