Graphiken verändern und verschieben



  • GDI+ ist soweit ich weiss rein Software-Rendering.
    Die WinAPI intern verwendet soweit ich weiss auch nicht DirectX sondern plaudert direkt mit dem Grafikkarten-Treiber. DirectX ist dann eine weitere API (bzw. eine Sammlung von APIs) mit denen man Funktionen des Grafikkarten-Treibers nutzen kann.

    @znieh99

    "Am Besten" ist wohl etwas unglücklich, "wie allgemein üblich" triffts wohl besser.

    "Allgemein üblich" ist auch davon abhängig was man genau machen möchte, und oft gibt es kein "allgemein üblich".

    Wenn du einzelne Pixel in ein Fenster malen willst, dann würde ich dir mal die Funktion SetPixel empfehlen: https://docs.microsoft.com/ru-ru/windows/win32/api/wingdi/nf-wingdi-setpixel
    Viel einfacher als das geht's nicht.

    Dann kannst du dich in Themen wie DCs und Bitmaps (DDBs und DIBs) einlesen. Und/oder in GDI+.



  • @DocShoe sagte in Graphiken verändern und verschieben:

    Ich glaube, dass die WinAPI nur eingeschränkt dazu fähig ist, was Vernünftiges auf den Bildschirm zu bringen, dazu braucht man schon ein Multimedia Framework wie DirectX oder OpenGL.

    Definiere vernünftig.



  • @hustbaer sagte in Graphiken verändern und verschieben:

    @DocShoe sagte in Graphiken verändern und verschieben:

    Ich glaube, dass die WinAPI nur eingeschränkt dazu fähig ist, was Vernünftiges auf den Bildschirm zu bringen, dazu braucht man schon ein Multimedia Framework wie DirectX oder OpenGL.

    Definiere vernünftig.

    Das fängt doch schon damit an, dass man mit der WinAPI keine guten Timer hat, die man für eine flüssige Darstellung von Animationen braucht. Gut, vielleicht ist das mit einem CreateTimerQueueTimer möglich, meine Erfahrungen liegen da schon einige Zeit zurück. Damals wollte ich eine Laufschrift am unteren Fensterrand anzeigen, und das war mit einem CreateTimer - Timer eher holprig. Vielleicht ist das beim Zeichnen weniger störend.



  • @Th69 sagte in Graphiken verändern und verschieben:

    Möchtest du denn unbedingt mit der rohen WinAPI arbeiten? Nimm doch ein GUI-Framework (Qt, wxWidgets, ...) oder eben auch SFML.

    Ich dachte mir, dass die WinAPI die Basis für alle GUI-Frameworks ist.
    lg heinz



  • Ist sie ja auch oftmals, aber damit direkt ein Projekt machen ist sehr mühsam - schau dir nur den Standard-Code des WinAPI-Vorlagen-Projekts an: Exemplarische Vorgehensweise: Erstellen einer herkömmlichen Windows Desktopanwendung (C++) (unter "Erstellen des Codes"). Und diesen Boilerplate-Code nehmen die (anderen) GUI-Framework einem ab und als Entwickler kann man sich auf die Logik des eigentlichen Programms konzentrieren (und muß z.B. nicht direkt die Windows-Messages abfangen und auch nicht direkt mit den [komplexen] Windows-Strukturen arbeiten).



  • @DocShoe sagte in Graphiken verändern und verschieben:

    @hustbaer sagte in Graphiken verändern und verschieben:

    @DocShoe sagte in Graphiken verändern und verschieben:

    Ich glaube, dass die WinAPI nur eingeschränkt dazu fähig ist, was Vernünftiges auf den Bildschirm zu bringen, dazu braucht man schon ein Multimedia Framework wie DirectX oder OpenGL.

    Definiere vernünftig.

    Das fängt doch schon damit an, dass man mit der WinAPI keine guten Timer hat, die man für eine flüssige Darstellung von Animationen braucht.

    Weiss nicht genau was du mit Timer meinst, DirectX hat doch gleich gar keine Timer...? Was mit DX allerdings geht ist Present() mit VSync. Da ist es tatsächlich etwas doof dass es da ausserhalb von DirectX nix vernünftiges gibt. (Also es gibt DwmFlush, aber das setzt halt nen aktiven DWM voraus.)



  • @znieh99 sagte in Graphiken verändern und verschieben:

    @Th69 sagte in Graphiken verändern und verschieben:

    Möchtest du denn unbedingt mit der rohen WinAPI arbeiten? Nimm doch ein GUI-Framework (Qt, wxWidgets, ...) oder eben auch SFML.

    Ich dachte mir, dass die WinAPI die Basis für alle GUI-Frameworks ist.
    lg heinz

    Kommt jetzt drauf an was du mit WinAPI meinst und von was für GUI Frameworks wir reden. Wenn mit WinAPI die "klassische" WinAPI gemeint ist (KERNEL32, USER32, GDI, GDI+), und bei GUI Frameworks auch etwas modernere wie WPF & Co gemeint sind, dann ist die Antwort: nö. Denn einige moderne GUI Frameworks verwenden Direct3D bzw. OpenGL um ihr Zeuchs anzuzeigen.


  • Mod

    Du wirst kein besserer Autofahrer, wenn du vor der ersten Fahrstunde lernst, wie man einen Motor konstruiert.

    Du wirst kein besserer Musiker, wenn du damit beginnst, selber ein Instrument zu schnitzen.

    Du wirst kein besserer Programmierer, wenn du zuerst mit Assembler beginnst.

    Du wirst keine besserer GUI-Frameworknutzer, wenn du zuerst mit WinAPI beginnst.

    Es ist wahr, dem Profi mag es später nutzen, wenn er das letzte aus seinem Auto/Instrument/Programm/GUI rausholen will, wenn er die darunter liegenden Vorgänge versteht. Aber für den absolut überwiegenden Teil aller Anwendungsfälle, und ganz besonders für alle Anfänger gilt: Lerne direkt das, was du lernen möchtest!

    PS: Und eine zweite Sache: Du hast ein XY-Problem, bei deiner Frage danach, wie man Grafiken skaliert, obwohl dein eigentliches Problem ist, wie man ein Feuerwerk macht. Ein XY-Problem hat man oft. Es ist eine nützliche Fähigkeit, das selber erkennen zu können, damit man sich nicht zu sehr auf Problemlösungen versteift, die nicht zum Erfolg führen. Daher empfehle ich dir, selbst zu reflektieren, warum dir das hier passiert ist, und wie du das in Zukunft vermeiden kannst.
    Das gilt wohl auch bei deinem Vorhaben allgemein, wie man mit der WinAPI umgeht, wenn es dir anscheinend doch in Wahrheit darum geht, andere Frameworks besser zu verstehen.



  • @SeppJ
    Nun, ich weiß logisch schon wie man ein Feuerwerk entwickelt (habe es in Java programmiert), aber mir fehlt in C++ das Wissen über die Werkzeugkiste. Ich glaube das ist mein Problem.


  • Mod

    @znieh99 sagte in Graphiken verändern und verschieben:

    @SeppJ
    Nun, ich weiß logisch schon wie man ein Feuerwerk entwickelt (habe es in Java programmiert), aber mir fehlt in C++ das Wissen über die Werkzeugkiste. Ich glaube das ist mein Problem.

    Grafiken skaliert anzuzeigen klingt aber nicht wirklich nach der besten oder üblichen Methode, das zu machen.



  • @Th69 sagte in Graphiken verändern und verschieben:

    Und diesen Boilerplate-Code nehmen die (anderen) GUI-Framework einem ab

    Ok, von welchen GUI-Frameworks sprichst du?



  • Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Wenn du bisher noch nie mit externen Libs gearbeitet hast, dann ist das natürlich eine zusätzliche Herausforderung (Installation, Projekteinstellungen, Doku lesen, ...).

    Ich nehme an, du benutzt Visual Studio (Community Edition) als IDE?!
    Dann könntest du auch MFC (ein "Wrapper" der WinAPI) benutzen (empfehle ich zwar sonst nicht, aber ist direkt im VS nutzbar) - gibt auch ein Subforum dazu hier: MFC.

    Edit: Die Doku dazu gibt es unter MFC-Desktopanwendungen sowie als Projekt-Einstieg Erstellen einer MFC-Anwendung.
    Die Doku zu den anderen GUI-Frameworks gibt es auf den zugehörigen Webseiten.



  • @Th69 sagte in Graphiken verändern und verschieben:

    Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Ist der HOWTO-Link noch aktuell? Der Artikel ist von 2008, gleich der erste Link für Qt führt zu trolltech(punkt)com, was jetzt irgendeine Werbe-Website ist - https://www.qt.io/ wäre aktuell. Leider kenne ich mich mit GUIs nicht wirklich aus, aber das wäre ggf. mal überarbeitenswert.



  • Das hatte ich auch gesehen, daher hatte ich selber den aktuellen Link gepostet - mir ging es vorallem um eine Kurzbeschreibung der Frameworks zum Vergleich anzubieten.

    Aber ich wäre auch für eine Aktualisierung des Qt-Links (und @phreck hat weitere Verbesserungen dadrin vorgeschlagen). 🙂



  • @Th69 sagte in Graphiken verändern und verschieben:

    Wie oben schon geschrieben, z.B. Qt oder wxWidgets, s.a. [HOWTO] Welches Toolkit für GUIS?

    Habe mir "Welches Toolkit für GUIS?" durchgelesen und werde mir die Tools einmal ansehen.
    Danke einstweilen



  • Für Qt gibt es einige Animation Framework Examples, welche du als Vorlage für dein Feuerwerk nehmen könntest (d.h. du müßtest dann nur noch Datenmodell und Zeichnen der Feuerwerksobjekte hinzufügen).
    Ähnliches geht aber auch mit wxWidgets oder der MFC.



  • @znieh99
    Die Frage ist auch, Feuerwerk entwickeln ... und was noch ? Also was brauchst du aussen drumherum ? Eine GUI wo Du Eingabefelder, Schieberegler etc hasst ?

    Einfachere Dinge wirst du sicher auch mit GDI Funktionen hinbekommen ....
    Statische Komplexere dinge (die immer fix nach selben muster ablaufen ohne varianz) koennte man als video bauen und in der App einfach ablaufen lassen .... mit Transparenz sollte das auch gehen.

    Dynamische komplexere dinge würde man heutzutage rendern .... feuerwerke über partikel Systeme implementieren.
    Das gerenderte Zeugs kann man ebenfalls mit transparenz über irgendwas drüber blitten lassen 🙂 Wenn man denn den rest eh nicht auch gleich im renderer machen will ...

    Native Renderer sind DirectX, OpenGL, Vulkan .... hat aber nix mit WinApi zu tun, arbeitet aber notfalls damit zusammen.

    Gab mal sehr viel früher beispiele von feuerwerk als Bildschirmschoner als Demo für GDI funktionen .... meinst du sowas ?

    Wenn man heutzutage was "grafiklastigeres" anfangen wuerd .... entweder RenderEngine/ Game Engine
    Oder wenn klassiche Gui im Vordergrund steht und das rendern nurn kleiner Teil ist ... Gui Framework mit Integrierten Renderer (Qt z.b. klassisch WIdgets oder gleich QML)
    Viele Grafik Engines haben Plugins / Lösungen für Partikel Anwendungen (Rauch, Nebel, Wasserstrahlen Feuer Funken auch Feuerwerke) z.b. in von simpel bis hoch qualitativ ...

    Für die Video basierte Loesung nimmt man modellierer (Blender z.b.) her, die haben teilweise auch Partikel basierte plugins, und erstellt mit denen das video ...

    Ja, ich möchte WinAPI gut kennenlernen.

    Warum das denn ? Darf man fragen ?



  • @RHBaum sagte in Graphiken verändern und verschieben:

    Die Frage ist auch, Feuerwerk entwickeln ... und was noch ?

    Das "Feuerwerk" ist eigentlich nur eine Metapher für graphische Bewegungs- und Veränderungsvorgänge mit C++. Ich vertiefe gerade meine C++ Kenntnisse im graphischen Bereich und habe mir halt ein Feuerwerk vorgenommen, da es von der Bewegung, der Größen- und Farbänderung und der Transparenz ein gutes Beispiel ist.

    Zu WinAPI: Nun ich dachte, dass WinAPI sozusagen die Basis aller graphischen Funktionen ist und es daher sinnvoll ist es näher kennenzulernen.
    Diese Diskussion hat mich jetzt jedoch dazu gebracht mir ein paar GUIs (momentan Qt) anzusehen.



  • @znieh99
    Wenn du Grafik-Zeugs machen willst, dann sind GUIs nicht das geeignete Werkzeug. Mit GUIs macht man Fenster und Buttons und so Zeugs, keine Feuerwerke. Wenn du Grafikzeugs machen willst, dann schau dir die APIs dazu an, also Direct3D, OpenGL, Vulkan etc.
    Mit WinAPI geht das natürlich auch, aber halt begrenzt. Einfaches 2D Zeugs geht damit gut, aber wenn man irgendwelche nicht-trivialen Transformationen/Blending/... braucht sind andere APIs besser geeignet.



  • @hustbaer sagte in Graphiken verändern und verschieben:

    Wenn du Grafikzeugs machen willst, dann schau dir die APIs dazu an, also Direct3D, OpenGL, Vulkan etc.

    Danke, ich bin am suchen und lesen.


Anmelden zum Antworten