为什么无论当前字体大小如何, getextentpoint32 返回的值都保持不变?


我正在开发这个应用程序,为了确保内容调整为页面大小,应用程序使用当前字体大小和 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 应用程序| GetTextExtentPoint32A 函数(wingdi.h) – Win32 应用程序微软学习[^] 返回文本的大小 逻辑单元。 文本显示函数使用该数字乘以字体大小来计算显示所需的实际空间。

嗯,我刚刚测试过这个,大小值确实反映了所使用的字体。 我认为您需要更仔细地查看代码中发生的情况,并具体参考 CreateAppFont 功能。

コメント

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