C/Visual C - PrintWindow y Device Contexts

 
Vista:

PrintWindow y Device Contexts

Publicado por palako (2 intervenciones) el 11/05/2006 20:50:51
Hola.

Estoy haciendo una aplicación que captura una ventana a partir de su handle. Para ello uso la función PrintWindow que recibe como primer parámetro el handle de la ventana a capturar y como segundo parámetro el HDC (device context) al que copiar la captura.

Mi problema es que no quiero mostrar la captura, solo quiero usarla para posteriormente crear un objeto Bitmap de gdi+, no se como crear un HDC para esto, ya que no puedo crear objetos PICTURE ni nada de eso, puesto que no es una aplicación de dialogo.

Hasta ahora la única forma de conseguir que mi código funcione es creando en HDC mediante la función getDC(0), donde 0 creo que es el monitor. El programa funciona, pero me pinta en el monitor la captura de la ventana, y solo se borra a medida que otras aplicaciones se van pintando encima, es decir, a trozos. Si le paso a GetDC el handle de la ventana a capturar no funciona.

Este es mi código: (hWndSrc es un parámetro que recibo con el handle de la ventana a capturar)

HDC hdc = ::GetDC(0);
HDC memDC = ::CreateCompatibleDC ( hdc );

PrintWindow(hWndSrc, hdc, 0);
//CaptureEx m_CaptureEx;
//m_CaptureEx.Capture(hWndSrc, hdc);

// create a bitmap
HBITMAP memBM = ::CreateCompatibleBitmap ( hdc, width, height );
// associate our own Device Context to the bitmap
HBITMAP hOld = (HBITMAP)::SelectObject ( memDC, memBM );

// copy from one DC to the other
BitBlt( memDC, 0,0, width, height, hdc, 0, 0, SRCCOPY) ;

HPALETTE hPalette = (HPALETTE)GetCurrentObject( hdc, OBJ_PAL) ;
Bitmap myBitMap(memBM, hPalette );

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder