C++ 中 Scintilla 的语法高亮显示

Posted

技术标签:

【中文标题】C++ 中 Scintilla 的语法高亮显示【英文标题】:Syntax Highlighting for Scintilla in C++ 【发布时间】:2018-07-09 09:31:38 【问题描述】:

我正在开发基于 MFC 的代码编辑器。我被卡住的部分是当我需要为关键字添加颜色时,基本上什么都没有发生。 SCE_C_WORD 应该正在设置它(我也找到了 SCE_C_WORD2,但也没有任何反应)。

void ScintillaCtrl::SetUpEditor()

    SendEditor(SCI_SETKEYWORDS, NULL, reinterpret_cast<LPARAM>(ini.GetKeywords()));

    SetAStyle(SCE_C_COMMENT, ini.GetColor(_T("comment")));
    SetAStyle(SCE_C_COMMENTLINE, ini.GetColor(_T("comment")));
    SetAStyle(SCE_C_COMMENTDOC, ini.GetColor(_T("comment")));
    SetAStyle(SCE_C_NUMBER, ini.GetColor(_T("number")));
    SetAStyle(SCE_C_STRING, ini.GetColor(_T("string")));
    SetAStyle(SCE_C_CHARACTER, ini.GetColor(_T("string")));
    SetAStyle(SCE_C_UUID, ini.GetColor(_T("uuid")));
    SetAStyle(SCE_C_OPERATOR, ini.GetColor(_T("operators")));
    SetAStyle(SCE_C_PREPROCESSOR, ini.GetColor(_T("preprocessor")));
    SetAStyle(SCE_C_WORD, ini.GetColor(_T("keywords")));
    //SetAStyle(SCE_C_WORD2, ini.GetColor(_T("keywords")));

这是我设置语言编辑器的方法(从 ini 文件中读取颜色)。我已经检查过,颜色已写入 ini 文件,所有其他颜色都可以使用(cmets、运算符等)。

编辑:标签宽度、词法分析器等的代码...

void ScintillaCtrl::LoadDefaultState()

    SendEditor(SCI_SETLEXER, SCLEX_NULL);
    SendEditor(SCI_SETTABWIDTH,4);
    SetAStyle(STYLE_DEFAULT, RGB(0, 0, 0), RGB(255, 255, 255), 10, "Arial");
    SendEditor(SCI_SETCARETFORE, RGB(0, 0, 0));
    SendEditor(SCI_STYLECLEARALL, NULL);
    SendEditor(SCI_SETSELBACK, TRUE, ini.GetColor(_T("selection")));

【问题讨论】:

我建议检查这样的例子:codeproject.com/articles/14722/… 这是我一直在做的例子 这个例子又打了几个电话,你也试过了吗?也许你错过了什么。 我用另一种方法调用这些调用,因为它们对于每种语言都是相同的,所以它们不在这里,我现在要编辑我的帖子并将代码放在这里。 【参考方案1】:

设法解决它。问题是我将宽字符(unicode)中的关键字发送到 Scintilla,但它只接受 char 格式的关键字,所以当我将其更改为 char 时它起作用了。

【讨论】:

以上是关于C++ 中 Scintilla 的语法高亮显示的主要内容,如果未能解决你的问题,请参考以下文章

Scintilla开源库使用指南

用于 C 的 wxPython 语法高亮

C++语法高亮html生成器

C++ Visual Studio 函数语法高亮

具有语法突出显示的文本框/富文本框? [C#] [关闭]

如何在 Scintilla 中居中对齐文本?