主要类

CellBuffer

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

ContractionState

 

Document

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

Editor

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

Indicator

 

LineMarker

 

Style

 

ViewStyle

 

KeyMap

 

ScintillaBase

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

CallTip

 

AutoComplete

 

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

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

 

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

一.文本取回与修改

主要消息有:

 

 

1SCI_GETTEXT(int length, char *text)

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

 

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

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

typedef int (*EditorSendFun)(void*,int,int,int);
void* ptr;
EditorSendFun editsendmessage;