【解決方法】現在のフォント サイズに関係なく、getextentpoint32 によって返される値が同じままなのはなぜですか?

[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

GetTextExtentPoint32A 関数 (wingdi.h) – Win32 アプリ | Microsoft Learn[^] テキストのサイズを返します 論理ユニット。 テキスト表示関数は、その数値にフォント サイズを掛けた値を使用して、表示に必要な実際のスペースを計算します。

これをテストしたところ、サイズ値は使用中のフォントを反映しています。 具体的には、コード内で何が起こっているのかをより詳しく見る必要があると思います。 CreateAppFont 関数。

[ad_2]

コメント

タイトルとURLをコピーしました