>백엔드 개발 >PHP 튜토리얼 >신틸라 사용자 안내서(1) - 소개

신틸라 사용자 안내서(1) - 소개

黄舟
黄舟원래의
2017-01-17 10:24:212607검색

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 함수의 메시지에는 일반적으로 wParam과 lParam이라는 두 개의 매개변수가 있습니다. 따라서 사용되지 않는 매개변수의 경우 향후 버전과의 호환성을 보장하기 위해 해당 매개변수를 0으로 설정하는 것이 좋습니다. 대부분의 SCI_SETxxxxx 설정 메시지에는 해당하는 SCI_GETxxxxx 쿼리 메시지가 있습니다.

매개변수 유형

다음 표에 표시된 메시지의 매개변수 유형:

매개변수 유형 사용 을 통해 off off ‐     ‐ ‐ off '
 

 

bool                       0은 거짓을 의미하고 1은 참을 의미합니다
                                                   상수 문자열 포인터, 문자열은 0으로 끝나거나 다른 매개변수로 전달될 수 있습니다. 하나의 매개변수는 문자열의 길이를 지정합니다.


char*                         문자 버퍼 포인터, Scintilla는 쿼리된 문자 데이터로 그것을 채울 것이다. 버퍼 크기가 다른 매개변수를 통해 지정되는 경우도 있고, 쿼리되는 문자 데이터를 수용할 수 있을 만큼 버퍼가 큰지 확인해야 하는 경우도 있습니다. 널 포인터 0을 전달하면 메시지는 쿼리된 문자 데이터 크기를 반환합니다.


color RGB 형식의 색상 값입니다. 각 색상은 0~255의 값을 갖습니다. 빨간색, 녹색 및 파란색을 다음과 같이 조합하여 색상 값을 얻습니다. 색상 = 빨간색(녹색


alpha 알파 채널 값은 색상의 반투명도를 나타냅니다. 값 범위는 0(완전 투명, SC_ALPHA_TRANSPARENT) - 255(불투명, SC_ALPHA_OPAQUE)입니다. 값 256(C_ALPHA_NOALPHA)은 알파 채널을 사용하지 않음을 의미합니다. 모든 플랫폼이 알파 채널을 지원하는 것은 아니며 일부 메시지만 알파 효과를 구현합니다. 메시지의 기본 알파 값은 256이며 알파 채널이 사용되지 않습니다.

& lt; 미사용 & gt; 미사용 매개변수이므로 향후 버전과의 호환성을 보장하기 위해 0으로 설정하는 것이 좋습니다.

데이터 유형


in scintilla, in SCINTILA,, in scintilla에서는 다음 데이터 구조가 사용됩니다:

CharacterRange

문자 범위 데이터 구조는 WIN32 데이터 구조 CHARRANGE와 동일합니다.

struct CharacterRange {

long cpMin;
long cpMax;
};

TextRange

텍스트 범위 데이터 구조, 주로 Scintilla 구성요소에서 지정된 텍스트 범위를 가져오는 데 사용되며, WIN32 데이터 구조 TEXTRANGE와 동일합니다.

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


TextToFind

검색 텍스트 데이터 구조로, WIN32 데이터 구조 FINDTEXTEX와 동일합니다.


struct TextToFind {struct CharacterRange chrg; 
// 搜索范围char *lpstrText; // 搜索文本struct CharacterRange chrgText; // 匹配文本};

SCNotification

이벤트 알림 데이터 구조. Windows에서 Scintilla는 WM_NOTIFY 메시지를 상위 창에 보냅니다. GTK+에서는 Scintilla가 상위 창에 알림 신호를 보냅니다.


struct NotifyHeader { // 与WIN32数据结构NMHDR相同
void *hwndFrom; // 发送通知的窗口句柄
uptr_t idFrom; // 发送通知的控件ID
unsigned int code; // SCN_*通知事件代码
};
struct SCNotification {
struct NotifyHeader nmhdr;
// SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_DWELLSTART,
// SCN_DWELLEND, SCN_CALLTIPCLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK
int position;
int ch; // SCN_CHARADDED, SCN_KEY
// SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK
int modifiers;
int modificationType; // SCN_MODIFIED
// SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION
const char *text;
int length; // SCN_MODIFIED
int linesAdded; // SCN_MODIFIED
int message; // SCN_MACRORECORD
uptr_t wParam; // SCN_MACRORECORD
sptr_t lParam; // SCN_MACRORECORD
int line; // SCN_MODIFIED, SCN_DOUBLECLICK
int foldLevelNow; // SCN_MODIFIED
int foldLevelPrev; // SCN_MODIFIED
int margin; // SCN_MARGINCLICK
int listType; // SCN_USERLISTSELECTION, SCN_AUTOCSELECTION
int x; // SCN_DWELLSTART, SCN_DWELLEND
int y; // SCN_DWELLSTART, SCN_DWELLEND
};


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)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.