如何解决CRichEditCtrl控件在显示中文时的选择位问题

在较新版本的CRichEditCtrl控件里,中文字符和英文一样,只占一个选择位,这就导致选择操作(主要是GetSel和SetSel函数)针对中文时不正确,在网上查了一下,有人也遇到这个问题,但都没有很好的解决办法。

这几天我也遇到这个问题,试验了一下,找到了一个办法。我的应用的目的是要实现滚动显示文本内容,但内容遇到关键字就要高亮显示,并将该关键字所在行的背景色改变。

 

#include <stdlib.h>
#include <locale.h>

 

int lSelStart, lSelEnd, lLineSelStart, lLineSelEnd;

 

setlocale( LC_ALL, "chs" );//设置本地字符

 

m_ctlEdit.SetSel (-1, -1);//到最后

m_ctlEdit.GetSel (lSelStart, lSelEnd);//取得选择位置,注意中英文都只算一个选择位

 

lLineSelStart = lSelEnd - _mbstrlen(szLine);//最后一行起始位,szLine是指向最后一行的指针
lLineSelEnd = lSelEnd;//该行结束位

 

lSelStart = lSelStart - _mbstrlen(pszToken) + 1;//关键字的起始位置,pszToken指向szLine中关键字的起始位置
lSelEnd = lSelStart + _mbstrlen(szKeyword);//关键字的结束位置,szKeyword指向关键字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CRichEditCtrl是一个强大的编辑控件,类似于QQ中的文本输入框。它提供了许多丰富的功能和属性,使用户可以在文本框中进行各种编辑操作。 首先,CRichEditCtrl支持格式化文本的输入和显示。用户可以在文本框中输入普通文本、图像、表格等多种内容,并且可以对这些内容进行格式化,如设置字体、字号、颜色、对齐方式等,使文本呈现出更加丰富多样的样式。 其次,CRichEditCtrl还支持富文本编辑。用户可以在文本框中进行插入和删除操作,如插入链接、插入图片、插入超链接等。同,用户还可以对文本进行复制、粘贴和剪切等操作,实现对文本内容的高效编辑和管理。 此外,CRichEditCtrl还提供了撤销和重做功能,使用户可以方便地撤销之前的编辑操作,并重新执行已经撤销的操作。这样,用户就可以随回退到之前的状态,确保编辑操作的准确性和完整性。 最后,CRichEditCtrl还支持自动完成和输入提示功能。用户在输入文本CRichEditCtrl可以自动提供半透明的输入提示窗口,显示可能的补充内容,如常用词汇、表情符号等,帮助用户快速输入并提高输入效率。 综上所述,CRichEditCtrl类似于QQ中的编辑控件,它具有强大的编辑功能、支持富文本编辑和格式化显示、提供撤销和重做功能,同还支持自动完成和输入提示。这使得用户可以在文本输入体验到更多的便捷和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值