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

本文介绍了如何在MFC SDI项目中封装并使用Scintilla源代码编辑组件,提供动态和静态编译两种方式。通过添加特定代码,实现ScintillaCtrl的创建和消息处理,以实现C++代码的语法高亮和折叠功能。同时,给出了简易版的OpenFile()实现,以及相关资源链接供参考。
摘要由CSDN通过智能技术生成

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

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

Scintilla 3.24在MFC中的使用(动态、静态) 一文使用的别人封装过的类。至于怎样去封装,没有详细说明。

下面将简单介绍在MFCSDI框架下如何封装Scintilla,提供一个玩具级的演示示例。本文使用的是Scintilla 3.2.5

1.      新建一MFC SDI 项目,如:SdiScintillaMFC


2.      (动态、静态) 使用 Scintilla 代码初始化。

在 SdiScintillaMFC 中添加如下代码:

HMODULE m_hSciLexerDll;
#ifdef STATIC_BUILD_SCI
#include "Scintilla.h"
#endif
BOOL CSdiScintillaMFCApp::InitInstance()
{
#ifdef STATIC_BUILD_SCI
	Scintilla_RegisterClasses(AfxGetInstanceHandle());
#else
	m_hSciLexerDll = NULL;
	m_hSciLexerDll = LoadLibrary(_T("SciLexer.dll"));
	if (NULL == m_hSciLexerDll)
	{
		AfxMessageBox(_T("LoadLibrary SciLexer.dll failure..."));
		return FALSE;
	}
#endif
…
}

int CSdiScintillaMFCAp::ExitInstance() 
{
	// TODO: Add your specialized code here and/or call the base class
#ifdef STATIC_BUILD_SCI
	Scintilla_ReleaseResources();
#else
	if (m_hSciLexerDll != NULL)
	{	
		::FreeLibrary(m_hSciLexerDll);
	}
#endif
	
	return CWinApp::ExitInstance();
}
3.      增加一Scintilla封装类,继承自CWnd,如ScintillaCtrl

增加如下函数

BOOL ScintillaCtrl::Create(DWORD dwExStyle,const RECT& rect, CWnd* pParentWnd)
{
	// TODO: 在此添加专用代码和/或调用基类
	BOOL bRet;
	bRet= CWnd::CreateEx(dwExStyle,_T("Scintilla"), _T(""),
		WS_CHILD | WS_VISIBLE, rect,pParentWnd, IDC_STATIC);

	return bRet;
}

/
// @mfunc init the view with reasonable defaults
// @rvalue void | not used
//
void ScintillaCtrl::Init()
{
	// clear all text styles
	SendMessage(SCI_CLEARDOCUMENTSTYLE, 0, 0);
	// set the number of styling bits to 7 - the asp/html views need a lot of styling - default is 5
	// If you leave the default you will see twiggle lines instead of ASP code
	SendMessage(SCI_SETSTYLEBITS, 7, 0);
	// set the display for indetation guides to on - this displays virtical dotted lines from the beginning of
	// a code block to the end of the block
	SendMessage(SCI_SETINDENTATIONGUIDES, TRUE, 0);
	// set tabwidth to 4
	SendMessage(SCI_SETTABWIDTH,4,0);
	// set indention to 4
	SendMessage(SCI_SETINDENT,4,0);
	// set the caret blinking time to 400 milliseconds
	SendMessage(SCI_SETCARETPERIOD,400,0);
	// display fold margins
	SetFold();
	// hide SelectionMargin
	SendMessage( SCI_SETMARGINWIDTHN, 1, 0 );
	// set markersymbol for marker type 0 - bookmark
	SendMessage(SCI_MARKERDEFINE, 0, SC_MARK_CIRCLE);
	// set the forground color for some styles
	SendMessage(SCI_
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值