. 无效 CMainWindow::OnPaint() { CPaintDC DC(this); //CRect rc(5, 5, 191, 99); CRect rc(1, 1, 38, 19);
CBrush brush(DC.GetBkColor());
CBrush* pOldBrush = DC.SelectObject(&brush);
DC.FillRect(&rc, &brush);
DC.SelectObject(pOldBrush);
DC.SetBkMode(TRANSPARENT);
LOGFONT LogFont;
LogFont.lfHeight = -13;
LogFont.lfWidth = 0;
LogFont.lfEscapement = 0;
LogFont.lfOrientation = 0;
LogFont.lfWeight = 400;
LogFont.lfItalic = 0;
LogFont.lfUnderline = 0;
LogFont.lfStrikeOut = 0;
LogFont.lfCharSet = 0;
LogFont.lfOutPrecision = 0;
LogFont.lfClipPrecision = 0;
LogFont.lfQuality = 0;
LogFont.lfPitchAndFamily = 0;
wcscpy_s(LogFont.lfFaceName, _T("System"));
//float OffSetY = 1.0;
//float OffSetX = 1.0;
float OffSetY = 0.2;
float OffSetX = 0.2;
LogFont.lfHeight = (int)(LogFont.lfHeight * OffSetY);
LogFont.lfWidth = (int)(LogFont.lfWidth * OffSetX);
CFont* pFont = new CFont;
pFont->CreateFontIndirect(&LogFont);
CFont* pOldFont = DC.SelectObject( pFont );
CString sTemp(_T("Title current_folder\r\nField1\r\nComment:\r\nControl #:\r\nDescription:\r\nMagnification:\r\n"));
sTemp.Replace(_T("&"), _T("&&"));
int alignment = 0;
switch(alignment)
{
case 1:
DC.DrawText(sTemp, -1, rc, DT_WORDBREAK | DT_RIGHT | DT_EDITCONTROL);
break;
case 2:
DC.DrawText(sTemp, -1, rc, DT_WORDBREAK | DT_CENTER | DT_EDITCONTROL);
break;
default:
DC.DrawText(sTemp, -1, rc, DT_WORDBREAK | DT_EDITCONTROL);
break;
}
DC.SelectObject( pOldFont );
delete pFont;
}
当使用 System 或 FixedSys 字体(只有一种字体大小分别为 10 和 9)时,在 OffSetX 和 OffSetY 为 1 和 rc(5, 5, 191, 99) 的情况下绘制的文本是完美的。但是,如果我将 OffSetX 和 OffSetY 更改为 0.2 和 rc(1, 1, 38, 19),那么如果从右下角截断文本。仅当使用仅具有一种字体大小且其他字体工作正常且绘制的文本已正确缩放的上述字体时,才会出现这种情况。
由于字体具有一种字体大小,因此DrawText
在所有情况下都使用此字体大小,并且给定的 rect 太小而无法容纳此文本,因此仅显示少数字符。有什么办法可以修复它,以便在这些缩放条件下缩放文本。这是我在上述场景中执行放大操作时在 MFC 项目之一中遇到的行为。
对此的任何建议或替代方案都将非常有帮助和可观。
谢谢。