Scintilla使用指南 1 簡介

2021-08-30 13:01:34 字數 3077 閱讀 6229

scintilla是乙個開源的編輯元件,它不僅具有通常的編輯功能,而且還提供了語法樣式、**摺疊、標籤、**自動完成和提示等功能。

windows版本的scintilla,是乙個標準的windows元件,使用者可以通過sendmessage函式傳送訊息,與其進行互動。sendmessage函式介面如下所示:

lresult sendmessage(

hwnd hwnd,

uint msg,

wparam wparam,

lparam lparam

);gtk+版本的scintilla,採用和windows版本相似的方式,進行訊息傳遞。下面的介紹,將以windows版本為主。

scintilla提供了大量的訊息api,每個訊息可以帶有0個、1個或2個引數。sendmessage函式中的訊息,通常帶有2個引數:wparam和lparam,因此對於沒有使用的引數,強烈建議將其設定為0,以保證與將來版本的相容。對於大多數sci_set***xx設定類訊息,都會有乙個對應的sci_get***xx查詢訊息。

引數型別

訊息中的引數型別,如下表所示:

引數型別

引數說明

bool

0表示false,1表示true

int32位有符號整數

const char*

常量字串指標,字串可能以0結尾,或者通過另乙個引數指明長度

char*

字元緩衝區指標,scintilla將會用查詢到的字元資料進行填充。在一些情況下,通過另乙個引數,指明了緩衝區大小;在另一些情況下,你必須保證緩衝區足夠大,可以容納查詢到的字元資料。如果你傳入了乙個空指標0,訊息將返回查詢到的字元資料大小。

colour

rgb格式的顏色值。每種顏色取值0 - 255,red、green、blue按如下方式組合,得到colour值:colour = red | (green << 8) | (blue << 16)。0x000000,黑色;0xff0000,藍色;0x00ff00,綠色;0x0000ff,紅色;0xffffff,白色。

alpha

alpha通道值,表示顏色的半透明度,取值範圍為:0(完全透明,sc_alpha_transparent)- 255(不透明,sc_alpha_opaque)。值256(c_alpha_noalpha)表示不使用alpha通道。並不是所有平台都支援alpha通道,並且只有一部分訊息實現了alpha效果。訊息預設alpha值為256,不使用alpha通道。

未使用引數,強烈建議將其設定為0,以保證與將來版本的相容。

資料型別

在scintilla中,使用了如下幾種資料結構:

characterrange

字元範圍資料結構,與win32資料結構charrange相同。

struct characterrange ;

textrange

文字範圍資料結構,主要用於從scintilla元件獲取指定範圍的文字,與win32資料結構textrange相同。

struct textrange ;

texttofind

搜尋文字資料結構,與win32資料結構findtextex相同。

struct texttofind ;

scnotification

事件通知資料結構。在windows中,scintilla將向它的父視窗傳送wm_notify訊息;在gtk+中,scintilla將向它的父視窗傳送notify訊號。

struct notifyheader ;

m_hmodule = loadlibrary(_t("scilexer.dll"));

if (null == m_hmodule)

::messagebox(null, _t("the scintilla dll could not be loaded."),

_t("error loading scintilla"), mb_ok | mb_iconerror);

return true;

// todo: 在此新增專用**和/或呼叫基類

if (m_hmodule)

freelibrary(m_hmodule);

}然後,在ceasyeditview中,增加wm_paint訊息處理函式void onpaint(),並在bool precreatewindow(createstruct& cs)和void onpaint()函式中增加**:

bool ceasyeditview::precreatewindow(createstruct& cs)

// todo: 在此處通過修改

//  createstruct cs 來修改視窗類或樣式

cs.lpszclass = _t("scintilla");

return cview::precreatewindow(cs);

void ceasyeditview::onpaint()

// cpaintdc dc(this); // device context for painting

// todo: 在此處新增訊息處理程式**

// 不為繪圖訊息呼叫cview::onpaint()

default();

}這樣,scintilla控制項就已經整合到view中了。

為了處理scintilla控制項傳送的事件通知,在cchildframe中,增加wm_notify訊息處理函式bool onnotify(wparam wparam, lparam lparam, lresult* presult):

bool cchildframe::onnotify(wparam wparam, lparam lparam, lresult* presult)

// todo: 在此新增專用**和/或呼叫基類

scnotification *pscnotification = (scnotification*)lparam;

ceasyeditview *pview = (ceasyeditview*)getactiveview();

switch (pscnotification->nmhdr.code)

return cmdichildwnd::onnotify(wparam, lparam, presult);

}

Scintilla使用指南 1 簡介

scintilla 是乙個開源的編輯元件,它不僅具有通常的編輯功能,而且還提供了語法樣式 摺疊 標籤 自動完成和提示等功能。windows 版本的scintilla,是乙個標準的windows元件,使用者可以通過sendmessage函式傳送訊息,與其進行互動。sendmessage函式介面如下所示...

Scintilla使用指南 3 搜尋和替換

scintilla 提供了搜尋和替換功能,它可以進行普通查詢和正規表示式查詢。scintilla的正規表示式,只提供了很有限的一些基本功能。在進行文字搜尋時,需要設定搜尋標誌 搜尋標誌 說明scfind matchcase 匹配大小寫 scfind wholeword 匹配整個單選 scfind w...

sqlmap詳細使用指南(1)

1.sqlmap update 更新公升級 2.sqlmap u http current user 獲取當前使用者名稱 3.sqlmap u http current db 獲取當前數 據庫名稱 4.sqlmap u http tables d db name 列表名 5.sqlmap u htt...