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

How to interpret CDC::DrawText returning negative value?

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

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

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

这是由于您的两个CDC(内存和打印机)被放置在不同的地方造成的mapping modes

例如,当 CDC 的底层设备上下文处于 MM_TEXT 模式时,则正 ydown 而在(大多数)其他模式下, 正 'y' 上升。在我自己的系统上进行的快速测试(尽管使用基于屏幕的 CDC)表明 CDC::DrawText() returns positive 当 DC 在 MM_TEXT 模式,但 negative 值(例如)MM_ISOTROPICMM_HIMETRIC.

我不知道您是否明确更改了任何一个 CDC 的映射模式!但是,即使您没有,MFC 框架也可能 "done something" 到打印机设备上下文 - 在您检索它之前或(更有可能)在 OnPreparePrinting 函数中。