none
Cómo ejecutar un programa teniendo la pantalla de la interfaz abierta. RRS feed

  • Pregunta

  • Hola,

    estoy utilizando Windows forms C++. Tengo el siguiente código en el main:

    [STAThreadAttribute]
    int main(int argc, char* argv[])
    {
    
    	// Enabling Windows XP visual effects before any controls are created 
    	Application::EnableVisualStyles(); 
    	Application::SetCompatibleTextRenderingDefault(false);
    	// Create the main window and run it 
    	Application::Run(gcnew cascadeClassification::Formulario());
    	
    	PruebasAlgoritmos^ f = gcnew PruebasAlgoritmos();
    
    	if(argc>1){
    		...........
    			
    El problema que tengo es que hasta que no cierro la pantalla de "Formulario", no se ejecuta todo lo que hay a continuación en el main. Me gustaría que se ejecutara a la vez.
    miércoles, 27 de noviembre de 2013 18:00

Respuestas

  • PruebasAlgoritmos^ f = gcnew PruebasAlgoritmos();
    
    	if(argc>1){
    
                  ............
    	}
    
    	try{
                  .......
    		
    	}catch( ::Exception& e ){
                   ..........
    	}
    
    // Create the main window and run it 
    Application::Run(f);
    
    

    ¿Esto es lo que quieres?

    El Run debería quedarte dentro del try, pienso...


    [W]

    • Marcado como respuesta maria_dp miércoles, 27 de noviembre de 2013 23:39
    miércoles, 27 de noviembre de 2013 20:49
  • El Run ejecuta el loop de mensajes del user de windows. Es quien proporciona los eventos a las ventanas de la aplicación.

    Cuando Formulario se cierra, el loop termina (recibe un WM_QUIT) y Run acaba.

    Podrías hacer

    PruebaAlgoritmos ^f = gcnew ...

    if (argc > 1) { ...

    f->Show();

    Application::Run(...::Formulario());

    Así tendrías f a la vista (f interactúa con el user vía el mismo loop).


    [W]

    • Marcado como respuesta maria_dp miércoles, 27 de noviembre de 2013 20:11
    miércoles, 27 de noviembre de 2013 18:58

Todas las respuestas

  • El Run ejecuta el loop de mensajes del user de windows. Es quien proporciona los eventos a las ventanas de la aplicación.

    Cuando Formulario se cierra, el loop termina (recibe un WM_QUIT) y Run acaba.

    Podrías hacer

    PruebaAlgoritmos ^f = gcnew ...

    if (argc > 1) { ...

    f->Show();

    Application::Run(...::Formulario());

    Así tendrías f a la vista (f interactúa con el user vía el mismo loop).


    [W]

    • Marcado como respuesta maria_dp miércoles, 27 de noviembre de 2013 20:11
    miércoles, 27 de noviembre de 2013 18:58
  • Lo he puesto así, pero de esa forma sólo se ve la consola, y la interfaz no se llega a ver...

    [STAThreadAttribute]
    int main(int argc, char* argv[])
    {
    
    	// Enabling Windows XP visual effects before any controls are created 
    	Application::EnableVisualStyles(); 
    	Application::SetCompatibleTextRenderingDefault(false);
    	
    	PruebasAlgoritmos^ f = gcnew PruebasAlgoritmos();
    
    	if(argc>1){
    
                  ............
    	}
    
    	try{
                  .......
    		
    	}catch( ::Exception& e ){
                   ..........
    	}
             ........
    
    		f->Show();
    		// Create the main window and run it 
    		Application::Run(gcnew cascadeClassification::PruebasAlgoritmos());
    
    	return 0;
    
    }
    Y si pongo f->Show() justo debajo de PruebasAlgoritmos^ f = gcnew PruebasAlgoritmos() se ve la interfaz, pero no aparece ninguno de los elementos que hay en ella.

    • Editado maria_dp miércoles, 27 de noviembre de 2013 20:11
    miércoles, 27 de noviembre de 2013 20:10
  • PruebasAlgoritmos^ f = gcnew PruebasAlgoritmos();
    
    	if(argc>1){
    
                  ............
    	}
    
    	try{
                  .......
    		
    	}catch( ::Exception& e ){
                   ..........
    	}
    
    // Create the main window and run it 
    Application::Run(f);
    
    

    ¿Esto es lo que quieres?

    El Run debería quedarte dentro del try, pienso...


    [W]

    • Marcado como respuesta maria_dp miércoles, 27 de noviembre de 2013 23:39
    miércoles, 27 de noviembre de 2013 20:49
  • Lo he puesto como dices y al ejecutar mi aplicación aparece la interfaz y la consola de fondo.

    El problema es que yo antes mostraba datos en la consola y ahora, donde antes tenía sentencias cout, he añadido sentencias del tipo richTextBox->AppendText(...) para mostrar los datos en un richTextBox que tengo en la interfaz (en el form PruebasAlgoritmos).

    Cuando sale la pantalla de la interfaz (PruebasAlgoritmos) no se muestran esos datos en el richTextBox y cuando cierro la pantalla de la interfaz es cuando aparecen los datos en la consola (porque no he eliminado las sentencias cout).

    ¿Cómo puedo hacer para que salgan en el richTextBox de PruebasAlgoritmos?


    • Editado maria_dp miércoles, 27 de noviembre de 2013 23:55
    miércoles, 27 de noviembre de 2013 23:39