2011-01-17 13 views
7

Ich glaube, ich verstehe, was passiert, wenn ich „ein Objekt“ in ein „Gerät contect“ wählen, und wenn dieses Objekt eine Bürste ist, Schrift, Stift: Die charactersicts dieser Objekte werden daher weiter verwendet zum Zeichnen auf den Gerätekontext.Was macht SelectObject (dc, hBMP)?

Allerdings verstehe ich nicht, was passiert, nachdem ich eine Bitmap in den Gerätekontext auswählen, viel weniger, warum es notwendig ist, dies zu tun.

Ich habe ein Programm, das somehwere tut

HDC dc = ::GetDC(hWnd); 

ffBitmap = ::CreateCompatibleBitmap(dc, windowWidth, windowHeight); 
ffMemoryDc = ::CreateCompatibleDC(dc); 

hOldBitmap   = (HBITMAP) ::SelectObject(ffMemoryDc, ffBitmap); 

und später zieht bis zum ffMemoryDc und dann * BitBlt * s die ffMemoyDc in den realen Gerätekontext eines Fensters.

BitBlt (dc, 
     0, 0, windowWidth, windowHeight, 
     ffMemoryDc, 
     0, 0, 
     SRCCOPY 
     ); 

Die Variable ffBitmap wird nirgendwo sonst im gesamten Programm verwiesen, doch, wenn ich nicht AuswählenObjekt (ffBitmap) tun, nichts gezogen wird, so es ist notwendig.

Ich würde mich freuen, wenn jemand etwas Licht werfen könnte, was hier passiert.

+1

Betrachten Sie es als einen Stempel. Erstellt von SelectObject, angewendet mit BitBlt. Die zusätzliche Indirektion ist wichtig. –

Antwort

2

So funktioniert es. Die Bitmap, die Sie im DC auswählen, ist die Bitmap, die "aufgemalt" ist. Zitiert MSDN:

bevor eine Anwendung kann für Zeichenoperationen einen Speichergerätekontext verwendet, muss es eine Bitmap, die richtigen Höhe und Breite in den Gerätekontext auszuwählen.