MFC DrawText,垂直,带有lf_escapement = 900的DT_CALCRECT

问题描述 投票:0回答:1

我正在处理带有一些GDI图纸的MFC项目。我使用DC.DrawTextDC将垂直文本绘制到LOGFONT中。当我以所需的垂直格式使用lfEscapement = 900时,将输出文本。但是,为了使本文居中,我使用了DT_NOCLIP参数来调用DC.DrawText。我认识到,尽管文本确实是垂直绘制的,但DT_CALCRECT的宽度较大比高度。我的直觉告诉我,垂直绘制的文字的高度应大于宽度。我没有包括将文本居中的计算。问题只是实现垂直居中时可以依靠什么。

CRectDC.DrawText是否忽略擒纵机构?

DT_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); } } enter image description here

mfc drawing gdi rect vertical-text
1个回答
0
投票

我在Vertically formatted text in DC功能的注释中找到了有关它的信息。DrawTextEx。但是,请注意,https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtextexa的文档都没有对此做任何说明,DrawText标志的文档也没有任何说明。如果使用DT_CALCRECT而不是DrawText,则可能会被忽略。我通过“此页面有帮助吗”告知MS。反馈的可能性。

备注

DrawTextEx功能仅支持其转义符和方向都为零。

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

© www.soinside.com 2019 - 2024. All rights reserved.