scintilla是一款开源的编辑器组件,在windows上以动态库存在,目前在notepad++,codeblock都是用该组件完成大部分编辑功能。网上绝大部分是用c++builder来调用scintilla来实现高级编辑功能,这里我以vc6来实现。
用vc6新建一个单文档工程。我们改写View 类,使view成为scintilla class的一个实例,
首先,不要忘了在app的InitInstance函数中添加如下代码:
LoadLibrary("SciLexer.dll");
然后在view类中的PreCreateWindow把class名称改为scintilla,代码如下:
BOOL CSciEditView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.lpszClass = "scintilla";
return CView::PreCreateWindow(cs);
}
最后重要的一步是必须处理view的WM_PAINT消息,让其执行默认动作,在classwizard中为CSciEditView添加WM_PAINT消息处理:
在void CSciEditView::OnPaint()添加如下代码:
void CSciEditView::OnPaint()
{
Default();
}
为了看看效果我们在OnCreate函数给scintilla添加一些文字:
int CSciEditView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
SendMessage(SCI_APPENDTEXT,7,(LPARAM)"Hellow!");
return 0;
}
最后运行,看看效果:
成功了!