MFC如何使用开源Scintilla库?自动源码质量控制软件 iCode 编写全记录(一)
来源:互联网 发布:值得买源码 编辑:程序博客网 时间:2024/06/16 17:58
使用的是Scintilla库+VS2010。
下面是关于Scintilla库介绍的引用,都百度的到,不想看的可以跳过。直接看VS2010实战部分。
Scintilla库是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。从这里下载Scintilla库:http://scintilla.sourceforge.net/ScintillaDownload.html还有有Scinilla相关的库下载,比如wxStyledTextCtrl就是Scintilla的wxWidgets移植版。http://www.scintilla.org/ScintillaRelated.html另外,Scintilla的作者为了演示这个东东的功能,编写了一个叫SciTE的演示程序。不过这个程序的功能已经强大到足以作为我们的常用代码编辑器,很值得下载下来学习学习。
<p style="color: rgb(51, 51, 51); font-family: verdana, 宋体, Arial; font-size: 13px; line-height: 24px; margin: 5px auto; padding-top: 0px; padding-bottom: 0px;">首先进入scintilla的win32目录:</p><pre class="toc" name="code" style="white-space: pre-wrap; word-wrap: break-word; color: rgb(51, 51, 51); font-size: 13px; line-height: 24px; background-color: rgb(255, 255, 255); margin-top: 0px; margin-bottom: 0px; padding: 0px;">cd scintilla\win32
- 对于mingw,输入:
mingw32-make
- 对于VC6以上版本,输入:
nmake -f scintilla.mak
- 对于VC6(没试过,从Readme里看来的),输入:
nmake -f scintilla_vc6.mak
- 对于C++Builder,输入:
make -fscintilla.mak
编译完成后,在bin目录里会得到Scintilla.dll和SciLexer.dll文件,SciLexer.dll是包含了语法解析器 (Lexer)的Scintilla控件,一般来说我们只要用它就可以了。
需要说明的是,不管是用什么编译器生成的DLL文件,都可以供给其它编译器使用(就象系统DLL一样,任何编译器都能使用),所以不用为各种编译器都编译 一份。
如果觉得生成的SciLexer.dll太大的话,可以考虑去除自带的部分语法解析器。比如你打算只用它来高亮C++代码的话,可以:
- 进到src目录里,移除除LexCPP.cxx以外的所有Lex*.cxx文件
- 执行LexGen.py重建make文件和KeyWords.cxx文件(需要安装Python)。
- 重新按前面的方法编译,这样生成的SciLexer.dll就只带有C++语法解析器了,体积也大小减小了(我VC编译的结果是从1.4M减小到 206K)。
---------------------------------------------------------------------------------------------------------------------------------
下面开始VS2010实战部分,真是呕心沥血,大部分问题都百度不到。。
然后按自己的需求,利用VS向导,新建一个多文档。
将ScintillaCtrl.h、ScintillaCtrl.cpp、ScintillaDocView.h、ScintillaDocView.cpp拷贝到工程目录下,加入工程。
创建IDD_SCINTILLA_FINDDLGORD和IDD_SCINTILLA_REPLACEDLGORD对话框。
此时编译,会提示缺少IDC神马神马的 那个是搜索是用到的正则表达式,需要在新建的两个对话框里,拖两个checkbox控件,然后把他们的名字改成那个就行了。
替换CTestScintillaView基类为Scintilla::CScintillaView,替换CTestScintillaDoc基类为Scintilla::CScintillaDoc,
注意替换,是所有用到CDoc,CView的地方都替换掉,如BEGIN_MESSAGE_MAP(CtestView, CScintillaView),不然一开始运行会报错,断点停留在INCALL处(调试了半天才发现)
在APP应用程序类添加如下变量:
2
3
4
5
6
if (m_hSciDLL == NULL)
{
AfxMessageBox(_T("SciLexer DLL is not installed."));
return FALSE;
}
2
3
4
{
FreeLibrary(m_hSciDLL);
}
virtual void OnInitialUpdate();添加在h的public重写处,添加在class的尾部可能会导致编译器无法识别CScintillaCtrl& rCtrl = GetCtrl();
- MFC如何使用开源Scintilla库?自动源码质量控制软件 iCode 编写全记录(一)
- MFC如何使用开源Scintilla库?自动源码质量控制软件 iCode 编写全记录(二)
- 如何编写高质量"软件需求说明书"
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”?
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量软件需求说明书
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- 如何编写高质量“软件需求说明书”
- boj 407 第一次排位赛训练d bfs 找联通矩阵 最大正方形
- 剑指offer---二叉搜索树的实现(重点是删除)
- 各种基本数据结构和算法总结清单
- WIN 32 文本
- winform datetimepacker 开始日期 结束日期
- MFC如何使用开源Scintilla库?自动源码质量控制软件 iCode 编写全记录(一)
- jdk1.6官网下载地址
- 2.2阶乘(N!)
- HDU1536 SG博弈+尼姆博弈
- 10款漂亮的Ubuntu主题
- linux安装nginx
- Unique Binary Search Trees
- MFC 响应自创按扭的消息
- Android 堆Dump文件分析