重温 Win32 API ----- 截屏指定窗口并打印

本文介绍了如何使用纯Win32 API来截取指定窗口的内容,并将其转换为DIB,以便通过 StretchDIBits() 函数在打印机上进行打印。详细步骤包括从窗口DC获取位图,转换为DIB,最后将DIB传送到打印机DC。
摘要由CSDN通过智能技术生成

朋友说在一个VC++6.0开发的项目中要加入打印窗口的功能,让帮忙写个代码供其调用。这么老的IDE当然不想碰了,而且也不喜欢MFC笨拙不清晰的封装,所以决定采用纯Win32 API,然后用C++类简单封装一下。

1 基本思路

窗口DC和打印机DC是两类不兼容的DC,所以它们之间传送位图只能通过DIB。首先,通过BitBlt()把要打印窗口的客户区拷贝到DDB内存位图中,然后通过GetDIBits()把DDB转换为DIB,最后通过StretchDIBits()向打印机DC输出。

2 代码实现

头文件 WinowPrinter.h

#pragma once

/********************************************************************************
                         WindowPrinter 打印窗口类
功能描述:
提供截屏窗口并通过默认打印机,自动进行居中缩放打印

使用说明:
样例代码如下。 
	HWND hwnd = this->GetSafeWnd();
	WindowPrinter::PrintWindowClientArea(hwnd);
********************************************************************************/
class WindowPrinter
{
public:
	WindowPrinter();
	~WindowPrinter();
public:
	/*
	功能:获取当前默认打印机的DC
	返回:成功返回打印机的DC,失败
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值