首页 > 解决方案 > TextOut 到设备上下文的中心

问题描述

这让我很沮丧,这对我来说是多么困难。我有一个具有打印功能的 MFC 应用程序。当我点击打印时,我想在 A4 页面的中心创建一个带有单个单词的 pdf 文件。我正在使用 aCPrintDialog并且我实际上设法在我的机器上获得了我的结果(通过硬编码 的坐标TextOut)。

我希望这个软件可以在任何类型的设备环境中工作。我的猜测是必须有一种方法可以TextOutCDC. 我在玩GetDeviceCaps(with 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");

标签: c++winapimfc

解决方案


如果使用 GDI,通过

SetTextAlign(hdc, TA_VCENTER|TA_VCENTER);

然后只需使用页面的中心点(宽度/2,高度/2)作为 TextOut 参考点。让 TextOut API 完成计算文本显示区域的工作。


推荐阅读