[SOLUCIONADO] GUI y Consola en una misma app

Iniciado por Xephiro, 3 Agosto 2012, 04:05 AM

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

Xephiro

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...  ;-)

Xephiro

#1
Para aquellos que necesiten algo similar dejo el código (No es nada estético ni complicado.)

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

using namespace std;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "WindowsApp";

int main (int count, char* args[])
{
   bool flag = true;

   ...........
   
   if(flag)
   {
       HWND hwnd;
       MSG messages;
       WNDCLASSEX wincl;
   
       /* The Window structure */
       wincl.hInstance = NULL;
       wincl.lpszClassName = szClassName;
       wincl.lpfnWndProc = WindowProcedure;
       wincl.style = CS_DBLCLKS;
       wincl.cbSize = sizeof (WNDCLASSEX);
       wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
       wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
       wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
       wincl.lpszMenuName = NULL;
       wincl.cbClsExtra = 0;
       wincl.cbWndExtra = 0;                      
       wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
   
       if (!RegisterClassEx (&wincl))
           return 0;
   
       hwnd = CreateWindowEx (
              0,                   /* Extended possibilites for variation */
              szClassName,         /* Classname */
              "Windows App",       /* Title Text */
              WS_OVERLAPPEDWINDOW, /* default window */
              CW_USEDEFAULT,       /* Windows decides the position */
              CW_USEDEFAULT,       /* where the window ends up on the screen */
              544,                 /* The programs width */
              375,                 /* and height in pixels */
              HWND_DESKTOP,
              NULL,
              NULL,
              NULL
              );
   
       ShowWindow (hwnd, 1);
   
       while (GetMessage (&messages, NULL, 0, 0))
       {
           TranslateMessage(&messages);
           DispatchMessage(&messages);
       }
   }
   else
   {
       cout<<":D"<<endl;
       cin.get();
   }
   
   return 0;
}

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

   return 0;
}



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....