这让我感到沮丧,这对我来说很难解决。我有一个带有打印功能的MFC应用程序。当我点击打印时,我想在A4页面的中心创建一个带有单个单词的pdf文件。我正在使用CPrintDialog,实际上我在机器上设法获得了结果(通过对TextOut的坐标进行硬编码)。
我希望该软件可以在任何类型的设备环境中使用。我的猜测是,必须有一种方法可以从TextOut中获取逻辑坐标(CDC期望)。我在玩GetDeviceCaps(使用HORZSIZEHORZRESLOGPIXELSXASPECTXPHYSICALWIDTH),但是这些值都无法接近我的硬编码值。我使用的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完成计算文本的显示区域的工作。

09-09 19:10