这让我感到沮丧,这对我来说很难解决。我有一个带有打印功能的MFC应用程序。当我点击打印时,我想在A4页面的中心创建一个带有单个单词的pdf文件。我正在使用CPrintDialog
,实际上我在机器上设法获得了结果(通过对TextOut
的坐标进行硬编码)。
我希望该软件可以在任何类型的设备环境中使用。我的猜测是,必须有一种方法可以从TextOut
中获取逻辑坐标(CDC
期望)。我在玩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");
最佳答案
如果使用GDI,则通过进行居中会容易得多。
SetTextAlign(hdc, TA_VCENTER|TA_VCENTER);
然后只需将页面的中心点(宽度/ 2,高度/ 2)用作TextOut引用点即可。让TextOut API完成计算文本的显示区域的工作。