Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xephiro en 3 Agosto 2012, 04:05 am



Título: [SOLUCIONADO] GUI y Consola en una misma app
Publicado por: Xephiro en 3 Agosto 2012, 04:05 am
Consulta, es posible hacer que una aplicación se pueda ver en modo consola y GUI solo por ejemplo enviando un argumento al mi app que indique con cual de ambas quiero comenzar?

Si es posible alguien me puede dar una mano? que he tratado pero la app no me muestra la ventana.


Ya encontré una solución simple y a gusto respecto a mi pregunta...  ;-)


Título: Re: [SOLUCIONADO] GUI y Consola en una misma app
Publicado por: Xephiro en 3 Agosto 2012, 06:35 am
Para aquellos que necesiten algo similar dejo el código (No es nada estético ni complicado.)

Código
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  8.  
  9. char szClassName[ ] = "WindowsApp";
  10.  
  11. int main (int count, char* args[])
  12. {
  13.    bool flag = true;
  14.  
  15.    ...........
  16.  
  17.    if(flag)
  18.    {
  19.        HWND hwnd;
  20.        MSG messages;
  21.        WNDCLASSEX wincl;
  22.  
  23.        /* The Window structure */
  24.        wincl.hInstance = NULL;
  25.        wincl.lpszClassName = szClassName;
  26.        wincl.lpfnWndProc = WindowProcedure;
  27.        wincl.style = CS_DBLCLKS;
  28.        wincl.cbSize = sizeof (WNDCLASSEX);
  29.        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
  30.        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
  31.        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  32.        wincl.lpszMenuName = NULL;
  33.        wincl.cbClsExtra = 0;
  34.        wincl.cbWndExtra = 0;                      
  35.        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
  36.  
  37.        if (!RegisterClassEx (&wincl))
  38.            return 0;
  39.  
  40.        hwnd = CreateWindowEx (
  41.               0,                   /* Extended possibilites for variation */
  42.               szClassName,         /* Classname */
  43.               "Windows App",       /* Title Text */
  44.               WS_OVERLAPPEDWINDOW, /* default window */
  45.               CW_USEDEFAULT,       /* Windows decides the position */
  46.               CW_USEDEFAULT,       /* where the window ends up on the screen */
  47.               544,                 /* The programs width */
  48.               375,                 /* and height in pixels */
  49.               HWND_DESKTOP,
  50.               NULL,
  51.               NULL,
  52.               NULL
  53.               );
  54.  
  55.        ShowWindow (hwnd, 1);
  56.  
  57.        while (GetMessage (&messages, NULL, 0, 0))
  58.        {
  59.            TranslateMessage(&messages);
  60.            DispatchMessage(&messages);
  61.        }
  62.    }
  63.    else
  64.    {
  65.        cout<<":D"<<endl;
  66.        cin.get();
  67.    }
  68.  
  69.    return 0;
  70. }
  71.  
  72. LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  73. {
  74.    switch (message)
  75.    {
  76.        case WM_DESTROY:
  77.            PostQuitMessage (0);
  78.            break;
  79.        default:
  80.            return DefWindowProc (hwnd, message, wParam, lParam);
  81.    }
  82.  
  83.    return 0;
  84. }


PD: Es obvio que mas estético y cómodo se vería separar toda la creación de la ventana en un método aparte :D

Saludos....