【问题标题】:How to interpret CDC::DrawText returning negative value?如何解释 CDC::DrawText 返回负值?
【发布时间】:2024-01-24 04:58:02
【问题描述】:

我正在调试一些使用 MFC CDC 类打印文档的代码,并且在确定总页数的预览打印方面存在问题。

当比较来自CDC::DrawText 的某些元素的返回值时,我注意到当绘制到内存时返回值是正的,但是当绘制到打印机时返回值是负的。

CDC 文档说 DrawText return "函数成功时的文本高度。"
负值是什么意思?

【问题讨论】:

    标签: c++ printing mfc


    【解决方案1】:

    这是因为您的两个 CDC(内存和打印机)被放置在不同的mapping modes 中。

    例如,当 CDC 的底层设备上下文处于 MM_TEXT 模式时,正向 ydown 而在(大多数)其他模式下,正向“y”处于向上状态。对我自己的系统(尽管使用基于屏幕的 CDC)进行的快速测试表明,当 DC 处于 MM_TEXT 模式但 时,CDC::DrawText() 返回一个 值em> 值(例如)MM_ISOTROPICMM_HIMETRIC

    您是否明确更改了任一 CDC 的映射模式,我不知道!但是,即使您没有,MFC 框架也可能已经对打印机设备上下文“做了一些事情”——在您检索它之前或(更有可能)在 OnPreparePrinting 函数中。

    【讨论】:

    • 这(和你的评论)让我走上了解决它的正确轨道。打印机-CDC 已设置为“MM_LOMETRIC”,但内存-CDC 的模式为“MM_TEXT”。内存 CDC 是使用 CreateCompatibleDC(&printer-CDC) 创建的,但显然它没有将其设置为相同的映射模式。