Amministrazione di una finestra

di il
10 risposte

Amministrazione di una finestra

Ciao ragazzi! vi parlo sempre dello stesso genere di problema, sfml su c++... Però questa volta il problema riguarda più che altro il c++ in generale. Vi spiego in breve il programma:
La finestra nelle sfml funziona con un ciclo. Al suo interno c'è un'if un'evento, l'event.close, che serve a chiudere la finestra. Se mettessi altri if(esempoi:chiede una variabile) non esegue più l'if dell'event.close, e la finestra in quel momento resta bloccata. Come faccio a rendere in ogni momento del programma la chiusura possibile? Grazie

10 Risposte

  • Re: Amministrazione di una finestra

    Non è un problema del C++, ma di come stai strutturando il tuo main loop.. Servirebbe almeno un po' di codice per poterti aiutare
  • Re: Amministrazione di una finestra

    Appena esco da scuola vi invio subito il programma
    È necessario che vi invii il programma completo(login,controlli ecc) o solo le cose che potrebbero essere tutti?
  • Re: Amministrazione di una finestra

    Intanto posta il main loop, molto probabilmente il problema è lì o in qualche funzione che richiami da lì
  • Re: Amministrazione di una finestra

    Eccolo qua:
    #include <SFML/Window.hpp>
    #include <SFML/Network.hpp>
    #include <SFML/Graphics.hpp>
    #include <iostream>
    #include <windows.h>
    #include <fstream>
    #include <direct.h>
    #include <stdlib.h>
    using namespace std;
    int main()
    {
        bool SFU;// Search For Update
        SFU = false;
    //Altre dicharazioni di variabili varie
    
    
     sf::RenderWindow window(sf::VideoMode(1250, 860), "Multiverse");
        window.setFramerateLimit(84);
        while (window.isOpen())
        {
            sf::Event event_close;
            while (window.pollEvent(event_close))
            {
                if (event_close.type == sf::Event::Closed)
                    window.close();
            }
    sf::Ftp MultiverseServerFTP;
        sf::Ftp::Response responseConnections = MultiverseServerFTP.connect("31.170.166.148");
    
        if (SFU == false)
        {
    //Molti if e cicli...
    //QUando si blocca in questi if la finestra è bloccata: non si piò nè muovere nè chiudere se non dalla console  o da code::blocs.
    SFU = true;
    }
    return 0;
    }
    
    Dovrei aver sintetizzato tutta la parte più importante... Se volete il programma completo chiedete
  • Re: Amministrazione di una finestra

    Probabilmente all'interno di quel if c'è qualcosa che blocca momentaneamente il flusso di esecuzione, forse in attesa di qualcosa, quindi il ciclo non riparte e gli eventi non vengono gestiti. Puoi postare cosa c'è nell'if?
  • Re: Amministrazione di una finestra

    tuixte ha scritto:


    Probabilmente all'interno di quel if c'è qualcosa che blocca momentaneamente il flusso di esecuzione, forse in attesa di qualcosa, quindi il ciclo non riparte e gli eventi non vengono gestiti. Puoi postare cosa c'è nell'if?
    Si, dentro l'if ci sono varie richieste di variabili.
    Esempio:
    
            if (SFU == false)
            {
                if (responseConnections.isOk())
                {
    
                    cout <<"Connected."<< endl;
                }
                else
                {
                    cout <<"Not connected, error..."<< endl;
                    cout << "Response status: " << responseConnections.getStatus() << endl;
                    system ("PAUSE");
                    return 0;
                }
                ifstream StaffAccount("Saves/StaffAccount.txt");
                if (!StaffAccount)
                {
                    cout <<"Insert the username for the login."<< endl;
                    cin >>username;
                    cout <<"Insert the password for the login."<< endl;
                    cin >>password;
                    cout <<"Do you want to save the username and pass?"<< endl;
                    cin >>res1;
                    while (res1 != "No" && res1 != "no" && res1 != "NO" && res1 != "Yes" && res1 != "yes" && res1 != "YES")
                    {
                        cout <<"Say Yes or No."<< endl;
                        cin >>res1;
                    }
    
    Oppure
    
    else
                {
                    cout <<"There's an account saved. Do you want to load it?"<< endl;
                    cin >>res1;
                    while (res1 != "No" && res1 != "no" && res1 != "NO" && res1 != "Yes" && res1 != "yes" && res1 != "YES")
                    {
                        cout <<"Say Yes or No."<< endl;
                        cin >>res1;
                    }
                    if (res1 == "Yes"||res1 == "yes"||res1 == "YES")
                    {
                        ifstream StaffAccount("Saves/StaffAccount.txt");
                        StaffAccount >> username >> password;
                    }
                    else
                    {
                        cout <<"Insert the username for the login."<< endl;
                        cin >>username;
                        cout <<"Insert the password for the login."<< endl;
                        cin >>password;
                        cout <<"Do you want to save the username and pass?"<< endl;
                        cin >>res1;
                        while (res1 != "No" && res1 != "no" && res1 != "NO" && res1 != "Yes" && res1 != "yes" && res1 != "YES")
                        {
                            cout <<"Say Yes or No."<< endl;
                            cin >>res1;
                        }
                        if (res1 == "Yes"||res1 == "yes"||res1 == "YES")
                        {
                            CreateDirectory("Saves", NULL);
                            ofstream StaffAccount ("Saves/StaffAccount");
                            StaffAccount <<username + " " + password;
                        }
                        else
                        {
                            cout <<"Ok."<< endl;
                        }
  • Re: Amministrazione di una finestra

    E' proprio quello che non deve esserci.
    Se chiedi una variabile in input, il codice resta fermo finché l'utente non inserisce il testo, e ciò impedisce di gestire gli eventuali eventi che nel frattempo si verificano.
    D'altra parte, se stai progettando un'applicazione grafica, perché chiedi input da terminale?
    Devi gestire il tutto graficamente, ad esempio creando un menu o una piccola gui personalizzata.
  • Re: Amministrazione di una finestra

    tuixte ha scritto:


    E' proprio quello che non deve esserci.
    Se chiedi una variabile in input, il codice resta fermo finché l'utente non inserisce il testo, e ciò impedisce di gestire gli eventuali eventi che nel frattempo si verificano.
    D'altra parte, se stai progettando un'applicazione grafica, perché chiedi input da terminale?
    Devi gestire il tutto graficamente, ad esempio creando un menu o una piccola gui personalizzata.
    Già, ma questo programma è stato iniziato tramite console. Quindi ho attivato la finestra(appena ho finito la base per l'aggiornamento automatico) e adesso devo solo trasferire tutto.
    Ma quindi, se trasferissi tutto graficamente, se chiedo una variabile non si blocca?
  • Re: Amministrazione di una finestra

    Si "blocca" nel momento in cui usi il cin.. Se fai tutto ad esempio tramite GUI, il programma non si blocca perché non "aspetta"
  • Re: Amministrazione di una finestra

    tuixte ha scritto:


    Si "blocca" nel momento in cui usi il cin.. Se fai tutto ad esempio tramite GUI, il programma non si blocca perché non "aspetta"
    Grazie!!
    Vado a trasferire tutto nella console.
Devi accedere o registrarti per scrivere nel forum
10 risposte