C/Visual C - Imprimir Ventana

 
Vista:

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..
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
Imágen de perfil de Alejandro

Impresión de una ventana desde Visual C++

Publicado por Alejandro (913 intervenciones) el 09/09/2024 17:18:15
¡Hola, Elyada!

Para imprimir una ventana desde Visual C++, puedes utilizar la función `PrintWindow` de la API de Windows. Esta función captura una imagen de la ventana especificada y la envía a la impresora predeterminada.

Aquí tienes un ejemplo de cómo imprimir una ventana desde Visual C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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);
}

En este ejemplo, la función `ImprimirVentana` toma como argumento el identificador de la ventana que deseas imprimir. Utiliza la función `GetDC` para obtener el contexto de dispositivo de la ventana y la función `OpenPrinter` para abrir la impresora predeterminada. Luego, crea un contexto de dispositivo compatible para la impresora y captura la imagen de la ventana utilizando la función `PrintWindow`. A continuación, imprime la imagen en la impresora utilizando la función `SetDIBitsToDevice`. Finalmente, libera los recursos y cierra la impresora.

Espero que este ejemplo te ayude a imprimir una ventana desde Visual C++. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar