WinApi Grafiken laden\Hintergrundfarbe ändern\Eigene Icons



  • Hallo an Alle

    Ich weiß der Titel ist sehr übergeordnet aber ich haben mich nicht nicht so viel
    mit Grafiken und WinApi auseinandergesetzt...

    Vielleicht wissen einige von euch wie man als Anfänger "anfängt" 😃



  • Am Anfang ist ein Einsteigerbuch das Beste (Windowsprogrammierung von Petzold, auch wenn es ein wenig in die Jahre gekommen ist). Wenn du gerade am C++ lernen bist, solltest du aber erst einmal damit weitermachen und grundlegende Dinge (vor allem RAII, C++ Casts, stl-Container, std::string) verinnerlicht haben. Der Code im Buch ist reines C und kann bei nicht-sattelfesten C++-Programmieren schwere Schäden hinterlassen 🤡 .

    Hat du das durch und ein Grundverständnis entwickelt, kann du dir eigentlich alles mit Hilfe der von Microsoft angebotenen Informationen (MSDN) aneignen.

    Grafiken laden: Es gibt viele Möglichkeiten, da es auch viele verschiedene Dateiformate gibt. Bei Bitmaps bietet sich die Funktion LoadImage an, mit der GDI+ stellt Microsoft aber eine komplette Bibliothek (nicht nur) zum Laden, Manipulieren und Anzeigen von Bildern zur Verfügung.
    Oder du könntest dir auch noch etwas Eigenes schreiben (für Anregungen siehe o.g. Buch) und Decoder/Encoder nutzen, deren Quellcode im Netz frei verfügbar ist (libjpeg, libpng etc.).

    Die Hintergrundfarbe von Fenstern kann mit dem Member hbrBackground aus der WNDCLASS(EX) -Struktur gesetzt werden, bei Dialogen und einigen Steuerelementen wird vor dem Zeichnen eine Nachricht gesendet (Dialog: WM_CTLCOLORDL G, Listbox WM_CTLCOLORLISTBOX etc.).
    Bei Texten geht es über SetBkColor (oder gleich die GDI anweisen, nur den Text zu zeichnen : SetBkMode(hdc, TRANSPARENT) ).

    Vermutlich wirst du eine Expressversion des MSVS verwenden, ein Resourceneditor ist da leider nicht verfügbar. Du könntest dir aber einen aus dem Netz laden, die Resourcen wie ein Icon hinzufügen und die rc-Datei in deinem Projekt einbinden. Zumindest stelle ich mir das so vor, auf diese Art und Weise musste ich es bisher nie machen.



  • Danke für die schnelle und hilfreiche Antwort !! 👍



  • Irgendwie klappt das nicht mit der Bitmap laden

    #include "resource1.h" //Fehler:Die Datei "Quelle" kann nicht geöffnet werden resource1.h
    
    //...
    
    hBmp = LoadBitmap (hInst,MAKEINTRESOURCE(Bild));
    GetObject (hBmp, sizeof (BITMAP), &Bmp);
    
    SelectObject (hdcMem, hBmp);
    BitBlt (hdc,  1,  1,  20,  20,  hdcMem,  0,  0,  SRCPAINT) ;
    

    hier ist die Header resource1.h:

    define BITMAP 1
    Bild BITMAP "bitmap.bmp" //Error: Deklaration erwartet ,Error:Diese Deklaration hat keine Speicherklasse...
    //Error: Es fehlt ein ; vor Konstante
    

    Edit: Ich habe den Codeteil in meine Funktion reingepackt, die Buttons und Editboxen usw. generiert


Anmelden zum Antworten