主要類

CellBuffer

保存文本,樣式信息,恢復(fù)堆棧,標(biāo)簽,代碼疊起結(jié)構(gòu)等信息

ContractionState

 

Document

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

Editor

使用ContractionState, Indicator, LineMarker, Style, ViewStyle來顯示文檔KeyMapContractionState同樣在這里使用。

Indicator

 

LineMarker

 

Style

 

ViewStyle

 

KeyMap

 

ScintillaBase

Editor的子類,增加了調(diào)用提示和自動(dòng)完成等功能,使用類CallTipAutoComplete

CallTip

 

AutoComplete

 

Scintilla文檔的每個(gè)字符都緊跟關(guān)聯(lián)的樣式信息。一個(gè)字節(jié)的字符信息和一個(gè)字節(jié)的樣式信息作為一個(gè)單位。樣式信息高3位是指示器,低5位是索引號(hào)。索引號(hào)索引一個(gè)存放樣式的數(shù)組。這樣就可以表示32種基礎(chǔ)樣式,幾乎包含所有語(yǔ)言的樣式。三個(gè)無(wú)關(guān)指示器可以一次顯示語(yǔ)法錯(cuò)誤,非法命名,和縮進(jìn)錯(cuò)誤。關(guān)于樣式的位可以通過SCI_SETSTYLEBITS來改變最多其中7位,剩下的位用于指示器。

字符位置信息以0開始計(jì)數(shù),至nLen-1,中文的字符是兩個(gè)字符為一個(gè)文字,這樣計(jì)數(shù)就有誤了(DBCS

 

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

一.文本取回與修改

主要消息有:

 

 

1SCI_GETTEXT(int length, char *text)

此函數(shù)可以取得控件中的字符串存到一個(gè)緩沖區(qū),這樣就可以保存文檔了。流程是使用SCI_GETLENGTH獲得字符串的長(zhǎng)度然后根據(jù)取得的長(zhǎng)度申請(qǐng)一個(gè)緩沖區(qū),再利用該消息取得文本,然后就可以保存文本了,同時(shí)需要利用SCI_SETSAVEPOINT標(biāo)記文本已保存了。

 

做了例子果然是可以運(yùn)行的,不知道作者是如何制作這樣一個(gè)控件的。我對(duì)他的內(nèi)部運(yùn)行機(jī)制很感興趣,想仔細(xì)看一些具體的代碼,而不是僅僅使用它。另外發(fā)現(xiàn)API使用的字符是寬字符,這一點(diǎn)很令人討厭。

另外獲取處理函數(shù)的過程用了上次寫的typedef的用法,改一下看上去就清晰多了

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