如何解释 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
模式时,正向 y
down 而在(大多数)其他模式下,正向“y”处于向上状态。对我自己的系统(尽管使用基于屏幕的 CDC)进行的快速测试表明,当 DC 处于 MM_TEXT
模式但 负 时,CDC::DrawText()
返回一个 正 值em> 值(例如)MM_ISOTROPIC
或 MM_HIMETRIC
。
您是否明确更改了任一 CDC 的映射模式,我不知道!但是,即使您没有,MFC 框架也可能已经对打印机设备上下文“做了一些事情”——在您检索它之前或(更有可能)在 OnPreparePrinting
函数中。
【讨论】:
这(和你的评论)让我走上了解决它的正确轨道。打印机-CDC 已设置为“MM_LOMETRIC”,但内存-CDC 的模式为“MM_TEXT”。内存 CDC 是使用 CreateCompatibleDC(&printer-CDC) 创建的,但显然它没有将其设置为相同的映射模式。以上是关于如何解释 CDC::DrawText 返回负值?的主要内容,如果未能解决你的问题,请参考以下文章