如何解释 CDC::DrawText 返回负值?

Posted

技术标签:

【中文标题】如何解释 CDC::DrawText 返回负值?【英文标题】:How to interpret CDC::DrawText returning negative value? 【发布时间】:2020-03-26 15:14:29 【问题描述】:

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

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

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

【问题讨论】:

【参考方案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) 创建的,但显然它没有将其设置为相同的映射模式。

以上是关于如何解释 CDC::DrawText 返回负值?的主要内容,如果未能解决你的问题,请参考以下文章

选择不包含任何负值或缺失值的行

如何计算两个日期之间的月数和天数,而不在 SQL Server 中返回负值

Linux ioctl 返回值由谁解释?

margin负值解释

如何在 HEX 中为 BMP 图像的分辨率设置负值

为啥返回负值