Wiele okien w SFML

0

Chiciałem móc korzystać z wielu okien więc napisałem funkcje, tworzątcą okna:

int MessageBox(int x,int y, int width, int height, std::string title, std::string message, int type)
{
    sf::RenderWindow messagebox(sf::VideoMode(width, height), title);

    while (messagebox.isOpen())
    {
        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event event1;
        while (messagebox.pollEvent(event1))
        {
            // "close requested" event: we close the window
            if (event1.type == sf::Event::Closed)
                messagebox.close();
        }
    }
    messagebox.setActive();
    messagebox.display();
    messagebox.clear();

    return 0;
}

Po jej wywołaniu powstaje okno jednak nie reaguje na kliknięcia (to nowe okno).
co zrobić by pojawiające się okno było aktywne a ie to główne?

0

Nikt nie wie jak mogę zrobić wiele okien w SFML? Myślałem, że SFML jest bardziej znana.

1

Ja dopiero zacząłem czytać o SFML i jednym z pierwszych rzeczy, którą przeczytałem był FAQ https://github.com/LaurentGomila/SFML/wiki/FAQ
Poza tym pętla while służy do obsługi okna - to w niej musi być czyszczenie, rysowanie i update okna - u Ciebie jest poza pętlą. Poza tym ta funkcja tworzy okno na stosie, obsługę eventów też - taką funkcją nie stworzysz poprawnie kilku okien - musisz zapoznać się ze wskaźnikami.

0

Dzięki za linka przejże zaraz ale pytanie czy tam jest odpowiedź jak zrobić wiele okien?

A jeśli chodzi o moją funkcję to czytałem, że wiele okien tworzy się jak normalne okno tylko kilka razy.
Problemem mojej funkcji jest to iż pojawiające się okno nie jest bieżąco wybierane - nie można go kliknąć ani wyłączyć chyba że zminimalizuje się okno główne.

0

Przeczytaj też tutorial - są tam przykłady błędnego kodu i Twój pasuje do nich. Co do wielu okien to nie ma bezpośredniego przykładu, ale jest opis mechanizmu - jak załapiesz tamte podstawy to powinieneś bez problemu coś samemu sklecić. Poza tym pokombinuj z google i hasłami sfml multi window itp. Na pewno coś znajdziesz.

0
int MessageBox(int x,int y, int width, int height, std::string title, std::string message, int type)
{
    // create the window
    sf::RenderWindow messagebox(sf::VideoMode(width, height), title, sf::Style::Default, sf::ContextSettings(32));
    messagebox.setVerticalSyncEnabled(true);

    messagebox.setActive();

    // load resources, initialize the OpenGL states, ...

    // run the main loop
    bool running = true;
    while (running)
    {
        // handle events
        sf::Event event;
        while (messagebox.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                // end the program
                running = false;
            }
            else if (event.type == sf::Event::Resized)
            {
                // adjust the viewport when the window is resized
                glViewport(0, 0, event.size.width, event.size.height);
            }
        }

        // clear the buffers
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        // draw...

        // end the current frame (internally swaps the front and back buffers)
        messagebox.display();
        messagebox.clear();
    }
    return 0;
}

O coś takiego chodziło?
Tę funkcję wywołuje i pojawia się okienko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1