CRichEditCtrl系列讲堂3 关于版本和查找错位问题
来源:互联网 发布:大明王朝 知乎 编辑:程序博客网 时间:2024/05/16 06:24
1 如何使用richedit2.0 or richedit3.0
使用原因:由于RichEdit2.0A自动为宽字符(WideChar),所以它可以解决中文乱码以及一些汉字问题
方法一:(msdn上的做法,适用于用VC.NET及以后版本创建的工程)
To update rich edit controls in existing Visual C++ applications to version 2.0,
open the .RC file as text, change the class name of each rich edit control from "RICHEDIT" to "RichEdit20a".
Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.
方法二:以对话框为例:
(1) 增加一全局变量 HMODULE hMod;
(2) 在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));
在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
(3) 在对话框上放一个richedit,文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to "RichEdit20a".
(4) 在对话框头文件添加 CRichEditCtrl m_richedit;
在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);
来源:百度文档
2 CRichEdit GetSel引起的问题
执行代码为:
void CNovelReaderView::OnTextpos()
{
// TODO: 在此添加命令处理程序代码
long nStartChar, nEndChar;
}
测试字符串为:"abc你好吗?"
选中后为"abc你好吗?"
在VS2010中执行结果为:起始3字节,结束5字节;(使用UNICODE编码)
在VC6.0中执行结果为: 起始3字节,结束7字节
疑问:(1)GetSel返回值是基于0的字符个数还是字节个数?
最终解决:
(1)GetSel返回的应该是字符位置 而不是字节位置 至于vc6.0 中的返回位置 这只能说是个低版本的richedit的特点
(2)实验最终采用UNICODE编码解决,注意不管是什么编码GetSel返回的应该是字符位置 而不是字节位置
但是UNICODE编码中 不管中英文都占2字节(16 Bit),因此可以较准确的通过GetSel判断出
字节位置
(3) 当txt文件10M以上时,计算还是会存在偏差 这可能是内存分配连续与不连续方面的问题 一时无法解决
来源 http://topic.csdn.net/u/20120203/17/ae48c543-637f-470a-be99-97079e84e637.html
- CRichEditCtrl系列讲堂3 关于版本和查找错位问题
- CRichEditCtrl系列讲堂8 解决CEdit/CRichEdit中SetSel错位或者位置判断错误的问题
- CRichEditCtrl系列讲堂4 自己遇到的查找问题及解决方案
- CRichEditCtrl系列讲堂2 查找功能的实现
- CRichEditCtrl系列讲堂5 常用函数应用
- CRichEditCtrl系列讲堂6 一些小技巧
- CRichEditCtrl系列讲堂1 VC中在对话框上使用Rich Edit控件相关问题
- CRichEditCtrl系列讲堂7 设置行间距源代码
- 关于CRichEditCtrl
- 关于CRichEditView和CRichEditCtrl的相关资料
- 关于ListView 错位的问题
- 关于CRichEditCtrl的用法
- 关于idtcpserver收包错位的问题
- 关于ListView的滑动错位问题
- CRichEditCtrl中实现查找功能
- 关于EXTJS 2.2.1版本在IE环境下Grid组件表头下拉菜单图标错位问题的解决
- ios开发点滴-关于xib效果和模拟器效果跑出来错位的问题
- 关于在有限的宽度和高度下Jquery中的Dialog显示发生错位的问题
- Android 内存分析工具MAT使用
- 关于二维数组做参数的问题
- MPMoviePlayerController 电影播放器—IOS开发
- 集成禅道和svn
- mybatis在<if>中传入一个简单类型参数的两种写法
- CRichEditCtrl系列讲堂3 关于版本和查找错位问题
- UIView 和 CALayer的那点事
- 去掉禅道访问地址中的zentao
- 配置禅道系统为静态访问
- java取的日期的操作,放在类里
- Shell脚本大小写字符串转换(mail-username),telnet用在shell中
- 今天一直报java.lang.ClassCastException: org.ksoap2.SoapFault错
- 终于找到全annotation配置springMVC的方法了(事务不失效)
- mysql日期函数