Scintilla 主要类和控件的消息

Scintilla文档采用字节对存储字符及样式信息,32种基础样式覆盖多种语言。消息处理主要通过SCI_GETxxx或SCI_SETxxx,如SCI_GETTEXT用于获取文本。此外,中文字符的特殊计数可能导致DBCS问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要类

CellBuffer

保存文本,样式信息,恢复堆栈,标签,代码叠起结构等信息

ContractionState

 

Document

包含CellBuffer和一些高度抽象操作,管理样式处理。

Editor

使用ContractionState, Indicator, LineMarker, Style, ViewStyle来显示文档KeyMap和ContractionState同样在这里使用。

Indicator

 

LineMarker

 

Style

 

ViewStyle

 

KeyMap

 

ScintillaBase

Editor的子类,增加了调用提示和自动完成等功能,使用类CallTip和AutoComplete

CallTip

 

AutoComplete

 

Scintilla文档的每个字符都紧跟关联的样式信息。一个字节的字符信息和一个字节的样式信息作为一个单位。样式信息高3位是指示器,低5位是索引号。索引号索引一个存放样式的数组。这样就可以表示32种基础样式,几乎包含所有语言的样式。三个无关指示器可以一次显示语法错误,非法命名,和缩进错误。关于样式的位可以通过SCI_SETSTYLEBITS来改变最多其中7位,剩下的位用于指示器。

字符位置信息以0开始计数,至nLen-1,中文的字符是两个字符为一个文字,这样计数就有误了(DBCS)

 

Scintilla的消息都是以SCI_GETxxx或者SCI_SETxxx来命名的

一.文本取回与修改

主要消息有:

 


SCI_GETTEXT(int length, char *text)

SCI_SETTEXT(
<unused>const char *text)

SCI_SETSAVEPOINT

SCI_GETLINE(
int line, char *text)

SCI_REPLACESEL(
<unused>const char*text)

SCI_SETREADONLY(
bool readOnly)

SCI_GETREADONLY

SCI_GETTEXTRANGE(
<unused>, TextRange*tr)

SCI_ALLOCATE(
int bytes, <unused>)

SCI_ADDTEXT(
int length, const char *s)

SCI_ADDSTYLEDTEXT(
int length, cell *s)

SCI_APPENDTEXT(
int length, const char*s)

SCI_INSERTTEXT(
int pos, const char*text)

SCI_CLEARALL

SCI_CLEARDOCUMENTSTYLE

SCI_GETCHARAT(
int position)

SCI_GETSTYLEAT(
int position)

SCI_GETSTYLEDTEXT(
<unused>, TextRange*tr)

SCI_SETSTYLEBITS(
int bits)

SCI_GETSTYLEBITS

SCI_TARGETASUTF8(
<unused>char *s)

SCI_ENCODEDFROMUTF8(
const char *utf8,char *encoded)

SCI_SETLENGTHFORENCODE(
int bytes)

 

1)SCI_GETTEXT(int length, char *text)

此函数可以取得控件中的字符串存到一个缓冲区,这样就可以保存文档了。流程是使用SCI_GETLENGTH获得字符串的长度然后根据取得的长度申请一个缓冲区,再利用该消息取得文本,然后就可以保存文本了,同时需要利用SCI_SETSAVEPOINT标记文本已保存了。

 

做了例子果然是可以运行的,不知道作者是如何制作这样一个控件的。我对他的内部运行机制很感兴趣,想仔细看一些具体的代码,而不是仅仅使用它。另外发现API使用的字符是宽字符,这一点很令人讨厌。

另外获取处理函数的过程用了上次写的typedef的用法,改一下看上去就清晰多了

typedef  int  ( * EditorSendFun)( void * , int , int , int );
void *  ptr;
EditorSendFun editsendmessage;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值