Nach dem Länderquiz und dem Textprogramm geht es jetzt weiter mit Grafikfenstern per SDL…

Vorbemerkungen:

Drei Grafikoberflächen stehen uns grundsätzlich zur Verfügung:

  • SDL
  • GTK
  • Qt

In den nächsten Wochen geht es hier besonders um SDL und GTK.

SDL Grafikfenster 01 = erzeugt weiße Linien auf schwarzem Hintergrund (Fenster schließt nicht)

SDL Grafikfenster 02 = erzeugt ein rotes (flackerndes) Rechteck und lässt sich auch schließen

SDL Grafikfenster 03 = erzeugt einen schwarzen Hintergrund

SDL Grafikfenster 04 = erzeugt einen blauen flackernden Hintergund

SDL Grafikfenster 05 = erzeugt einen roten Hintergrund

GTK Grafikfenster 01 = erzeugt ein graues Grafikfenster mit der Abmessung 300×200

GTK Grafikfenster 02 = erzeugt ein graues Grafikfenster mit der Abmessung 600×500

GTK Grafikfenster 03 = erzeugt ein rotes Grafikfenster mit der Abmessung 600×500

GTK Grafikfenster 04 = erzeugt ein graues Grafikfenster mit dem Text “Hallo Welt“

GTK Grafikfenster 05 = erzeugt ein graues Grafikfenster mit Schaltfläche

Der Compiler braucht für SDL Programme übrigens einen modifizierten Befehl:

  • g++ -o dateiname.out dateiname.cpp -g -lSDL2

Quellcode für C++ und das SDL Grafikfenster 1:

#include <SDL2/SDL.h>
#include <iostream>

int main(int argc, char* argv[]) {
    // Initialisierung von SDL
    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
        std::cerr << "Fehler bei der Initialisierung: " << SDL_GetError() << std::endl;
        return 1;
    }

    // Erstellung eines Fensters mit den Maßen 640x480 Pixel
    SDL_Window* window = SDL_CreateWindow("Mein erstes Grafikfenster 2026", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        std::cerr << "Fehler bei der Erstellung des Fensters: " << SDL_GetError() << std::endl;
        return 1;
    }

    // Initialisierung des Grafiktreibers
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0); // add 0 as the flags
    if (!renderer) {
        std::cerr << "Fehler bei der Erstellung des Grafiktreibers: " << SDL_GetError() << std::endl;
        return 1;
    }

    // Zeichnen eines schwarzen Hintergrunds
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
    SDL_RenderClear(renderer);

    // Zeichnen einer weißen Schleife
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    for (int i = 0; i < 100; i++) {
        int x1 = rand() % 640;
        int y1 = rand() % 480;
        int x2 = rand() % 640;
        int y2 = rand() % 480;

        SDL_RenderDrawLine(renderer, x1, y1, x2, y2);
    }

    // Aktivierung des Grafiktreibers
    SDL_RenderPresent(renderer);

    // Warten auf Benutzerinteraktion (z.B. Mausklick)
    bool quit = false;
    while (!quit) {
        for (Uint32 type = SDL_QUIT; ; ) { // remove the call to SDL_EventState and use a loop variable instead
    SDL_Event event;
    while ((type == SDL_QUIT) && SDL_PollEvent(&event));
}
        }

// Warten auf 1/60 Sekunden
SDL_Delay(1000 / 60);


// Clean up
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();

return 0;
}

Von Torsten