为Scintilla加入代码折叠功能
来自http://www.cppprog.com/2009/1111/176_2.html
前面曾说过当编辑器有代码折叠功能时,25号到31号这7个标记是作为代码折叠专用标记的。在scintilla.h中,我们可以找到它们的定义:
#define SC_MARKNUM_FOLDEREND 25 //折叠状态(多级中间)
#define SC_MARKNUM_FOLDEROPENMID 26 //展开状态(多级中间)
#define SC_MARKNUM_FOLDERMIDTAIL 27 //被折叠代码块尾部(多级中间)
#define SC_MARKNUM_FOLDERTAIL 28 //被折叠代码块尾部
#define SC_MARKNUM_FOLDERSUB 29 //被折叠的代码块
#define SC_MARKNUM_FOLDER 30 //折叠状态
#define SC_MARKNUM_FOLDEROPEN 31 //展开状态
显示这些标记的掩码是0xFE000000,同样头文件里已经定义好了:
#define SC_MASK_FOLDERS 0xFE000000
要加入代码折叠功能,还有一个最最关键的事情,就是要得到语法解析器(Lexer)的支持,上面的这些标记都是由语法解析器自动添加删除的。一般来说,只要用下面这条命令就可以了让语法解析器支持代码折叠了:
SendEditor(SCI_SETPROPERTY,(sptr_t)"fold",(sptr_t)"1");
是时候上代码了:
-
#define MARGIN_FOLD_INDEX 2
-
void TForm1::setFold()
-
{
-
SendEditor(SCI_SETPROPERTY,(sptr_t)"fold",(sptr_t)"1");
-
-
SendEditor(SCI_SETMARGINTYPEN, MARGIN_FOLD_INDEX, SC_MARGIN_SYMBOL);
-
SendEditor(SCI_SETMARGINMASKN, MARGIN_FOLD_INDEX, SC_MASK_FOLDERS);
-
SendEditor(SCI_SETMARGINWIDTHN, MARGIN_FOLD_INDEX, 11);
-
SendEditor(SCI_SETMARGINSENSITIVEN, MARGIN_FOLD_INDEX, TRUE);
-
-
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDER, SC_MARK_CIRCLEPLUS);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPEN, SC_MARK_CIRCLEMINUS);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEREND, SC_MARK_CIRCLEPLUSCONNECTED);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPENMID, SC_MARK_CIRCLEMINUSCONNECTED);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_TCORNERCURVE);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERSUB, SC_MARK_VLINE);
-
SendEditor(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERTAIL, SC_MARK_LCORNERCURVE);
-
-
-
SendEditor(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERSUB, 0xa0a0a0);
-
SendEditor(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERMIDTAIL, 0xa0a0a0);
-
SendEditor(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERTAIL, 0xa0a0a0);
-
-
SendEditor(SCI_SETFOLDFLAGS, 16|4, 0);
-
}
-
__fastcall TForm1::TForm1(TComponent* Owner)
-
: TForm(Owner)
-
{
-
...
-
setFold();
-
}
-
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
-
{
-
TForm::WndProc(Message);
-
-
if(Message.Msg == WM_NOTIFY){
-
SCNotification* notify = (SCNotification*)Message.LParam;
-
if(notify->nmhdr.code == SCN_MARGINCLICK &&
-
notify->nmhdr.idFrom == SCINT_ID){
-
-
const int line_number = SendEditor(SCI_LINEFROMPOSITION,notify->position);
-
SendEditor(SCI_TOGGLEFOLD, line_number);
-
}
-
}
-
}
现在的效果
}
相关推荐
代码折叠功能则允许用户隐藏或展开代码块,便于管理复杂的代码结构;还有行号显示、搜索与替换、多光标操作、拼写检查等功能,这些都极大地增强了编辑体验。 值得注意的是,知名的文本编辑器软件NotePad++就是基于...
- **代码折叠**:Scintilla 支持代码折叠功能,使得用户可以隐藏或展开代码块,提高代码阅读性。 - **自动完成**:通过自动完成功能,Scintilla 可以根据用户输入的内容提供可能的匹配项,提高编写代码的效率。 - **...
基于对话框和Scintilla控件的C++源代码编辑器,使用了MFC对话框,使用了Scintilla控件,实现了新建、打开、保存功能,实现了撤消、剪切、复制、粘贴、删除、查找、全选功能,可以实现代码关键字高亮
支持语法高亮显示、代码折叠、括号匹配、自动换行、行数标记、搜索替换、缩放字体、设置语法高亮规则,它可以同时编辑多种文件类型,多个文档该程序是基于MFC开发的多文档应用程序,使用了开源控件Scintilla。
Scintilla是一个开源的源代码编辑器控件,支持多种编程语言的语法高亮和代码折叠功能。它最初由Neil Hodgson开发,并作为Lexilla的一部分,提供了一个灵活的词法分析器引擎。Scintilla适用于Windows、GTK+、OSX以及...
而SciTE(Scintilla的文本编辑器)则是一个轻量级的源代码编辑器,专注于快速打开和编辑代码文件,同样基于Scintilla的强大功能。 开发者可以利用Scintilla的API接口,轻松地将源代码编辑功能集成到自己的应用程序...
8. "scintilla 中的代码折叠功能的使用 - libbyliugang的专栏 - CSDNBlog.txt":这份文档可能详细解释了Scintilla的代码折叠功能,有助于提高代码阅读和管理的效率。 这些资源对想要了解或深入使用 Scintilla 和 ...
源代码的版本为300,这通常意味着它包含了最新的功能和改进,提供了更高效的操作和更丰富的定制选项。 Scintilla的核心特性包括: 1. **语法高亮**:Scintilla支持多种编程语言的语法高亮,通过自定义词法分析器,...
代码折叠 添加标签 文本搜索功能一如既往强大 新增2000种宏 现在封装为易语言模块 将模块源码及实例奉出 ">最新的scintilla版本全新封装易语言模块源码 大名鼎鼎的Notepad++就是用得这个代码编辑控件 最新版支持...
它不仅具备基本的文本编辑功能,如文本选择、剪切、复制、粘贴等,还支持语法高亮、自动完成、代码折叠等高级特性,广泛应用于编程环境、文本编辑器、IDE(集成开发环境)等领域。 Scintilla的设计哲学是轻量级和...
Scintilla 的作者还开发了一个名为 SciTE 的演示程序,该程序功能强大,可作为日常代码编辑工具使用,值得下载学习。 #### 三、编译指南 本节重点介绍在 Windows 环境下的编译方法。对于 Linux 平台,虽然未作具体...
- 它不仅提供了基本的文本编辑功能,如复制、粘贴、查找、替换,还支持自定义样式、字体、颜色,以及代码折叠等高级特性。 - 通过Scintilla,开发者可以构建具有高度定制性和高性能的文本编辑器应用。 2. **...
Scintilla是一个开源的文本编辑组件,常用于创建支持语法高亮、代码折叠等功能的编程编辑器。3.72是Scintilla的一个版本号,通常每次更新都会修复已知问题,增强性能,并可能引入新的功能。这个压缩包包含的是...
### Scintilla MFC动态知识点解析 #### 一、概述 **Scintilla** 是一个开源的、可...通过上述步骤,开发者可以在MFC框架下有效地利用Scintilla的强大功能,为自己的应用程序增加一个功能齐全且易于使用的编辑器组件。
通过这些文件,开发者可以学习如何在MFC环境中集成Scintilla,创建一个具有语法高亮、代码折叠等功能的文本编辑器。例如,`ScintillaDemo.cpp`中可能会有`InitInstance`函数,它是MFC应用程序的入口点,用于创建主...
Scite作为上层应用,提供了一个用户友好的界面和更多的开发者工具,而Scintilla则专注于底层的文本编辑功能,两者共同为开发者提供了一流的源代码编辑体验。 **应用场景** 1. **开发环境**:Scite常被用于快速编写...
Scintilla是一个开源的文本编辑组件,它提供了丰富的代码编辑功能,如语法高亮、代码折叠、自动完成等,广泛应用于源代码编辑器、IDE和其他需要文本编辑功能的软件中。MFC是微软提供的C++类库,用于构建Windows应用...
这个"Delphi版函数折叠源代码"显然与编程有关,特别是涉及到Delphi IDE中的代码编辑器功能——函数折叠。函数折叠(Function Folding)是编程环境中一个非常实用的功能,它允许开发者隐藏或展开代码块,如函数或方法...
Scintilla是一款开源的文本编辑组件,被广泛用于创建自定义的代码编辑器...如果你下载了名为"scintilla"的压缩包,里面应该包含了Scintilla的源代码和其他资源,你可以进一步研究和定制它,打造属于自己的文本编辑器。