. void CMainWindow::OnPaint() { CPaintDC DC(これ); //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 の 1 つのみ) を使用する場合、OffSetX と OffSetY が 1 で rc(5, 5, 191, 99) の場合、描画されるテキストは完璧です。しかし、OffSetX と OffSetY を 0.2 と rc(1, 1, 38, 19) に変更すると、テキストは右下から切り捨てられます。これは、上記のフォント サイズが 1 つだけで、他のフォントが正常に機能し、描画されたテキストが適切にスケーリングされている場合にのみ発生します。
フォントには 1 つのフォント サイズがあるためDrawText
、すべての場合にこのフォント サイズを使用しており、指定された rect が小さすぎてこのテキストに対応できないため、少数の文字しか表示されていません。これらのズーム条件でテキストが拡大縮小されるように、修正できる方法はありますか。これは、上記のシナリオでズームイン操作を実行すると、MFC プロジェクトの 1 つで得られる動作です。
これに対する提案や代替案は非常に役に立ち、高く評価されます。
ありがとう。