我为自己难以理解这个问题感到沮丧。我有一个带有打印功能的MFC应用程序。当我点击打印时,我想在A4纸张的中心创建一个只有一个单词的pdf文件。我正在使用
我希望此软件可以在任何类型的设备上工作。我猜测必须有一种方法来从
是否有一种通用的方法来找到设备上下文的中心?
这里是我看到的值:
CPrintDialog
,并且实际上通过硬编码TextOut
的坐标,在我的机器上获得了结果。我希望此软件可以在任何类型的设备上工作。我猜测必须有一种方法来从
CDC
中获取逻辑坐标(TextOut
所需的坐标)。我尝试使用GetDeviceCaps
(与HORZSIZE
、HORZRES
、LOGPIXELSX
、ASPECTX
、PHYSICALWIDTH
)进行操作,但是这些值甚至没有接近我的硬编码值。使用的y
坐标是负值让我更加困惑。是否有一种通用的方法来找到设备上下文的中心?
这里是我看到的值:
const int logPixY = dcPrinter.GetDeviceCaps(LOGPIXELSY); //600
const int logPixX = dcPrinter.GetDeviceCaps(LOGPIXELSX); //600
const int horzSize = dcPrinter.GetDeviceCaps(HORZSIZE); //216
const int vertSize = dcPrinter.GetDeviceCaps(VERTSIZE); //279
const int horzRez = dcPrinter.GetDeviceCaps(HORZRES); //5100
const int vertRez = dcPrinter.GetDeviceCaps(VERTRES); //6600
const int pWidth = dcPrinter.GetDeviceCaps(PHYSICALWIDTH); //5100
const int pHeight = dcPrinter.GetDeviceCaps(PHYSICALHEIGHT);//6600
const int aspectX = dcPrinter.GetDeviceCaps(ASPECTX); //600
const int aspectY = dcPrinter.GetDeviceCaps(ASPECTY); //600
而硬编码的DrawText
是写在页面中心的(有点偏差):
dcPrinter.TextOut(4200, -5000, L"Center");
PHYSICALWIDTH
和PHYSICALHEIGHT
除以2应该是你要找的。但是你的TextOut
中的数字似乎与之相差甚远。此外,看起来你正在使用 MM_LOENGLISH 进行映射,所以高度和宽度应该是11000和8500,不包括边距。 - lakewebGetDeviceCaps
,并在打印时间之前切换了模式。 - lakewebGetDeviceCaps
不关心映射模式,但我确实在使用MM_HIENGLISH
。切换到MM_TEXT
后,我可以使用GetDeviceCaps(HORZRES) / 2
和GetDeviceCaps(VERTRES) / 2
写入页面中心。而且现在正y轴向下了,所以我的另一个问题也解决了。我之前不知道映射模式。非常感谢你的帮助! - Vlad Nicola