c++ - TextOut 到设备上下文的中心
问题描述
这让我很沮丧,这对我来说是多么困难。我有一个具有打印功能的 MFC 应用程序。当我点击打印时,我想在 A4 页面的中心创建一个带有单个单词的 pdf 文件。我正在使用 aCPrintDialog
并且我实际上设法在我的机器上获得了我的结果(通过硬编码 的坐标TextOut
)。
我希望这个软件可以在任何类型的设备环境中工作。我的猜测是必须有一种方法可以TextOut
从CDC
. 我在玩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");
解决方案
如果使用 GDI,通过
SetTextAlign(hdc, TA_VCENTER|TA_VCENTER);
然后只需使用页面的中心点(宽度/2,高度/2)作为 TextOut 参考点。让 TextOut API 完成计算文本显示区域的工作。
推荐阅读
- python - Python和egrep中正则表达式括号的区别
- javascript - 如何让我的 Discord 机器人加入特定服务器?该机器人需要付费订阅,我不希望邀请链接被泄露
- python - Django CSRF 导致服务器在错误的 URL 请求后出错
- image - 使用 JavaFX 打印无边界图像
- ithit-webdav-server - 是什么导致 Windows 应用程序事件日志中的 LOCK 命令出现 HTTP 500 错误?
- javascript - 通过 post 方法将正则表达式字符串传递给.net core rest API
- javascript - 如何删除包含 js 链接的反应按钮的红线
- laravel - 如何在laravel中以pdf格式获取图像
- javascript - 计算两个类别的 JavaScript 数组的总计和小计
- javascript - 如何将对象添加到arraylist