Scintilla笔记(3)
Scintilla支持代码折叠
目前,基本上所有的IDE都提供了代码折叠功能,Scintilla为我们也提供了设置代码折叠的功能,用户可以根据当前语言特点完成代码折叠。
实现代码折叠功能主要分为四步:
一、显示折叠的边距
m_ScintillaEdit.SetMarginWidthN(2, margin_width); //
|
二、显示折叠属性
m_ScintillaEdit.SetMarginSensitiveN(1, TRUE);
m_ScintillaEdit.SetMarginSensitiveN(2, TRUE);
m_ScintillaEdit.SetMarginTypeN(2, SC_MARGIN_SYMBOL);
m_ScintillaEdit.SetMarginMaskN(2, SC_MASK_FOLDERS);
m_ScintillaEdit.SetFoldLevel(2, SC_MASK_FOLDERS);
三、设置是否显示折叠
#define SETSCINTILLAPROPERTY(KEY, VALUE) m_ScintillaEdit.SetProperty(KEY, VALUE)
// 设置折叠
SETSCINTILLAPROPERTY(L"fold", L"1");
SETSCINTILLAPROPERTY(L"fold.compact", L"1");
SETSCINTILLAPROPERTY(L"fold.comment", L"1");
SETSCINTILLAPROPERTY(L"fold.preprocessor", L"1");
|
四、设置折叠的样式
//折叠标记
struct FoldMarker
{
int Marker;
int MarkType;
};
//Setup fold markers
FoldMarker FoldMarks[] =
{
{ SC_MARKNUM_FOLDEROPEN, SC_MARK_BOXMINUS, },
{ SC_MARKNUM_FOLDER, SC_MARK_BOXPLUS, },
{ SC_MARKNUM_FOLDERSUB, SC_MARK_VLINE, },
{ SC_MARKNUM_FOLDERTAIL, SC_MARK_LCORNER, },
{ SC_MARKNUM_FOLDEREND, SC_MARK_BOXPLUSCONNECTED, },
{ SC_MARKNUM_FOLDEROPENMID, SC_MARK_BOXMINUSCONNECTED, },
{ SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_TCORNER, },
};
for (int i = 0; i < sizeof(FoldMarks) / sizeof(FoldMarks[0]); i++)
{
m_ScintillaEdit.MarkerDefine(FoldMarks[i].Marker, FoldMarks[i].MarkType);
m_ScintillaEdit.MarkerSetFore(FoldMarks[i].Marker, RGB(255, 255, 255));
m_ScintillaEdit.MarkerSetBack(FoldMarks[i].Marker, RGB(128, 128, 128));
}
|