0

我正在使用一些 GDI 绘图进行 MFC 项目。我使用withDC.DrawText将垂直文本绘制到 aDC中。当我以所需的垂直格式使用时,会输出文本。然而,为了使这个文本居中,我使用了对参数的调用。我认识到,尽管文本确实是垂直绘制的,但宽度大于高度。我的直觉告诉我,垂直绘制的文本的高度应该大于宽度。我没有包括使文本居中的计算。问题是当我实现垂直居中时我可以依赖什么。LOGFONTlfEscapement = 900DT_NOCLIPDC.DrawTextDT_CALCRECTCRect

是否忽略擒纵DC.DrawTextDT_CALCRECT

void CMFCFontTestDlg::OnPaint()
{
  CPaintDC dc(this); // Gerätekontext zum Zeichnen

  if (IsIconic())
  {
    ...
  }
  else
  {
    CDialogEx::OnPaint();

    CRect clTextRect;
    CFont myFont;

    myFont.CreateFont(12, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _T("Tahoma"));

    CFont* oldFont = dc.SelectObject(&myFont);

    dc.DrawText(_T("000000"), clTextRect, DT_CALCRECT);
    clTextRect.MoveToXY(100, 100);

    dc.DrawText(_T("000000"), clTextRect, DT_NOCLIP);
    dc.SelectObject(oldFont);
  }
}

在此处输入图像描述 DC中的垂直格式文本

4

1 回答 1

0

DrawTextEx我在函数 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtextexa的注释中发现了它。但是,请注意,无论是 的文档还是标志DrawText的文档都没有说明这一点。DT_CALCRECT如果一个人使用DrawText而不是,这很可能会受到监督DrawTextEx。我通过“此页面有用吗?”通知了 MS​​。反馈的可能性。

评论

DrawTextEx函数仅支持转义和方向都为零的字体。

设备上下文的文本对齐模式必须包含 TA_LEFTTA_TOPTA_NOUPDATECP标志。

考虑到这一点,解决方案是从为擒纵 = 0 确定的大小开始使用一些三角计算,然后计算旋转矩形的左上角和右下角点。

于 2020-05-25T12:02:23.400 回答