中成网站建设
    成都做网站,就选中成网站建设!专业四川网站建设,成都网站建设服务提供商
            企业宣传网站建设、电子商务网站建设、OA办公系统。联系电话:028-66165255
    资讯列表  
 ASP.NET防止用户多次登录的方法…
 生成不重复的随机整数
 ASP.NET获取IP的6种方法
 ASP dot net 里的状态管理-Ses…
 判断获取的参数是否为null
 中文验证码生成实例
 微软发布第二个实验版的.Net 4…
 微软轻量级Web开发平台WebMatr…
 asp.net 生成图片验证码
 Asp.net直接保存文件到客户端
 .Net开发中的多线程编程总结
 C#中关于get和set的详细例子介…
 ASP.NET编程技巧:提高asp.net…
 asp.net 剪切 缩小图片原码
 截断过长字符串为省略号算法
    资讯详情  
截断过长字符串为省略号算法
发布时间:2010-06-18                  来源:成都网站建设--中成网建         【加入收藏】

  这是字符串超出显示范围的一个情况。其中,蓝色方框的区域是显示的区域,绿色方框是应该显示的字符,而红色则是省略号占据的空间。对于我们来说,只需要知道绿色方框能包含多少个字符即可。
  
  而GetTextExtentPoint函数能够计算输入的字符串占据的空间范围,所以通过它进行运算,就能获知我们需要显示多少个字符。现在的问题是,我们如何去调用这个函数?难道先从"你"开始,依次递进,以"你"、"你好"、"你好,"、"你好,这"等等这样的方式一个一个作为形参去进行测试?不用想,这效率,肯定奇差,甚至可能成为拖慢程序的一个禁锢。
  
  所以,简单点,我们就用二分法吧。声明一个函数,它可以接收当前的hdc,显示范围的大小,以及测试的字符串,返回的是该显示范围能容纳下的字符。
  
  故此,函数实现如下:

DWORD GetComfortSize(HDC hdc,DWORD dwWidth,const TSTRING &strText)  
{  
 //二分法查找  
 
 DWORD dwComfortSize = 0;  
 DWORD dwBeginSize = 0;  
 DWORD dwEndSize = strText.size();  
   
 while(TRUE)  
 {  
  DWORD dwMiddleSize = (dwEndSize + dwBeginSize) / 2;  
  if(dwMiddleSize == dwBeginSize || dwMiddleSize == dwEndSize)  
  {  
   //两个点之间已经没有数值可以检测,退出循环  
   dwComfortSize = dwBeginSize;  
   break;  
  }  
 
  SIZE sizeChk = {0};  
  ::GetTextExtentPoint(hdc,strText.c_str(),dwMiddleSize,&sizeChk);  
 
  if(sizeChk.cx == dwWidth)  
  {  
   //数值刚好合适,跳出循环  
   dwComfortSize = dwMiddleSize;  
   break;  
  }  
  else if(static_cast<DWORD>(sizeChk.cx) > dwWidth)  
  {  
   //重新设置边界  
   dwEndSize = dwMiddleSize;  
  }  
  else 
  {  
   //重新设置边界  
   dwBeginSize = dwMiddleSize;  
  }  
 
 }  
 
 return dwComfortSize;  
     }  

  1. //获取省略号的占据范围   
  2.      static const TSTRING FLAG_ELLIPSIS = TEXT("...");   
  3.  SIZE sizeEllipsis = {0};   
  4.      GetTextExtentPoint(hdc,FLAG_ELLIPSIS.c_str(),FLAG_ELLIPSIS.size(),&sizeEllipsis);   
  5.      
  6.      DWORD dwMaxDisp = GetComfortSize(hdc,sizeExtent.cx - sizeEllipsis.cx,strChk);  

 

 
上一篇:雅虎证实已成功买入Flicker.com域名控制权
下一篇:Web.com斥资1.35亿美元收购注册商Register
【打印】    【关闭】    【字体变小】    【字体变大】

友情链接

首页  |  建站学院  |  网站建设  |  成功案例  |  业务体系  |  软件定制  |  解决方案  |  联系我们  |  免责声明
中成网建公司地址:四川省成都市双楠双安东巷1号18-3-5 电话:028-6616 5255 版权所有 @ 中成网建
成都网站建设网址:www.csccd.net www.csccd.cn 邮箱:web#csccd.net
信息产业部备案号:蜀ICP备08106559号