[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]
コメント