Bitmap als Fensterhintergrund



  • Hallo,
    Ich wollte in meiner APP anstatt einer Farbe eine Bitmap als Fensterhintergrund haben, habe dazu folgendes probiert (benutze VC++ 6.0):

    HWND CreateMainWindow(HINSTANCE hInstance)
    {
        WNDCLASSEX wndClass;                                   
    
        wndClass.cbSize        = sizeof(WNDCLASSEX);           
        wndClass.style         = CS_DBLCLKS | CS_OWNDC |
                                 CS_HREDRAW | CS_VREDRAW;      
        wndClass.lpfnWndProc   = WindowFunc;                   
    
        wndClass.cbClsExtra    = 0;                            
        wndClass.cbWndExtra    = 0;                            
        wndClass.hInstance     = hInstance;                    
    
        wndClass.hbrBackground = LoadBitmap(NULL, MAKEINTRESOURCE(IDB_BACKGROUND)); // anstelle des üblichen z.B.(HBRUSH)... Hier komm ich
    //nicht weiter, der Compiler gibt mir einen Fehler aus, gibt es eine andere Möglichkeit eine Bitmap als Hintergrund zu laden?
        wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);  
        wndClass.lpszMenuName  = MAKEINTRESOURCE(IDR_MENU1);   
        wndClass.lpszClassName = "WindowClass";                
        wndClass.hIcon         = LoadIcon(NULL, MAKEINTRESOURCE(IDI_MEINLOGO));
        wndClass.hIconSm       = LoadIcon(NULL, MAKEINTRESOURCE(IDI_MEINLOGO));
    
        RegisterClassEx(&wndClass);
    
        return CreateWindowEx(NULL,                   
                              "WindowClass",          
                              "H.U.N.T.I.N.G. Configuration Window",
                              WS_SYSMENU |
    						  WS_MINIMIZEBOX |
                              WS_VISIBLE,
                              100, 100, 1024, 768,    
                              NULL,                   
                              NULL,                   
                              hInstance,              
                              NULL);                  
    }
    

    An meinem Kommentar im Quelltext könnt ihr erkennen, wo das Problem liegt, danke schonmal für eure Hilfe.



  • falsches forum ⚠
    afaik geht das so nicht, sondern du musst in wm_paint das bitmap blitten.

    // ungefähr so
    case WM_PAINT:
        {
            BITMAP bm;
            PAINTSTRUCT ps;
    
            HDC hdc = BeginPaint(hwnd, &ps);
    
            HDC hdcMem = CreateCompatibleDC(hdc);
            // hBitmapFromFile am besten static und in wm_create laden
            HBITMAP hbmOld = SelectObject(hdcMem, hBitmapFromFile);
    
            GetObject(hBitmapFromFile, sizeof(bm), &bm);
    
            BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
    
            SelectObject(hdcMem, hbmOld);
            DeleteDC(hdcMem);
    
            EndPaint(hwnd, &ps);
        }
        break;
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das geht schon. du mußt jedoch die bitmap zuerst in eine brush verwandeln:

    wndClass.hbrBackground = CreatePatternBrush(LoadBitmap(NULL,MAKEINTRESOURCE(IDB_BACKGROUND)));
    

Anmelden zum Antworten