• 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类之外,派生类只在他们的构造函数和析构函数中有所区别。

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

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

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

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

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

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

    CDC* pDC=GetDC(); //获取试图设备环境 这个不包括边框、标题栏和菜单栏
    ReleaseDC(pDC);//释放对象 

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

          2.CClientDC和CWindowDC

             CClientDC继承于CDC:1.产生窗口客户区对象,用户客户区的输出,与特定窗口关联(构造函数参数传递窗口句柄)

                                             2.该对象构造函数调用(GetDC),析构函数调用(ReleaseDC) 意味着无需显示调用GetDC,及ReleaseDC

             CWindowDC集成于CDC:1.产生客户区或非客户区对象,CClientDC 只能产生客户区对象

                                       2.构造函数调用 GetWindowDC,析构函数调用ReleaseDC ,同上意味着不用显示构造和释放

              坐标原点均试创建对象的参数而定。

           3.CPaintDC

              CPaintDC类是一个特殊的设备环境封装类。它用来处理来自Windows的WM_PAIT消息。 当窗口上覆盖的其他窗口移走或窗口最小化后又最大化,窗口会收到一个系统发来的WM_PAINT消息,这是应用程序会重画可见区域。这个被重画的区域,称之为无效区域。WM_PAINT消息发出后,Windows会帮助用户判断哪些区域需要重画,哪些区域保持不变,从而加快窗口的显示速度。

    typedef struct tagPAINTSTRUCT {
       HDC hdc; //底层GDI环境对象的句柄
       BOOL fErase; //指定背景是否需要重新绘制
       RECT rcPaint; //请求指定绘制矩形的左上角和右下角
       BOOL fRestore;
       BOOL fIncUpdate;
       BYTE rgbReserved[16];
    } PAINTSTRUCT;
    

      

  • 相关阅读:
    redis配置文件redis.conf总结
    react井字棋小游戏实现及优化
    springboot 如何在请求进入controller之前改变body中的值
    记录一个Springboot启动的问题->sprinboot正常启动但是tomcat却没有启动
    websocket-基于springboot的简单实现
    JVM-垃圾回收
    gRPC-Java实践
    Protocol Buffers—-java
    串口通信学习-基础
    Modbus通信协议学习
  • 原文地址:https://www.cnblogs.com/ericyi/p/4381560.html
Copyright © 2020-2023  润新知