TransparentBlt()-Funktion



  • SP2 ist gut.



  • #define WINVER 0x0500
    
    #include <windows.h>
    


  • Nagut, dann werd ich`s wohl mal angehen, auch wenn ich keine Bock hab ...

    @Don Carsto, du wolltest mir ein einfaches Bsp. zeigen, ich würde jetzt darauf zurückgreifen ...



  • Top-se schrieb:

    Nagut, dann werd ich`s wohl mal angehen, auch wenn ich keine Bock hab ...

    Keiner zwingt dich 😉

    Greetz :xmas1:



  • Okay, versuche es ungefähr so einzubinden.
    Für eine Fensterauflösung von 800x600 Pixel.
    Musst natürlich noch deinen Code ein wenig anpassen.
    --> HINSTANCE hinst; und HWND hwnd;

    HDC hdc;         
    HDC buffer;      
    HDC hdc1;
    HBITMAP bbuffer; 
    HBITMAP sprite;  
    HBITMAP bmap;
    
    sprite = (HBITMAP)LoadImage(hinst,"sprite.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    
    bmap = (HBITMAP)LoadImage(hinst,"hintergrund.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    bbuffer = (HBITMAP)LoadImage(hinst,"hintergrund.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    
    hdc = GetDC(hwnd);                  
    hdc1 = CreateCompatibleDC(hdc);
    SelectObject(hdc1,bmap);
    buffer = CreateCompatibleDC(hdc);   
    SelectObject(buffer,bbuffer);  
    
    BitBlt(buffer,0,0,800,600,hdc1,0,0,SRCCOPY); 
    //hier wird nun der Hintergrund in den buffer geschrieben.
    DrawTransparentBitmap(buffer,sprite,100,300,RGB(110,80,52)); 
    //hier das sprite in den buffer geschrieben. 
    //die farbe RGB(110,80,52) wird transparent gezeichnet. 
    //position des sprites ist x100 y300.
    BitBlt(hdc,0,0,800,600,buffer,0,0,SRCCOPY); 
    //hier dann der komplette buffer in das fenster-hdc geschrieben. 
    //dann kann das ganze ab dem ersten BitBlt mit anderen positionen 
    //des sprites wiederholt werden.
    

    Durch das Buffering flackert das Sprite dann nicht, wenn es
    sehr schnell bewegt wird.

    Gruß,
    DC



  • Mercy beaucoup!

    Also das funzt einwandfrei, jetzt muss ich nurnoch gucken, wo der Unterschied zu meinem ist ...

    THX!



  • So, jetzt hab ich mir dieses SP2 und Visual C++ geladen und installiert und gestartet ...

    nachdem ich meinen Code ein bissl angepasst hab tritt beim Linker-Vorgang ein Fehler auf:
    TestWinAPI.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__TransparentBlt@44

    woran kann das liegen? Ich hab das aktuelle SDK noch cniht eingebunden, weil ich mir nciht sicher bin, wie ich das genau machen soll, kann es dann dadran liegen, oder gibts nen anderen Grund? braucht ihr meinen Code?





  • Irgendwie führt der Link in die normale Übersicht und dort das richtige zu finden ist etwas kompliziert, oder?



  • Danke für den Tipp, ich hab diese msimg32.lib unter Projekt-Einstellungen-Linker dort in so ein Feld eingetragen, war das richtig?

    Also der Fehler ist auf jeden Fall weg ...


Anmelden zum Antworten