MFC DrawText,垂直,DT_CALCRECT 和 lf_escapement = 900
MFC DrawText, vertical, DT_CALCRECT with lf_escapement = 900
我正在使用一些 GDI 绘图处理 MFC 项目。
我使用 DC.DrawText
将垂直文本绘制成 DC
,使用 LOGFONT
和 lfEscapement = 900
。
当我以所需的垂直格式使用 DT_NOCLIP
时,将输出文本。
然而,为了使文本居中,我使用了带有 DT_CALCRECT
参数的 DC.DrawText
调用。
我认识到,尽管文本确实是垂直绘制的,但 CRect
的宽度更大
比身高。
我的直觉告诉我垂直绘制的文本的高度应该大于宽度。
我没有包括使文本居中的计算。问题是当我实现垂直居中时我可以依赖什么。
DC.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);
}
}
我在 DrawTextEx
函数的评论中发现了它
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtextexa。
但是,请注意 DrawText
的文档和 DT_CALCRECT
标志的文档都没有说明这一点。
如果使用 DrawText
而不是 DrawTextEx
,这很可能会受到监督。
我通过 "Is this page helpful?" 反馈可能性将此事告知了 MS。
Remarks
The DrawTextEx
function supports only fonts whose escapement and
orientation are both zero.
The text alignment mode for the device context must include the
TA_LEFT
, TA_TOP
, and TA_NOUPDATECP
flags.
考虑到这一点,解决方案是从为擒纵机构 = 0 确定的尺寸开始使用一些三角函数计算,然后计算旋转矩形的左上角和右下角点。
我正在使用一些 GDI 绘图处理 MFC 项目。
我使用 DC.DrawText
将垂直文本绘制成 DC
,使用 LOGFONT
和 lfEscapement = 900
。
当我以所需的垂直格式使用 DT_NOCLIP
时,将输出文本。
然而,为了使文本居中,我使用了带有 DT_CALCRECT
参数的 DC.DrawText
调用。
我认识到,尽管文本确实是垂直绘制的,但 CRect
的宽度更大
比身高。
我的直觉告诉我垂直绘制的文本的高度应该大于宽度。
我没有包括使文本居中的计算。问题是当我实现垂直居中时我可以依赖什么。
DC.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);
}
}
我在 DrawTextEx
函数的评论中发现了它
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtextexa。
但是,请注意 DrawText
的文档和 DT_CALCRECT
标志的文档都没有说明这一点。
如果使用 DrawText
而不是 DrawTextEx
,这很可能会受到监督。
我通过 "Is this page helpful?" 反馈可能性将此事告知了 MS。
Remarks
The
DrawTextEx
function supports only fonts whose escapement and orientation are both zero.The text alignment mode for the device context must include the
TA_LEFT
,TA_TOP
, andTA_NOUPDATECP
flags.
考虑到这一点,解决方案是从为擒纵机构 = 0 确定的尺寸开始使用一些三角函数计算,然后计算旋转矩形的左上角和右下角点。