DC Fragen.



  • Hi, ich habe ein Paar Fragen zu DCS !

    Wieso Funktioniert dass nicht ?

    dcScreen = GetDC(hWnd);
    dcAmpel = CreateCompatibleDC(dcScreen);
    
    Ellipse(dcAmpel,20,20,40,40);
    
    BitBlt(dcScreen,20,20,255,355,dcAmpel,0,0,SRCCOPY);
    

    Aber wieso funktioniert dass ??

    HBITMAP hbmpAmpel = (HBITMAP)LoadImage(glInst,"c:\\ampel.bmp",IMAGE_BITMAP,NULL,NULL,LR_LOADTRANSPARENT | LR_LOADFROMFILE);
    
    	HWND hwndDesktop = GetDesktopWindow();
    
    	dcScreen = GetDC(hWnd);
    	dcAmpel = CreateCompatibleDC(dcScreen);
    
        SelectObject(dcAmpel,hbmpAmpel);
    
    	BitBlt(dcScreen,20,20,255,355,dcAmpel,0,0,SRCCOPY);
    

    Wieso Funktioniert dass wieder nicht 😮

    HBITMAP hbmpAmpel = (HBITMAP)LoadImage(glInst,"c:\\ampel.bmp",IMAGE_BITMAP,NULL,NULL,LR_LOADTRANSPARENT | LR_LOADFROMFILE);
    
    	HWND hwndDesktop = GetDesktopWindow();
    
    	dcScreen = GetDC(hWnd);
    	dcAmpel = CreateCompatibleDC(dcScreen);
    
        SelectObject(dcScreen,hbmpAmpel);
    

    Mir ist dass ganze ziemlich unlogisch, hoffe jmd. kann mir helfen 😉

    Gruss Lightning C



  • Kann mir denn niemand helfen ? 🙄



  • Hat keiner eine Anhung, seid ihr alles solche die keine Ahnung vom Internen haben, sondern nur den Code auswendig lernen 😮



  • Hat keiner eine Anhung, seid ihr alles solche die keine Ahnung vom Internen haben, sondern nur den Code auswendig lernen 😮

    Pass mal auf. Wenn du hier jemanden beleidigen willst. Dann geh. Dein Code ist einfach nur Grundlegend falsch. Du hast keine Ahnung was welche der Funktionen tut. Sonnst würdest du die letzte Frage schonmal nicht stellen.

    HBITMAP hBitmapAmpel = static_cast<HBITMAP>(LoadImage(GetModuleHandle(NULL), TEXT("C:\\ampel.bmp"), IMAGE_BITMAP, NULL, NULL, LR_LOADTRANSPARENT | LR_LOADFROMFILE)); // Bitmap laden
    
    if (hBitmapAmpel == NULL) // Gucken ob es geklappt hat.
        return false;
    
    HDC hDC = GetDC(hWnd); // Device Context holen
    
    if (hDC == NULL) // Gucken ob wir ihn bekommen haben
        return false;
    
    HDC hMemDC = CreateCompatibleDC(hDC); // MemDC erstellen
    
    if (hMemDC == NULL) // Hats geklappt?
        return false;
    
    SelectObject(hMemDC, hBitmapAmpel); // Bitmap in MemDC packen
    
    BitBlt(hDC, 20, 20, 255, 355, hMemDC, 0, 0, SRCCOPY); // Die Bitmap in den DC kopieren. Normal gibt man die Koordinaten die von MemDC in DC geblittet werden anders an ... naja ... 
    DeleteDC(hMemDC);
    DeleteObject(hBitmapAmpel);
    

    Weiß nicht wo du es her hast... nennt sich Double Buffering ...



  • Hi,

    zur 1. Frage:
    Da Du keine Bitmap in deinen Speicherkontext selektiert hast.

    ⚠ Hinweis ➡ Außerdem fehlt das GDI-Clean-Up.

    zur 2. Frage:
    Das Du das etwas ganz anderes machst ist Dir schon klar, oder ?!
    Hier wird außerdem (mehr oder weniger korrekter Weise) eine Bitmap in den Speicherkontext gesetzt. Hier gilt ebenfalls der Hinweis von oben.

    zur 3. Frage:
    Da Du die Bitmap erst in einem Kontext puffern musst. (Wenn ich Deiner Intention diese Code-Snippets richtig verstanden habe :p .) Ach ja und: Hier fehlt natürlich auch (vermutlich beabsichtig 🙄 ) das Clean-Up.

    PS: Wenn Du mit der Funktion LoadImage eine Bitmap-Datei lädts, setzt man den 1. Parameter auf NULL.

    EDIT: Zuuuu spät 🤡 ...
    Kann mich aber (D)Evil's Intro-Statement zur anschließen:

    Pass mal auf. Wenn du hier jemanden beleidigen willst. Dann geh. Dein Code ist einfach nur Grundlegend falsch. Du hast keine Ahnung was welche der Funktionen tut. Sonnst würdest du die letzte Frage schonmal nicht stellen.

    ➡ 👍 !



  • zur 1. Frage:

    Ich will dort nicht das bmp ausgeben, sondern die Ellipse aber die erscheint nicht 😞 😞



  • Lightning C schrieb:

    zur 1. Frage:

    Ich will dort nicht das bmp ausgeben, sondern die Ellipse aber die erscheint nicht 😞 😞

    Du kannst aber nur in einen Speicherkontext schreiben, wenn der einen gülten Zielbereich enthält, eben eine Bitmap, auf die wird dann gezeichnet.



  • RTFMSDN


Anmelden zum Antworten