Mengapa nilai yang dikembalikan oleh getextentpoint32 tetap sama terlepas dari ukuran font saat ini?

pemrograman


Saya sedang mengembangkan aplikasi ini dan untuk memastikan konten disesuaikan dengan ukuran halaman, aplikasi menggunakan ukuran font saat ini dan nilai yang dikembalikan GetTextExtentPoint32 untuk menyesuaikan ukuran halaman dengan memasukkan keluaran ke dalam loop sementara. Saya agak terkejut saat mengetahui bahwa GetExtentPoint32 terus mengembalikan nilai yang sama meskipun ukuran font berkurang. Mengapa demikian, bagaimana saya bisa mengatasi tantangan ini.

Kode yang relevan ditunjukkan di bawah ini:

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);

Definisi aplikasi CreateFont adalah seperti yang ditunjukkan di bawah ini. Apakah ada yang salah dengan itu?

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);

	
}

Apa yang saya coba:

Saya telah menghabiskan waktu yang wajar untuk melakukan debug. Hasilnya sesuai dengan postingan ini.

Solusi 1

Itu Fungsi GetTextExtentPoint32A (wingdi.h) – Aplikasi Win32 | Microsoft Belajar[^] mengembalikan ukuran teks di dalamnya unit logis. Fungsi tampilan teks menggunakan angka tersebut dikalikan dengan ukuran font untuk menghitung ruang sebenarnya yang diperlukan untuk tampilan.

Saya baru saja menguji ini dan nilai ukurannya mencerminkan font yang digunakan. Saya pikir Anda perlu melihat lebih dekat apa yang terjadi dalam kode Anda, dengan referensi khusus ke CreateAppFont fungsi.

コメント

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