Scintilla!⼀个超棒的免费源代码编辑控件
源代码电影讲解
Scintilla是⼀个免费的源代码编辑控件,它完全开放源代码,并且提供⼀个license允许⽤户⾃由地将它⽤在开源软件或是商业软件中。
我是在做毕业课题的时候发现的这个编辑控件,使⽤后发现它实在是强⼤和稳定,作为源代码编辑控件,我们能在普通的的⽂本编辑控件中能看到的功能,Scintilla都完全能够实现,⽽且,它还能够提供很多编辑和调试源代码时有⽤的特殊功能。包括语法⾼亮显⽰,错误指⽰,代码⾃动完成以及代码提⽰等。⽽且在左边的空⽩处(margin),可以显⽰调试代码中⾮常有⽤的显⽰断点以及显⽰当前运⾏⾏等功能。⽽且,⾃定义风格的功能⽐其他⼤部分编辑器控件都开放,它允许⽤户⾃定义不同类型下的字体,是否粗体,是否斜体,前景⾊和背景⾊,⽀持⼤量的字体。举个例⼦,在设置C/C++编辑模式后,你可以定义注释语句类型的颜⾊,字体,⼤⼩等等,同样,可以⾃定义关键字类型的颜⾊,字体,⼤⼩……诸如此类,这样给⽤户极⼤的配置的⾃由。
据Scintilla的⽹站上发布的消息,Scitilla将在以后的开发中,更加灵活,健壮,更好地表现在.Net和java虚拟机中运⾏,就这⼀点,可以看出Scitilla项⽬就是⼀个⾮常有活⼒的项⽬,其开发团队对它⾮常有激情,这也使我们——这些⽤户从中受益。
据作者介绍,开发Scintilla的动机是来⾃他对Richedit的失望,在Richedit中,样式的改变被看作是⽂档
的⼀种改变,从⽽会被记录到undo的堆栈中,并且设置的⽂档对象的修改标记。这对源代码编辑是⾮常不合适的,改变关键字类型的颜⾊或是运算符的颜⾊,这不应该看作是⽂档的修改,也不应该能够通过undo/redo来返回/前进。我对此深有感触,如果是Richedit来做源代码编辑的控件,那将有太多的东西需要⾃⼰编写代码实现了,选择Scintilla,将是⼀个明智的选择,省时,省⼒,安全,可靠。
Scintilla⽬前提供了Win32版本和Linux版本。在Linux中使⽤的是GTK+,已经在Windows95,nt4.0, Windows2000, windows XP以及RedHat Linux8和9中的GTK+1.2和2.0中测试运⾏正常。这是⼀个跨平台的控件,也是我对其⾮常欣赏的原因之⼀。下⾯我的主要论述的还是在windows + VC下如何使⽤这个控件,但是其他平台/编译⼯具下也⼤同⼩异,触类旁通吧。
简介:
Scintilla的windows版本就是⼀个窗体控件。它的主要编程接⼝是通过窗体消息来传送的。你要实现什么功能,向控件发送⼀个消息就可以了,当需要从控件得到什么信息,接受WM_NOTIFY消息即可,可以从它带的参数中获得⼤量当前控件的信息,⽐如是否已经修改⽂字了,是否正在点击左边的边框等等。但是,实际上在MFC编程中,通过消息的⽅式来控制控件还是⾮常⿇烦的,因为这些消息的⼤部分都是⾃定义消息,不便于记忆。所以⼀般的做法就是将这些消息的调⽤封装成⼀个窗体类,这样调⽤⽅便多了。除了能实现⼀般编辑控件能实现的功能外,scintilla还能实现语法⾼亮,代码折叠,书
签,⾃动完成,语句提⽰等等功能。你完全可以不⽤学习标准编辑控件CEDIT或者是RichEdit,scintilla提供了协调⼀致的API⼝,这些都是它的优点之处。
事实上,scintilla开发组同时也⽤这个控件开发了⼀个编辑软件SciTE,它百分百的实现了scintilla的全部功能,如果你对scintilla⾮常感兴趣,但⼜不知它到底能做到那些功能的活,当⼀个SciTE,使⽤⼀下就完全明⽩了。同时,SciTE也是开源软件,学习它的代码,就是学习scintilla的使⽤⽅法。在scintilla的⽂档中,就说明了,这个⽂档只是独⽴地讲解各个消息的使⽤⽅法,功能和参数,并不能讲解如何把它们连接起来组成⼀个实⽤的编辑器,要想知道如何实现某些特定功能,还是看看SciTE是如何实现的。我也看过SciTE的代码,可读性还是不错的,可惜我是没有耐⼼的⼈,也就读了⼏个函数,⼤体了解了⼀下,如果你想⽤好这个控件,多读读SciTE的源码还是不错的。
scintilla的消息就⽤SendMessage函数发送,它提供两个头⽂件:Scintilla.h和SciLexer.h,消息号的宏定义都在这⾥,⽽且还有很多要⽤到的结构体,类型等等的定义。消息带的两个参数wParam和lParam是要经常⽤到的,也许会⽤到⼀个,两个,或者⽆需参数。但建议你最好在使⽤的时候把不⽤的参数都赋予0值,因为如果以后扩充消息功能,⽤到了某个参数,赋值能防⽌程序的崩溃。
通常参数的类型如下:
bool int const char* char* colour <unused>
其他的类型不⽤多说,⾄于color类型,是⽤于描述颜⾊的,它实际上就是⼀个整数,计算⽅法是:red|(green << 8)|(blue << 16), red,green,blue是8位2进制数,也就是2位16进制数。很容易就能实现256⾊的调配。⾄于<unused> ,就是说这个参数在这个消息中不⽤,可以赋为0值。
下⾯的讲解的重点是放在VC+MFC的环境中,因为我⼀直在这个环境下开发东西,要是⽤SDK编程也⼀样的,只是⽤到了更多的API,⾄于编译器,VC也好,GCC也好,我觉得没什么⼤问题,我就曾经⽤GDB调试SciTE的源码,来了解scintilla 如何使⽤的,Linux平台下的GTK+编程我没尝试过,从⽂档上看,也是⽤消息的⽅式来控制控件,⽤接受消息的⽅式来获得控件的信息。
下⾯我就如何封装scintilla成为⼀个窗体类,如何在程序中使⽤它的功能⼀⼀讲解,⽔平有限,⽽且现在还在上学中,可能写得⽐较慢,呵呵,谅解。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。