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;
}