GDI: LoadImage Problem (Bitmap anzeigen)



  • Hallo,

    Ich habe kaum Erfahrungen mit der GDI. Heut hab ich versucht eine Bitmap
    auf mein Fenster zu positionieren.

    Ich habe eine Static-Variable in der WNDPROC.
    in lade dann in der WM_CREATE das Bitmap so in ein Handle:

    pic = LoadImage (GetModuleHandle (NULL), "pic.bmp",IMAGE_BITMAP,0, 0,
    LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    

    In der WM_PAINT hab ich dann folgenden Code:

    GetObject (pic, sizeof (BITMAP), &img);						
    hdcMem = CreateCompatibleDC (hdc);
    SelectObject (hdcMem, pic);						   	
    BitBlt (hdc, (myrect.right - myrect.left - img.bmWidth) / 2, 
    (myrect.bottom-myrect.top - img.bmHeight) / 2, 
    img.bmWidth,img.bmHeight, hdcMem, 0,0, SRCCOPY);
    DeleteDC(hdcMem);
    

    Problem ist jetzt:
    Wenn ich die pic-Variable in der WM_CREATE erzeuge, dann sieht man das Bitmap
    später nicht auf dem Button.

    Wenn ich aber das HANDLE auch in der WM_PAINT lade, dann funzt alles einbandfrei.

    Ich dacht nur, daß es unnötig ist, bei jeder Neuzeichnung die Bitmap zu
    laden...

    Auch möcht ich das HANDLE mit ner Selbstdefinierten Message ändern.

    DeleteObject(pic);
    pic = LoadImage (GetModuleHandle (NULL), "pic2.bmp",IMAGE_BITMAP,0, 0,
    LR_DEFAULTCOLOR | LR_LOADFROMFILE);
    

    Aber auch das funktioniert nicht.(Änderung wird einfach nicht übernommen)
    Gibts dafür ne logische Erklärung?

    Gruss,
    Martin



  • Du meinst, dass es funktioniert, wenn du LoadImage direkt in WM_PAINT aufrufst, aber nicht, wenn due den Aufruf in WM_CREATE machst, obwohl du pic als static deklariert hast 😕



  • jo, genau so siehts aus 😞



  • SelectObject(hdcMem, pic);

    Vielleicht liegt es daran, dass du pic nicht wieder aus dem DC rausselektierst. Versuch das mal:

    case WM_PAINT:
       GetObject(pic, sizeof (BITMAP), &img);                        
       hdcMem = CreateCompatibleDC(hdc);
       pic = SelectObject(hdcMem, pic);
       BitBlt(hdc, 
              (myrect.right - myrect.left - img.bmWidth) / 2, 
              (myrect.bottom-myrect.top - img.bmHeight) / 2, 
              img.bmWidth,
              img.bmHeight,
              hdcMem,
              0,
              0,
              SRCCOPY);
       pic = SelectObject(hdcMem, pic);
       DeleteDC(hdcMem);
    


  • Danke für eure Antworten. Das Problem lag ganz woanders.
    (Habe mehrere Fenster von dieser Sorte in mein Hauptfenster getan. Und
    die Static Variable war nun für alle dieselbe. Und da das letzte erstellte
    Fenster kein Bild hatte, waren alle gleich ohne Bild)

    😉

    @Webfurzi (gelöscht):
    Auf deine Kommentare verzichte ich gerne. Auch wenn Du vielleicht gar nicht
    mich meintest, find ich es echt störend und nervend, daß Du immer destruktiv
    hier am werkeln bist.
    Ich danke Webfritzi für seine Bemühungen immer alles zu erklären 🙂 👍


Anmelden zum Antworten