Scintilla 3.24在MFC中的使用(动态、静态)

Scintilla是一个免费的源代码编辑组件。在这里记录下它在MFC中的使用。

本机环境:Windows XP、Visual Studio 2008 SP11.下载Scintilla源代码3.24版本()。2.打开VS2008,点击菜单栏"Tools"→"Visual Studio 2008 Command Prompt",cd命令到"..\scintilla\win32"目录,使用以下命令进行编译:

1

nmake-fscintilla.mak

3.编译完成之后,就可以在"..\scintilla\bin"目录下看到SciLexer.dll和Scintilla.dll。4.从naughter网站下载MFC封装类()。5.新建一个MFC多文档应用程序,名称为TestScintilla。6.将ScintillaCtrl.h、ScintillaCtrl.cpp、ScintillaDocView.h、ScintillaDocView.cpp拷贝到工程目录下,,加入工程。7.参考ScintillaDemo工程,创建IDD_SCINTILLA_FINDDLGORD和IDD_SCINTILLA_REPLACEDLGORD对话框。8.在"stdafx.h"文件添加如下代码:

1234

#defineSCI_NAMESPACE//useScintillaviaanamespace#include<platform.h>#include<scintilla.h>#include<SciLexer.h>

替换CTestScintillaView基类为Scintilla::CScintillaView,替换CTestScintillaDoc基类为Scintilla::CScintillaDoc,在APP应用程序类添加如下变量:

1

HMODULEm_hSciDLL;

在InitInstance函数,添加如下代码:

123456

m_hSciDLL=LoadLibrary(_T("SciLexer.dll"));if(m_hSciDLL==NULL){AfxMessageBox(_T("SciLexerDLLisnotinstalled."));returnFALSE;}

重载ExitInstance函数,添加如下代码:

1234

if(m_hSciDLL){FreeLibrary(m_hSciDLL);}

9.编译,将SciLexer.dll放到程序目录下,运行程序,这时可以看到编辑器已经出来了,如下图所示:

10.重载CTestScintillaView的OnInitialUpdate方法,代码如下:

1234567891011121314151617181920212223242526272829303132333435363738394041

constTCHARcppKeyWords[]=_T("andand_eqasmautobitandbitorboolbreak")_T("casecatchcharclasscomplconstconst_castcontinue")_T("defaultdeletedodoubledynamic_castelseenumexplicitexportexternfalsefloatfor")_T("friendgotoifinlineintlongmutablenamespacenewnotnot_eq")_T("operatororor_eqprivateprotectedpublic")_T("registerreinterpret_castreturnshortsignedsizeofstaticstatic_caststructswitch")_T("templatethisthrowtruetrytypedeftypeidtypenameunionunsignedusing")_T("virtualvoidvolatilewchar_twhilexorxor_eq");voidCTestScintillaView::OnInitialUpdate(){CScintillaView::OnInitialUpdate();CScintillaCtrl&rCtrl=GetCtrl();//SetuptheLexerrCtrl.SetLexer(SCLEX_CPP);rCtrl.SetKeyWords(0,cppKeyWords);//SetupstylesrCtrl.StyleSetFore(STYLE_DEFAULT,RGB(0,0,0));rCtrl.StyleSetBack(STYLE_DEFAULT,RGB(0xff,0xff,0xff));rCtrl.StyleSetSize(STYLE_DEFAULT,11);rCtrl.StyleSetFont(STYLE_DEFAULT,"Verdana");rCtrl.StyleClearAll();rCtrl.StyleSetFore(SCE_C_DEFAULT,RGB(0,0,0));rCtrl.StyleSetFore(SCE_C_COMMENT,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_COMMENTLINE,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_COMMENTDOC,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_COMMENTLINEDOC,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_COMMENTDOCKEYWORD,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_COMMENTDOCKEYWORDERROR,RGB(0,0×80,0));rCtrl.StyleSetFore(SCE_C_NUMBER,RGB(0,0×80,0x80));rCtrl.StyleSetFore(SCE_C_WORD,RGB(0,0,0×80));rCtrl.StyleSetBold(SCE_C_WORD,1);rCtrl.StyleSetFore(SCE_C_STRING,RGB(0x80,0,0×80));rCtrl.StyleSetFore(SCE_C_IDENTIFIER,RGB(0,0,0));rCtrl.StyleSetFore(SCE_C_PREPROCESSOR,RGB(0x80,0,0));rCtrl.StyleSetFore(SCE_C_OPERATOR,RGB(0x80,0x80,0));}

穿越茫茫人海,寻找属于我们的那一份宁静。

Scintilla 3.24在MFC中的使用(动态、静态)

相关文章:

你感兴趣的文章:

标签云: