主要類

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;