19,468
社区成员
发帖
与我相关
我的任务
分享
/*!
* @brief 使用CDC类GetTextExtent接口获取字符串的精确的区域大小
*
* @param nXStart [in]区域的起点X坐标
* @param nYStart [in]区域的起点Y坐标
* @param pDC [in]设备DC指针
* @param str [in]字符串
* @return 该字符串的精确区域
*/
CRect CFontSizeView::GetCharExtent(int nXStart,int nYStart,CDC *pDC,const CString &str)
{
CSize fontSize = pDC->GetTextExtent(str);
return CRect(nXStart,nYStart,nXStart+fontSize.cx,nYStart+fontSize.cy);
}
/*!
* @brief 使用petzod的《Windows程序设计》中的第四章输出文字介绍的方法,
* 简单来说就是获取每个字符的宽高,然后进行计算。具体大家可以看该书的第四章。
*
* @param nXStart [in]区域的起点X坐标
* @param nYStart [in]区域的起点Y坐标
* @param pDC [in]设备DC指针
* @param str [in]字符串
* @return 该字符串的精确区域
*/
CRect CFontSizeView::GetCharExtent2(int nXStart,int nYStart,CDC *pDC,const CString &str)
{
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
LONG cxChar = tm.tmAveCharWidth ;
LONG cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ; // 单个字符的宽度
LONG cyChar = tm.tmHeight + tm.tmExternalLeading ; // 单个字符的高度
return CRect(nXStart,nYStart,nXStart+str.GetLength()*cxCaps,nYStart+cyChar);
}