Imprimir Ventana
Publicado por elyada (1 intervención) el 10/03/2001 02:33:57
Alguien podria indicarme como imprimir una ventana desde VC
gracias..
gracias..
Valora esta pregunta


0
#include <Windows.h>
// Función para imprimir una ventana
void ImprimirVentana(HWND ventana) {
HDC hdcWindow = GetDC(ventana);
HDC hdcPrinter = nullptr;
// Abre la impresora predeterminada
if (OpenPrinter(nullptr, &hdcPrinter, nullptr)) {
// Obtiene el tamaño de la ventana
RECT rect;
GetClientRect(ventana, &rect);
// Crea un contexto de dispositivo compatible para la impresora
HDC hdcPrint = CreateCompatibleDC(hdcPrinter);
HBITMAP hbitmapPrint = CreateCompatibleBitmap(hdcPrinter, rect.right - rect.left, rect.bottom - rect.top);
SelectObject(hdcPrint, hbitmapPrint);
// Captura la imagen de la ventana en el contexto de dispositivo compatible
PrintWindow(ventana, hdcPrint, PW_CLIENTONLY);
// Imprime la imagen en la impresora
BITMAPINFOHEADER bih;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = rect.right - rect.left;
bih.biHeight = rect.bottom - rect.top;
bih.biPlanes = 1;
bih.biBitCount = 24;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
StartDoc(hdcPrinter, nullptr);
StartPage(hdcPrinter);
SetDIBitsToDevice(hdcPrinter, 0, 0, rect.right - rect.left, rect.bottom - rect.top, 0, 0, 0, rect.bottom - rect.top, GetDIBits(hdcPrint, hbitmapPrint, 0, rect.bottom - rect.top, nullptr, (BITMAPINFO*)&bih, DIB_RGB_COLORS));
EndPage(hdcPrinter);
EndDoc(hdcPrinter);
// Libera los recursos
DeleteDC(hdcPrint);
DeleteObject(hbitmapPrint);
ClosePrinter(hdcPrinter);
}
// Libera el contexto de dispositivo de la ventana
ReleaseDC(ventana, hdcWindow);
}