2011-01-17 12 views
7

Credo di capire che cosa accade se si seleziona "un oggetto" in un "Contect dispositivo", e se questo oggetto è un spazzola, carattere, penna: Le charactersicts di questi oggetti sono quindi via usati per il disegno sul contesto del dispositivo.Cosa fa SelectObject (dc, hBMP)?

Tuttavia, non capisco cosa succede dopo aver selezionato una bitmap nel contesto del dispositivo, molto meno, perché è necessario farlo.

Ho un programma che fa più perché

HDC dc = ::GetDC(hWnd); 

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

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

e successivamente disegna fino alla ffMemoryDc e poi * BitBlt * s il ffMemoyDc nel contesto di periferica reale di una finestra.

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

La variabile ffBitmap viene fatto riferimento in nessun altro luogo in tutto il programma, ma, se non lo faccio SelectObject (ffBitmap), niente è tratto, in modo è necessario.

Sarei grato se qualcuno potesse far luce su cosa succede qui.

+1

Pensatelo come un timbro di gomma. Creato da SelectObject, applicato con BitBlt. L'indirezione aggiuntiva è importante. –

risposta

2

Ecco come funziona. La bitmap selezionata nella DC è la bitmap che è "dipinta su". Citando MSDN:

Prima un'applicazione può utilizzare un contesto di periferica di memoria per imbutitura, si deve selezionare un bitmap della larghezza e altezza corretta nel contesto di periferica.