以下是引用cssnet在2025-9-3 11:11:31的发言:
不太清楚。我让DC猜测这个“校正参数”,我设置行距 lnlineSpacing = 行高的1.5倍,它给出的调整建议:
初始值:从 lc校正参数 = 0.08 开始测试
根据行间距调整:
1.0倍行距:校正参数 ≈ 0.04-0.06
1.5倍行距:校正参数 ≈ 0.08-0.12
2.0倍行距:校正参数 ≈ 0.12-0.16
根据字体大小调整:
小字体(8-10pt):减少校正参数
大字体(12-14pt+):增加校正参数
最终公式:
lnLinesPerPage = INT(thisform.RichTextBox1.Height / lnFontHeight / ;
(lnlineSpacing - (0.08 + (lnlineSpacing - 1) * 0.06)))
然而,结果并不理想。
获取RichEdit字体对象句柄代码中有个转换函数:
MulDiv(cf.yHeight / 20, 96, 72)
就是(cf.yHeight / 20) * 96 / 72

程序代码:
DLLIMPORT_C HFONT GetRichEditFontHandle(HWND hRichEdit)
{
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
// 获取当前选择文本的字符格式
SendMessage(hRichEdit, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
// 从CHARFORMAT创建字体对象
return CreateFont(
-MulDiv(cf.yHeight / 20, 96, 72), // 转换单位
0, 0, 0,
(cf.dwEffects & CFE_BOLD) ? FW_BOLD : FW_NORMAL,
(cf.dwEffects & CFE_ITALIC) ? TRUE : FALSE,
(cf.dwEffects & CFE_UNDERLINE) ? TRUE : FALSE,
(cf.dwEffects & CFE_STRIKEOUT) ? TRUE : FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
cf.szFaceName
);
}