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