注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

简单代码

寻找代码的灵魂

 
 
 

日志

 
 
关于我

对于本博客内所有原创文章和代码的引用必须标明“来源:http://simplesource.blog.163.com/”。如需应用于商业目的必须经本人同意,本人对所有原创文章和代码保留一切权利。 PS:需要部分程序源代码的请留下邮箱地址

网易考拉推荐

多字节环境取得CEdit控件选中文本  

2012-11-16 17:02:32|  分类: 技术文献 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  CEdit控件可能是比较原始的关系,官方并没有提供取得控件内选中文字的函数,可用的只有GetSel。但是GetSel这个函数在多字节环境下返回的也是UNICODE的选择开始和结束位置,也就是一个中文字符会被算成一个。如果用这个函数获取的开始和结束位置直接去截取WindowText的值就会很容易取到错误的内容。我上网查了半天,无果,稍稍思考了一下,于是就有了下面这个曲线救国的方法:

#include <string>

CString GetSelectedText(CEdit &edit)
{
int nStart, nEnd;
CString txt;
edit.GetWindowText(txt);
USES_CONVERSION;
std::wstring s = A2W(txt);
edit.GetSel(nStart, nEnd);
return CString(s.substr(nStart, nEnd - nStart).c_str());
}

  思路也很简单,既然GetSel取得的结果在UNICODE环境是正确的,那么我们唯有先把WindowText的值转换为宽字节字符串,然后再去截取喽~~
  评论这张
 
阅读(1355)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018