wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候,需要使用Scintilla编辑器,来高亮显示SQL语句,作为C/C++领域最成熟稳定又小巧的开源编辑器,Scintilla提供了强大的功能,wxWidgets对Scintilla进行包装后的是控件类:wxStyledTextCtrl。下面我们用正确的姿势来打开使用它。

先看下效果:

我们对该SQL编辑器的需求是:

1.显示行号

2.SQL语法高亮

3.输入SQL智能提示

4.适配DARK风格

好的,我们直接看下源码,程序员还是代码说话,其他都是废话,不多说了。

一、声明wxStyledTextCtrl的子类QSqlEditor

#pragma once
#include <wx/stc/stc.h>
#include <vector>

class QSqlEditor : public wxStyledTextCtrl
{
    ...
    // 重要函数一:初始化编辑器,适配SQL语法,高亮,行号等
    void setupSqlSyntax(int nSize, const char* face);

    // 重要函数二:自动弹出智能提示,参数tags为表名,视图,字段名,函数,存储过程等
    void autoShow(const std::vector<std::string> & tags);

    // 重要函数三:自动替换光标当前单词
    void autoReplaceWord();

private:
    ...
    
    ...
    
};

二、初始化编辑器,适配SQL语法


void QSqlEditor::setupSqlSyntax(int nSize, const char* face)
{
	// - lex setup (lex语法解释器配置)
	SetLexer(wxSTC_LEX_SQL); // 选择SQL解释器
	// Divide each styling byte into lexical class bits (default: 5) and indicator
	// bits (default: 3). If a lexer requires more than 32 lexical states, then this
	// is used to expand the possible states.
	// 将每个样式字节划分为词法类位(默认值:5)和指示符位(默认值:3)。
	// 如果词法分析器需要超过 32 个词法状态,则用于扩展可能的状态。
	// SetStyleBitsEx(5);
	StyleSetForeground(wxSTC_STYLE_DEFAULT, wxColour(255, 0, 0)); // 编辑器的文本默认的前景色(文本默认的颜色)
	StyleSetBackground(wxSTC_STYLE_DEFAULT, bkgColor); // 编辑器默认的背景色
	StyleClearAll(); // 清理编辑器所有的样式


	// - Other
	SetIndent(4); // 缩进4字符
	SetIndentationGuides(wxSTC_IV_LOOKBOTH); // 显示或隐藏缩进参考线
	UsePopUpEx(true); // 设置当用户在某些区域上按错鼠标按钮时是否自动显示弹出菜单
	
	// Error marker
	MarkerDefine(0, wxSTC_MARK_ARROW); // 设置用于箭头标记编号的符号,以及(可选)前景色(第三参数)和背景色(第四参数)
	MarkerSetBackground(0, wxColour(255, 255, 255)); // 设置第0个Marker的背景色
	MarkerSetForeground(0, wxColour(0, 0, 0)); // 设置第0个Marker的前景色

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值