主要类
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来命名的
一.文本取回与修改
主要消息有:
















































1)SCI_GETTEXT(int length, char *text)
此函数可以取得控件中的字符串存到一个缓冲区,这样就可以保存文档了。流程是使用SCI_GETLENGTH
获得字符串的长度然后根据取得的长度申请一个缓冲区,再利用该消息取得文本,然后就可以保存文本了,同时需要利用
SCI_SETSAVEPOINT
标记文本已保存了。
做了例子果然是可以运行的,不知道作者是如何制作这样一个控件的。我对他的内部运行机制很感兴趣,想仔细看一些具体的代码,而不是仅仅使用它。另外发现
API
使用的字符是宽字符,这一点很令人讨厌。
另外获取处理函数的过程用了上次写的typedef的用法,改一下看上去就清晰多了


