Hintergrundbild bei Fensterprogrammierung

Zu Anfang: Guten Tag erstmal

Ich befasse mit seit kurzem mit der Fensterprogrammierung und würde gerne wissen ob/wie es möglich ist Bilddateien als Hintergrund "einzustellen"

Wenn ich (wieder einmal) etwas undeutlich formuliert haben sollte, einfach bescheid sagen:

System:
Win7
Dev-C++ 5.11
WinApi
 
Zuletzt bearbeitet:
@sheel auf die Seite bin ich auf meiner Googlesuche auch schon gestoßen, konnte es aber nicht so recht in mein Projekt umsetzen, werde es aber noch einmal probieren.

PS: Nein ich wusste nicht, dass es "angenehmere" gibt^^ WinApi scheint mir aber am unfangreichsten zu sein und möchte mich später nicht wieder umgewöhnen müssen :)

Edit: Ich hätte vielleicht erwähnen sollen, dass ich in C programmiere nicht in C++ ^-^
 
Hallo,

WinApi ist vermutlich die umständlichste und langwierigste Methode, um eine GUI zu programmieren :D
Da du dich allerdings auf C beschränkst, siehst es mit der Benutzung komfortabler Klassenbibliotheken natürlich nicht so gut aus.

Ein Hintergrundbild wird am besten direkt auf den Fensterhintergrund gezeichnet. Dazu kannst du entweder die WM_PAINT oder die WM_ERASEBKND Message verwenden. Relativ unproblematisch ist das Einlesen und Ausgeben von BMP-Dateien. Für andere Formate benötigst du eine passende C-Library oder du setzt dich mit GDI+ auseinander.

Gruß
mbmun
 
Hab die Lösung selber gefunden:
C++:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        static HDC hdcSource = NULL;
        static HBITMAP background = NULL;
       
        HDC    hdc;
        PAINTSTRUCT    ps;

    switch(message)
    {
       
    case WM_CREATE:
        {
            background = (HBITMAP) LoadImage(NULL, "deinbild.bmp", IMAGE_BITMAP, 1280, 1024, LR_LOADFROMFILE);
            hdcSource = CreateCompatibleDC(GetDC(0));
            SelectObject(hdcSource, background);
        }
    case WM_PAINT:
        {   
            hdc = BeginPaint(hWnd, &ps);
           
            BitBlt(hdc, 0, 0, 1280, 1024, hdcSource, 0, 0, SRCCOPY);
           
            EndPaint(hWnd, &ps);
            return 0; 
        }
                     
    case WM_CLOSE:
        {
            DestroyWindow(hWnd);
            return 0;
        }
    case WM_DESTROY:
        {
            PostQuitMessage(0);
            return 0;
        }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

So funktionierts
 

Neue Beiträge

Zurück