我的"常规"中的Lato font的最新版本2.0存在问题。变种。此问题不会出现在Lato 1.0中。
似乎下划线比DrawText()
报告的DT_CALCRECT
标记下方的矩形低1px。
在以下屏幕截图中,计算的矩形由蓝色背景指示。我已在此矩形的右侧添加了10px,因此您可以看到与下划线绘制位置的差异。
Lato 2.0 - DT_CALCRECT
报告的矩形 错误地绘制了下划线:
Lato 1.0 - 在DT_CALCRECT
报告的矩形内正确绘制下划线:
OnPaint()
处理程序。 OnPaint()
的示例代码:
CPaintDC dc{ this };
CRect rect; GetClientRect( &rect );
LOGFONTW lf{};
wcscpy_s( lf.lfFaceName, L"Lato" );
lf.lfHeight = 20 * 10; // tenths of a point
lf.lfWeight = FW_NORMAL;
lf.lfUnderline = TRUE;
CFont font;
VERIFY( font.CreatePointFontIndirect( &lf ) );
const int saved = dc.SaveDC();
dc.SelectObject( &font );
dc.SetBkMode( TRANSPARENT );
dc.SetTextColor( RGB( 0, 0, 0 ) );
const CString text = L"Hello Lato";
const DWORD dtFlags = 0;
// Calculate the size required by the text and fill this rectangle
CRect textRect = rect;
dc.DrawText( text, textRect, dtFlags | DT_CALCRECT );
textRect.right += 10;
dc.FillSolidRect( 0, 0, textRect.right, textRect.bottom, RGB( 180, 180, 255 ) );
// Actually draw the text
dc.DrawTextW( text, rect, dtFlags );
if( saved )
dc.RestoreDC( saved );
您认为这是我的代码中的问题,操作系统中的错误还是字体中的错误?
不幸的是,我不能只使用Lato 1.0,因为Lato 2.0增加了对我的软件需要支持的许多新语言的支持。