主要類
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的用法,改一下看上去就清晰多了


