VC++ 源码实现通达信公式管理器2

前面我们介绍了如何加载显示公式列表,本篇章介绍如何格式化显示公式内容:

常用的CEdit或CRichEdit是不支持这种格式显示的。这里需要借助第三方控件SciLexer(没错!Notepad++就是使用的这个控件),它支持不同的文本内容支持不同的颜色,以及文本内容提示和预输入功能,非常强大,如何事情这个控件,前面有单独的篇章介绍,这里就不再赘述了。

控件基本属性设置:

    std::unique_ptr<CScintillaCtrl> m_pEdit;
    m_pEdit = std::make_unique<CScintillaCtrl>();

	const CRect rcWindow;
	if (!m_pEdit->CreateFromWnd(IDC_TEXT_FORMULA, this))
		return ;

	// 设置全局风格
	m_pEdit->StyleSetFore(STYLE_DEFAULT, globalSetting.m_clr[EC_TEXT][EK_CLOLOR]);//普通文本
	m_pEdit->StyleSetFont(STYLE_DEFAULT, "Fixedsys");//默认字体名称
	m_pEdit->StyleSetSize(STYLE_DEFAULT, 11);//默认字体大小
	m_pEdit->StyleSetBold(STYLE_DEFAULT, FALSE);
	m_pEdit->SetCodePage(SC_CP_UTF8);//设置编码为UTF-8
	m_pEdit->UsePopUp(SC_POPUP_NEVER);

	m_pEdit->StyleClearAll();
	
	//语法解析 
	m_pEdit->SetLexer(SCLEX_META);//自定义Meta语法解析器
	m_pEdit->SetKeyWords(0, globalFormula.m_pszIndicatorsFuncNames);//设置关键字-指标函数
	m_pEdit->SetKeyWords(1, globalFormula.m_pszInlineFuncNames);//设置关键字-内置函数

	// 下面设置各种语法元素风格
	m_pEdit->StyleSetFore(SCE_META_WORD, globalSetting.m_clr[EC_INDICATOR][EK_CLOLOR]);//关键字-指标
	m_pEdit->StyleSetBold(SCE_META_WORD, FALSE);//关键字-粗体

	m_pEdit->StyleSetFore(SCE_META_WORD2, globalSetting.m_clr[EC_FUNCTION][EK_CLOLOR]);//关键字-函数
	m_pEdit->StyleSetBold(SCE_META_WORD2, FALSE);//关键字-粗体
	m_pEdit->SetSelBack(TRUE, globalSetting.m_clr[EC_SELBACK][EK_CLOLOR]);//选中背景颜色
	m_pEdit->SetSelFore(TRUE, globalSetting.m_clr[EC_SELTEXT][EK_CLOLOR]);//选中文本颜色

	SetAStyle(SCE_META_COMMENT, globalSetting.m_clr[EC_COMMENT][EK_CLOLOR]);//块注释
	SetAStyle(SCE_META_COMMENTLINE, globalSetting.m_clr[EC_COMMENT][EK_CLOLOR]);//行注释
	SetAStyle(SCE_META_NUMBER, globalSetting.m_clr[EC_NUMBER][EK_CLOLOR]);//数字
	SetAStyle(SCE_META_STRING, globalSetting.m_clr[EC_STRING][EK_CLOLOR]);//字符串
	SetAStyle(SCE_META_CHARACTER, globalSetting.m_clr[EC_STRING][EK_CLOLOR]);//字符 
	SetAStyle(SCE_META_OPERATOR, globalSetting.m_clr[EC_TEXT][EK_CLOLOR]);//操作符

	m_pEdit->SetMarginTypeN(0, SC_MARGIN_NUMBER);//设置编号为0的页边显示行号
	m_pEdit->SetMarginWidthN(0, 0);//设置页边宽度,默认宽度为0,即不显示行号
	m_pEdit->SetMarginSensitiveN(0, FALSE); //设置页边是否接受鼠标点击事件
	m_pEdit->SetMarginTypeN(0, SC_MARGIN_NUMBER);//设置编号为0的页边显示行号
	m_pEdit->StyleSetFore(STYLE_LINENUMBER, globalSetting.m_clr[EC_LINENO][EK_CLOLOR]);//普通文本
	m_pEdit->StyleSetBack(STYLE_LINENUMBER, globalSetting.m_clr[EC_LINENOBACK][EK_CLOLOR]);//普通文本
	
	m_pEdit->SetMarginWidthN(1, SC_MARGIN_SYMBOL);//用于显示公式错误符号
	m_pEdit->SetScintillaProperty(_T("fold"), _T("0"));//启用代码折叠功能 1-启用 0-不启用

	m_pEdit->AutoCSetSeparator(10);
	m_pEdit->SetMouseDwellTime(1000);
	m_pEdit->SetMultipleSelection(TRUE);

	//提示框背景和文字颜色
	m_pEdit->CallTipSetFore(RGB(0, 0, 0));
	m_pEdit->CallTipSetBack(RGB(0xFF, 0xFF, 0xD8));

	//当前行高亮显示
	m_pEdit->SetCaretLineVisible(TRUE);
	m_pEdit->SetCaretLineBack(RGB(0xFF, 0xFF, 0xD8));

	//TAB宽度由默认的8改为4
	m_pEdit->SetTabWidth(4);

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值