Heim  >  Artikel  >  Backend-Entwicklung  >  Scintilla-Benutzerhandbuch (1) – Einführung

Scintilla-Benutzerhandbuch (1) – Einführung

黄舟
黄舟Original
2017-01-17 10:24:212541Durchsuche

Scintilla ist eine Open-Source-Bearbeitungskomponente, die nicht nur über die üblichen Bearbeitungsfunktionen verfügt, sondern auch Funktionen wie Syntaxstil, Codefaltung, Tags, automatische Codevervollständigung und Eingabeaufforderungen bereitstellt.
Die Windows-Version von Scintilla ist eine Standard-Windows-Komponente. Benutzer können über die SendMessage-Funktion Nachrichten senden und mit ihr interagieren. Die SendMessage-Funktionsschnittstelle lautet wie folgt:

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);


Die GTK+-Version von Scintilla verwendet eine ähnliche Methode wie die Windows-Version für die Nachrichtenübermittlung. Die folgende Einführung konzentriert sich auf die Windows-Version.
Scintilla bietet eine große Anzahl von Nachrichten-APIs. Jede Nachricht kann 0, 1 oder 2 Parameter haben. Die Nachricht in der SendMessage-Funktion verfügt normalerweise über zwei Parameter: wParam und lParam. Daher wird dringend empfohlen, sie auf 0 zu setzen, um die Kompatibilität mit zukünftigen Versionen sicherzustellen. Für die meisten SCI_SETxxxxx-Einstellungsnachrichten gibt es eine entsprechende SCI_GETxxxxx-Abfragenachricht.

Parametertyp

Der Parametertyp in der Nachricht, wie in der folgenden Tabelle gezeigt:

Parametertyp                                                                                                                                                    bool                       0 bedeutet FALSCH, 1 bedeutet WAHR
                                                            Zeichenpufferzeiger, Scintilla füllt ihn mit den abgefragten Zeichendaten. In manchen Fällen wird die Puffergröße durch einen anderen Parameter angegeben; in anderen Fällen müssen Sie sicherstellen, dass der Puffer groß genug ist, um die abgefragten Zeichendaten aufzunehmen. Wenn Sie einen Nullzeiger von 0 übergeben, gibt die Nachricht die abgefragte Zeichendatengröße zurück.


Farbe Farbwert im RGB-Format. Jede Farbe hat einen Wert von 0 - 255. Rot, Grün und Blau werden wie folgt kombiniert, um den Farbwert zu erhalten: Farbe = Rot | (Grün << 8) |. 0x000000, schwarz; 0x00ff0, grün; 0xffffff, weiß;


alpha Der Alphakanalwert stellt die Transluzenz der Farbe dar. Der Wertebereich ist: 0 (völlig transparent, SC_ALPHA_TRANSPARENT) - 255 (undurchsichtig, SC_ALPHA_OPAQUE). Ein Wert von 256 (C_ALPHA_NOALPHA) bedeutet, dass der Alphakanal nicht verwendet wird. Nicht alle Plattformen unterstützen Alphakanäle und nur einige Nachrichten implementieren Alphaeffekte. Der Standard-Alpha-Wert der Nachricht beträgt 256 und es wird kein Alpha-Kanal verwendet.

& lt; unbenutzte & gt; Es wird dringend empfohlen, ihn auf 0 zu setzen, um die Kompatibilität mit dem Datentyp

der zukünftigen Version sicherzustellen in scintilla, in SCINTILA,, in scintilla, Die folgenden Datenstrukturen werden verwendet:


CharacterRange


Zeichenbereichsdatenstruktur, die mit der WIN32-Datenstruktur CHARRANGE identisch ist.


TextRange

Textbereichsdatenstruktur, die hauptsächlich zum Abrufen eines bestimmten Textbereichs aus der Scintilla-Komponente verwendet wird, genau wie die WIN32-Datenstruktur TEXTRANGE.


TextToFind

Suchtextdatenstruktur, die mit der WIN32-Datenstruktur FINDTEXTEX identisch ist.
struct CharacterRange {

long cpMin;
long cpMax;
};

SCNotification

Datenstruktur der Ereignisbenachrichtigung. In Windows sendet Scintilla eine WM_NOTIFY-Nachricht an sein übergeordnetes Fenster; in GTK+ sendet Scintilla ein Benachrichtigungssignal an sein übergeordnetes Fenster.

struct TextRange {
struct CharacterRange chrg;
char *lpstrText;
};


Integration mit MFC

对于MFC应用程序向导创建的多文档程序,只需添加很少的代码,就可以将Scintilla控件嵌入到View中。假设工程名为EasyEdit,则相关的类分别为CEasyEditApp、CEasyEditDoc、CEasyEditView、CChildFrame。
首先,在CEasyEditApp中添加私有成员变量HMODULE m_hmodule和虚函数int ExitInstance(),并增加加载DLL代码和释放DLL代码:

BOOL CEasyEditApp::InitInstance()
{
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;
};
int CEasyEditApp::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if (m_hmodule)
{
FreeLibrary(m_hmodule);
}
return CWinApp::ExitInstance();
}

然后,在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,简介的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn