Scintilla笔记(3)

来源:互联网 发布:淘宝咖啡猫游戏代购 编辑:程序博客网 时间:2024/05/28 15:09
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));
    }
0 0