博客
关于我
MFC打印和打印预览功能
阅读量:796 次
发布时间:2023-02-09

本文共 972 字,大约阅读时间需要 3 分钟。

MFC框架提供了一个高效的打印与打印预览功能,其核心原理是通过CView类的OnDraw方法统一处理显示和打印操作。当用户进行打印时,设备上下文DC会根据用户操作选择目标设备(屏幕或打印机),并通过不同的设备映射方式处理输出。

在打印预览模式下,传入的DC看似与屏幕设备一致,但实际上是根据系统默认打印机设置构造的。以常见的A4纸张(210mm×297mm)和1200dpi分辨率为例,当调用GetDeviceCaps(HORZSIZE)和GetDeviceCaps(VERTSIZE)时,会返回210和297毫米的值,这正是A4纸的实际尺寸。然而,使用GetDeviceCaps(HORZRES)和GetDeviceCaps(VERTRES)时,会返回9917和14031,这是基于1200dpi分辨率计算出的屏幕象素数量。

值得注意的是,当使用MemDC创建与pDC兼容的内存DC时,获取的设备属性值与pDC存在显著差异。内存DC通常返回固定值(如320和240),而不是与打印机设置一致的数值。此外,尽管设置相同的MM_LOMETRIC映射模式,MemDC的映射方式与pDC仍存在差异,导致坐标转换结果不一致。通过分析发现,这是由于DC的“视口”和“窗口”概念不同所致。视口基于实际输出设备的度量单位,而窗口则基于逻辑坐标系。DPtoLP和LPtoDP运算仅在映射模式和度量单位一致时才能保证一致性。

在VC++6.0中使用AppWizard生成的MFC程序在默认设置下,打印输出的图像会显著缩小。这是由于MFC采用默认的MM_TEXT映射模式,导致屏幕和打印设备的坐标比例不一致。例如,屏幕的96象素/英寸与打印机的600点数存在差异。为了解决这一问题,可以通过重载OnPrepareDC方法并修改映射模式为MM_ANISOTROPIC,实现坐标比例的自定义设置。

具体实现步骤如下:

  • 使用ClassWizard重载OnPrepareDC方法。
  • 设置映射模式为MM_ANISOTROPIC。
  • 确定窗口和视口大小,根据设备的实际尺寸和象素分辨率进行比例调整。
  • 调用相应的设备函数获取每英寸的象素数量,并根据需要设置视口和窗口扩展量。
  • 通过上述方法,仅需几行代码即可实现屏幕与打印输出一致的效果。这不仅简化了实现过程,也显著提升了打印质量。

    转载地址:http://dwffk.baihongyu.com/

    你可能感兴趣的文章
    MFC工作笔记0002---MFC HelloWorld程序
    查看>>
    MFC工作笔记0003---WindowsAPI与MFC的关系
    查看>>
    MFC工作笔记0004---MFC中afx_msg是什么,afx_msg void function()是什么意思
    查看>>
    MFC工作笔记0005---::在vc++中是什么意思
    查看>>
    MFC工作笔记0006---#pragma warning(disable:4996)是什么意思
    查看>>
    MFC工作笔记0007---消息映射处理
    查看>>
    MFC工作笔记0008---UDP协议通信_sendto 和 recvfrom 浅析与示例
    查看>>
    MFC工作笔记0009---VC++中 PostMessage和SendMessage的区别
    查看>>
    MFC工作笔记0010---PeekMessage 详解
    查看>>
    MFC工作笔记0011---atoi的用法
    查看>>
    MFC常用函数
    查看>>
    MFC打印和打印预览功能
    查看>>
    MFC打造Java环境变量设置工具...
    查看>>
    MFC数据类型
    查看>>
    MFC显示JPG图片
    查看>>
    MFC模态对话框和非模态对话框
    查看>>
    MFC调用DOS窗口显示信息
    查看>>
    mha高可用
    查看>>
    MHA高可用架构与Atlas读写分离
    查看>>
    Miaoo朋友圈程序全完整版源码
    查看>>