[ad_1]
私はこのアプリケーションを開発していますが、コンテンツがページ サイズに合わせて調整されていることを確認するために、アプリケーションは現在のフォント サイズと GetTextExtentPoint32 から返された値を使用して、while ループに送り込むことでページ サイズを調整しています。 フォントサイズが小さくなったにもかかわらず、GetExtentPoint32 が同じ値を返し続けることに気づき、かなりショックを受けました。 なぜそうなるのか、どうすればこの課題を解決できるのか。
関連するコードを以下に示します。
C++
GetTextExtentPoint32(hdc, wstSchoolName11.c_str(), lstrlen(wstSchoolName11.c_str()), &size); if ((iTextLeft + size.cx) > (iPaperWidth - iPictureWidth - iOffsetX)) { iFontSize--; hNewFont = CreateAppFont(iFontSize, FW_BOLD); hOldFont = (HFONT)SelectObject(hdc, hNewFont); GetTextMetrics(hdc, &tm); //int iTextTop11 = iTop + iOffsetY; //int iTextLeft11 = iImageLeft + iPictureWidth + 5 * dOneMMX; wstring wstSchoolName11 = utf8_decode(stSchoolName); CharUpper(&wstSchoolName11[0]); //SIZE size11; GetTextExtentPoint32(hdc, wstSchoolName11.c_str(), lstrlen(wstSchoolName11.c_str()), &size); } else { bMaximumWith = true; }
C++
int iWindowExtX = 1000 * GetDeviceCaps(hDC,HORZSIZE); int iWindowExtY = 1000 * GetDeviceCaps(hDC, VERTSIZE); int iViewPortX = GetDeviceCaps(hDC, HORZRES); int iViewPortY = GetDeviceCaps(hDC, VERTRES); SetMapMode(hDC, MM_ISOTROPIC); SetWindowExtEx(hDC, iWindowExtX, iWindowExtY, nullptr); SetViewportExtEx(hDC, iViewPortX, iViewPortY, nullptr);
CreateFontアプリの定義は以下の通りです。 何か問題はありますか?
C++
HFONT CreateAppFont(int cHeight, int cWeight, DWORD bItalic = 0, int cEscapement = 0, DWORD bUnderline = 0, LPCWSTR pszFaceName = L"Times New Roman"); HFONT CreateAppFont(int cHeight, int cWeight, DWORD bItalic, int cEscapement, DWORD bUnderline, LPCWSTR pszFaceName) { return CreateFont(cHeight, 0, cEscapement, cEscapement, cWeight, bItalic, bUnderline, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, VARIABLE_PITCH, pszFaceName); }
私が試したこと:
デバッグにはかなりの時間を費やしました。 結果によりこの投稿は中止されました。
解決策 1
これをテストしたところ、サイズ値は使用中のフォントを反映しています。 具体的には、コード内で何が起こっているのかをより詳しく見る必要があると思います。 CreateAppFont
関数。
[ad_2]
コメント