在指定区域内绘制文本
来源:互联网 发布:ipcam监控软件 编辑:程序博客网 时间:2024/04/28 14:11
在某些情况下,显示文本的区域比较小,而显示的文本比较长,这时就需要截取部分文本,并以省略号的代替的形式来显示文本,下面这个函数是一个比较笨拙的处理方式:
int DrawTextInRect(HDC hDC, CString& strText,RECT& rect,UINT nFormat,CSize sizeMargin = CSize(0,0))
{
//在指定区域以指定格式绘制文本
//HDC hDC 绘制文本的DC句柄
//CString& strText 绘制的文本
//RECT& rect 绘制文本的区域
//UINT nFormat 绘制文本的格式,与DT相同的设置
//CSize sizeMargin 文本距离区域的边距
//
CString strTemp = strText;
CRect rcTemp = 0;
CRect rcDraw = rect;
rcDraw.DeflateRect(sizeMargin.cx,sizeMargin.cy);//绘制文本的区域
CDC* pDC = CDC::FromHandle(hDC);
//是否垂直居中
UINT nVCenter = DT_VCENTER & nFormat;
if (nVCenter)
{
//计算当前设备字体高度
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nFontHeight = tm.tmHeight + tm.tmExternalLeading;
int nMargin = (rcDraw.Height() - nFontHeight) / 2;
rcDraw.DeflateRect(0,nMargin);
}
//计算文本需要的区域
pDC->DrawText(strTemp,&rcTemp,DT_CALCRECT);
//处理文本字符串
if (rcTemp.Width() <= rect.right - rect.left)
{
pDC->DrawText(strTemp,&rcDraw,nFormat);
}
else
{
int nVWidth = rcDraw.Width() - sizeMargin.cx * 2;
strTemp = L"...";
pDC->DrawText(strTemp,&rcTemp,DT_CALCRECT);
nVWidth -= rcTemp.Width();
strTemp = strText;
int nLen = strTemp.GetLength();
//计算截取后的字符串
while (nLen > 0)
{
pDC->DrawText(strTemp,&rcTemp,DT_CALCRECT);
if (rcTemp.Width() > nVWidth)
{
strTemp.Delete(nLen - 1);
nLen --;
}
else
{
break;
}
}
strTemp += L"...";
pDC->DrawText(strTemp,&rcDraw,nFormat);
}
return 0;
}
- 在指定区域内绘制文本
- 在指定区域内输出具备自动换行的文本
- 文字成批滚动在指定区域内
- GIS,判断点是否在指定区域内
- 将鼠标锁定在指定区域内
- 判断一个点是否在指定区域内
- 判断一个点是否在指定区域内
- 判断一个点是否在指定区域内
- Cocos2d-x--判断触摸点是否在指定区域内
- 判断一个点在指定区域内 多边形,圆
- mongodb 判断坐标是否在指定多边形区域内的方法
- mongodb 判断坐标是否在指定多边形区域内的方法
- mysql 判断点是否在指定多边形区域内
- 字符串在指定区域内按照指定的字体显示时,需要的高度和宽度
- 使文本区域内自动换行
- 指定区域内图像颜色反转
- opencv在图片指定区域内填充矩形,并在图片中显示矩形的轮廓
- 在区域内绘制宽字符串多行自动换行的c语言实现方法
- 正则表达式30分钟入门教程
- 实模式下时间日期的获取及显示
- Linux基本操作命令
- rewriter二级域名映射技术的实现方式介绍
- SVN使用
- 在指定区域内绘制文本
- 强烈推荐:C#/VB.NET 下最好的RAS拨号程序
- VC使用ADO技术访问数据库
- 中文字符的显示
- AJAX技巧:如何处理书签和后退按钮(1)
- ubuntu configure的问题解决
- AJAX技巧:如何处理书签和后退按钮(2)
- 一.顺序存储结构线性表基本操作实现算法
- 遗传算法最优解的精度及误差估计