2011-01-17 12 views
7

supongo que entiendo lo que sucede si selecciono "un objeto" en una "contect dispositivo", y si este objeto es un cepillo , fuente, pluma: se utilizan de ahora en adelante Los charactersicts de estos objetos para el dibujo en el contexto del dispositivo.¿Qué hace SelectObject (dc, hBMP)?

Sin embargo, no entiendo qué sucede después de seleccionar un mapa de bits en el contexto del dispositivo, y mucho menos, por qué es necesario hacerlo.

que tienen un programa que hace somehwere

HDC dc = ::GetDC(hWnd); 

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

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

y más tarde atrae hacia el ffMemoryDc y luego * * s BitBlt la ffMemoyDc en el contexto de dispositivo reales de una ventana.

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

La variable ffBitmap está referenciado en ningún otro lugar en todo el programa, sin embargo, si no lo hago SelectObject (ffBitmap), no se dibuja nada, por lo que es necesario.

Agradecería que alguien pudiera arrojar algo de luz sobre lo que sucede aquí.

+1

Piense en ello como un sello de goma. Creado por SelectObject, aplicado con BitBlt. La indirección adicional es importante. –

Respuesta

2

Así es como funciona. El mapa de bits que selecciona en el DC es el mapa de bits que está "pintado". Citando MSDN:

Antes de una aplicación puede utilizar un contexto de dispositivo de memoria para las operaciones de dibujo, se debe seleccionar un mapa de bits de la anchura y la altura correcta en el contexto de dispositivo.