Guide de l'utilisateur de Scintilla (1) - Introduction

黄舟
Libérer: 2023-03-04 21:08:01
original
2540 Les gens l'ont consulté

Scintilla est un composant d'édition open source qui possède non seulement les fonctions d'édition habituelles, mais fournit également des fonctions telles que le style de syntaxe, le pliage de code, les balises, la saisie semi-automatique du code et les invites.
La version Windows de Scintilla est un composant Windows standard. Les utilisateurs peuvent envoyer des messages et interagir avec celui-ci via la fonction SendMessage. L'interface de la fonction SendMessage est la suivante :

LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
Copier après la connexion


La version GTK de Scintilla utilise une méthode similaire à la version Windows pour la livraison des messages. L'introduction suivante se concentrera sur la version Windows.
Scintilla fournit un grand nombre d'API de messages, chaque message peut avoir 0, 1 ou 2 paramètres. Le message dans la fonction SendMessage comporte généralement deux paramètres : wParam et lParam. Par conséquent, pour les paramètres inutilisés, il est fortement recommandé de les mettre à 0 pour garantir la compatibilité avec les versions futures. Pour la plupart des messages de paramétrage SCI_SETxxxxx, il y aura un message de requête SCI_GETxxxxx correspondant.

Type de paramètre

Le type de paramètre dans le message, comme indiqué dans le tableau suivant :

Type de paramètre                                                                                                                                                                  bool                       0 signifie FAUX, 1 signifie VRAI
                                                        Pointeur de chaîne constant, la chaîne peut se terminer par 0 ou être transmise à un autre. Un paramètre spécifie la longueur de


car*                     pointeur de tampon de caractères, Scintilla le remplira avec les données de caractères interrogées. Dans certains cas, la taille du tampon est spécifiée via un autre paramètre ; dans d'autres cas, vous devez vous assurer que le tampon est suffisamment grand pour accueillir les données de caractères interrogées. Si vous transmettez un pointeur nul de 0, le message renverra la taille des données de caractères interrogées.


couleur Valeur de couleur au format RVB. Chaque couleur a une valeur comprise entre 0 et 255. Le rouge, le vert et le bleu sont combinés comme suit pour obtenir la valeur de couleur : couleur = rouge | (vert << 8) (bleu << 16). 0x000000, noir ; 0xff0000, bleu ; 0x00ff00, vert ; 0x0000ff, rouge ;


alpha La valeur du canal alpha représente la translucidité de la couleur. La plage de valeurs est : 0 (complètement transparent, SC_ALPHA_TRANSPARENT) - 255 (opaque, SC_ALPHA_OPAQUE). Une valeur de 256 (C_ALPHA_NOALPHA) signifie ne pas utiliser le canal alpha. Toutes les plates-formes ne prennent pas en charge les canaux alpha et seuls certains messages implémentent des effets alpha. La valeur alpha par défaut du message est 256 et aucun canal alpha n'est utilisé.

<<> & lt; paramètres inutilisés & gt;, il est fortement recommandé de le mettre à 0 pour assurer la compatibilité avec la future version

type de données


Dans scintilla, les structures de données suivantes sont utilisées :


CharacterRange

Structure de données de plage de caractères, qui est la même que la structure de données WIN32 CHARRANGE.

TextRange


Structure de données de plage de texte, principalement utilisée pour obtenir une plage de texte spécifiée à partir du composant Scintilla, identique à la structure de données WIN32 TEXTRANGE.

struct CharacterRange {

long cpMin;
long cpMax;
};
Copier après la connexion

TextToFind


Recherchez la structure de données texte, qui est la même que la structure de données WIN32 FINDTEXTEX.

struct TextRange {
struct CharacterRange chrg;
char *lpstrText;
};
Copier après la connexion

SCNotification

Structure des données de notification d'événement. Sous Windows, Scintilla enverra un message WM_NOTIFY à sa fenêtre parent ; dans GTK, Scintilla enverra un signal de notification à sa fenêtre parent.


struct TextToFind {struct CharacterRange chrg; 
// 搜索范围char *lpstrText; // 搜索文本struct CharacterRange chrgText; // 匹配文本};
Copier après la connexion

Intégration avec 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();
}
Copier après la connexion

然后,在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();
}
Copier après la connexion

这样,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);
}
Copier après la connexion

以上就是Scintilla,简介的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!