C++ 中 Scintilla 的语法高亮显示
Syntax Highlighting for Scintilla in C++
我正在研究基于 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 文件中,所有其他颜色都有效(注释、运算符等)。
编辑:制表符宽度、词法分析器等的代码...
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")));
}
设法解决了。问题是我将宽字符 (unicode) 的关键字发送给 Scintilla,但它只接受字符形式的关键字,所以当我将它更改为字符时它起作用了。
我正在研究基于 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 文件中,所有其他颜色都有效(注释、运算符等)。
编辑:制表符宽度、词法分析器等的代码...
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")));
}
设法解决了。问题是我将宽字符 (unicode) 的关键字发送给 Scintilla,但它只接受字符形式的关键字,所以当我将它更改为字符时它起作用了。