لماذا تظل القيمة التي يتم إرجاعها بواسطة getextentpoint32 كما هي بغض النظر عن حجم الخط الحالي؟


أقوم بتطوير هذا التطبيق ولضمان تعديل المحتوى حسب حجم الصفحة، يستخدم التطبيق حجم الخط الحالي والقيمة التي أعادها GetTextExtentPoint32 لضبط حجم الصفحة عن طريق تغذية النتائج في حلقة زمنية. لقد صدمت إلى حد ما عندما اكتشفت أن GetExtentPoint32 يستمر في إرجاع نفس القيمة على الرغم من انخفاض حجم الخط. لماذا الأمر كذلك، كيف يمكنني حل هذا التحدي.

الرموز ذات الصلة موضحة أدناه:

سي ++
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;
	}
سي ++
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 كما هو موضح أدناه. هل هناك أي شيء خطأ في ذلك؟

سي ++
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 | مايكروسوفت تعلم[^] إرجاع حجم النص في الوحدات المنطقية. تستخدم وظائف عرض النص هذا الرقم مضروبًا في حجم الخط لحساب المساحة الفعلية المطلوبة للعرض.

حسنًا، لقد اختبرت هذا للتو وتعكس قيم الحجم الخط المستخدم. أعتقد أنك بحاجة إلى إلقاء نظرة فاحصة على ما يحدث في التعليمات البرمجية الخاصة بك، مع إشارة محددة إلى ملف CreateAppFont وظيفة.

コメント

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