Visual C++ 打印编程技术-编程基础

背景: windows产生前,操作系统(如DOS等)都不提供支持图像处理的打印机驱动程序,使得程序员为打印出图像,不得不针对使用的打印机

自己编写设备驱动程序,导致了大量的、不必要的重复开发。

随着windows操作系统系统的面世,其所提供的设备环境模型允许开发人员将显示器、打印机和绘图仪等设备都堪称 二维绘图接口,并且

设置驱动程序已经由制造商完成,开发人员无需再编写打印驱动程序。Windows操作系统提供的API接口支持图像打印功能,但对开发者来

讲,打印依然是比较困难的编程任务。幸运的是,MFC库6.0版本大大简化打印的实现,并且加入了打印预览的功能,使得开发者容易开发

出不错的打印和预览功能来。

两个重要概念“设备环境” 和 “映射模式”

1.设备环境

设备环境本身是GDI(Graphics Device Interface)对象。每个C++设备对象有一个相关的设备环境,它由一个32位HDC类型句柄来标识。GDI是windows核心DLL中的一组接口函数。这些函数处于硬件的驱动程序之上,当应用程序调用这些函数的时候,他们再调用驱动程序提供的接口函数。

MFC 6.0 版本提供大量的设备环境类型。基类CDC封装了绘图需要的所有成员函数,这些函数提供了大量的绘图、坐标映射、裁剪功能。

除了CmetaFileDC类之外,派生类只在他们的构造函数和析构函数中有所区别。

CDC类: 使用MFC编程,所有的设备环境不是CDC就是从CDC派生的。

CDC类有两个底层GDI对象有关的句柄:

m_hDC:与m_hDC相关的GDI对象处理绘图函数所有输出流;

m_hAttribDC:与m_hAttribDC句柄有关的GDI对象处理所有与绘图属性有关的操作,如颜色属性、绘图模式。

每个窗口、控件(包括通用控件和Activex控件)都拥有一个覆盖窗口或控件的设备环境变量。我们既可以获得Windows桌面的窗口设备环境,在桌面上绘制,也可以使用任何一个控件的设备环境,从而绘制控件或者改善控件的外观。

获得设备环境对象指针调用:GetDC()函数。在构造一个CDC对象,并且对它处理完之后,务必使用ReleaseDC()函数释放CDC对象。

注意:不善删除通过OnDraw()函数的置身参数传递的CDC对象,应用程序框架会自动控制它的删除。

时间: 2024-09-28 16:30:19

Visual C++ 打印编程技术-编程基础的相关文章

Visual C++ 打印编程技术-编程基础-映射模式

映射模式: Visual C++ 中采用的坐标映射方式使得用户图形坐标和输出设别的像素完全一致. eg:当屏幕的像素大小为800X600时,每英寸包含屏幕像素为96,打印机则需要几倍的点数才能达到同样的逻辑尺寸 因此可通过转换坐标映射方式,是打印机采用的坐标比例比显示时所采用的坐标比例相应地大若干倍. 映射模式:在屏幕或打印机上绘图时候,可以使用英寸或者毫米代替作为单位(代替像素),往往更加直观. PS: 设备单位,逻辑单位 设备单位:是传递给绘图函数的X和Y值,他们可以表示英寸和毫米 逻辑单位

Visual C++ 打印编程技术-编程基础-获取打印机

标准方法是用: EnumPrinters() 函数获取 #define PRINTER_ENUM_DEFAULT 0x00000001 #define PRINTER_ENUM_LOCAL 0x00000002 #define PRINTER_ENUM_CONNECTIONS 0x00000004 #define PRINTER_ENUM_FAVORITE 0x00000004 #define PRINTER_ENUM_NAME 0x00000008 #define PRINTER_ENUM_R

shell编程技术之-基础知识

一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪个解析器来解析. 例如: 二.基础知识 2.1 变量 shell本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义. 例如: 1 #!/bin/bash 2 3 #2.2 4 a="hello word" 5 b=5 6 echo "

多线程编程技术基础知识

GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=414 多线程编程技术基础知识 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同

网络编程技术

                                                     网络编程技术 Java 网络编程 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通讯. 网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机. 2.找到主机后如何可靠高效地进行数据传输. 目前较为流行的网络编程模型是客户端/服务器(C/S)结构. 即通信双方一方作为服务器等待客户提出请求并予以相应.客户则在需要服务时向服务器提出申请. 服务器始终运行,

编程技术网站收集

孟宪会之精彩世界http://dotnet.aspx.cc/最新网络技术,大量ASP.NET.C#.VB.NET.XML.ADO.NET.SVG.dotnet技术 中文c#技术站http://www.chinacs.net/涉及.NET网站资源,基础知识,代码收集 博客园http://www.cnblogs.com/专注于.NET技术 ccBoy的.NET 资源站点http://www.dotnettools.org/记录作者本人点点滴滴的WebLog和.NET Tools资源列表. 博客堂 h

socket网络编程的一些基础知识

源地址:http://blog.csdn.net/roger_77/article/details/1453049 目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket()函数 8) bind()函数 9) connect()函数 10) listen()函数 11) accept()函数 12) send()和recv()函数 13) sendto()和recvfrom()函数 

110本经典编程技术书_程序员必备_菜鸟窝 资源收藏

下载总目录列表如下: [.NET]108<深入理解C#(中文第三版)>.pdf:  下载[.NET]109<NET CLR via C#(第4版)>.pdf: 下载[.NET]110<精通C#(第6版)>附源代码.zip: 下载[Android]1<Android编程权威指南第二版(英文版)>含源码.zip: 下载[Android]1<Android编程权威指南(第2版)>.pdf: 下载 https://itdocs.pipipan.com/f

Java响应式编程Springboot WebFlux基础与实战

在这里我个人推荐的学习途径如下:先学习jdk8的lambda表达式和stream流编程,了解函数式编程的知识点和思想,接着学习jdk9的响应式流flux,理解响应式流概念,理解背压和实现机制.这2者学好之后,很容易理解webflux的基石reactor,再学习webflux就水到渠成了! 这里我记录了自己的学习之路,列出了每一块的学习重点,除了API的知识点学习之外,更加重要的了解底层运行机制和实现原理.对于我个人来说,学习技术如果不了解原理,知识点需要死记硬背,而了解了底层机制之后,不但不需要