CDC::GetTextExtentExPointI 是 MFC(Microsoft Foundation Classes)中的一个公共方法,用于获取带制表符和换行符的文本的宽度。该方法返回一个 BOOL 值,表示是否成功获取文本的宽度信息。如果成功,宽度信息将保存在 lpnFit 和 lpnDx 参数指定的缓冲区中。

以下是 GetTextExtentExPointI 方法的简化原型:
BOOL GetTextExtentExPointI(
   _In_reads_(cchString) const UINT *lpnString,
   _In_ int cchString,
   _Out_ int *lpnFit,
   _Out_writes_opt_(cchString) LPINT lpnDx,
   _In_ int nMaxExtent,
   _Out_opt_ LPINT lpnMaxExtent,
   _Out_opt_ LPSIZE lpSize
);

这个方法的参数说明如下:

  •  lpnString: 一个指向 UINT 数组的指针,包含要测量的文本字符串。每个元素代表一个字符。

  •  cchString: 指定要测量的字符数。

  •  lpnFit: 一个指向整数的指针,接收适应宽度的字符数。

  •  lpnDx: 一个指向整数数组的指针,用于接收每个字符的宽度。可以为 NULL。

  •  nMaxExtent: 限制文本的最大宽度,可以为 TE_NOHIDESEL 或 TE_SELECTALL。

  •  lpnMaxExtent: 一个指向整数的指针,接收文本的实际宽度。可以为 NULL。

  •  lpSize: 一个指向 SIZE 结构的指针,接收文本的逻辑宽度和高度。可以为 NULL。


以下是一个简单的示例,演示如何使用 GetTextExtentExPointI 方法:
CDC dc; // 假设已经创建了设备上下文对象

// 要测量的文本,以UINT数组的形式表示
UINT arrText[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'M', 'F', 'C', '!' };
int cchText = sizeof(arrText) / sizeof(UINT);

// 用于接收适应宽度的字符数
int nFit;

// 获取文本的宽度信息
BOOL bSuccess = dc.GetTextExtentExPointI(arrText, cchText, &nFit, NULL, 0, NULL, NULL);

// 输出结果
if (bSuccess)
{
    TRACE(_T("Text Fit: %d\n"), nFit);
}
else
{
    TRACE(_T("Error in GetTextExtentExPointI\n"));
}

在这个示例中,首先创建了一个设备上下文对象 dc,然后定义了要测量的文本字符串,使用 GetTextExtentExPointI 方法获取了适应宽度的字符数,并输出了结果。如果成功获取宽度信息,nFit 将包含适应宽度的字符数。


转载请注明出处:http://www.zyzy.cn/article/detail/17133/MFC/CDC