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

2023-11-16

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

常用的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);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC++ 源码实现通达信公式管理器2 的相关文章

  • 多语言版本 UI资源切换

    1 如果窗体资源和源码里面所使用的字符串资源 都已经存在于资源视图里面 则通过下面方式来实现 LANGID lid GetSystemDefaultLangID if 0x0809 lid 英语 0x0809 SetThreadUILang
  • VC++ 图像颜色调节

    1 BMP图片在GDI方式下贴图 32位位图 半透明像素会显示黑色或白底 像素处理代码 void CrossImage CImage img if img IsNull return 确认该图像包含Alpha通道 if img GetBPP
  • VC++ HBITMAP保存文件

    请先看下面这段代码 BOOL SaveBmp HBITMAP bmp string path FILE f fopen path c str wb if f return 0 BITMAP bmpinfo GetObject bmp siz
  • C++类上使用属性(__declspec property)

    原始代码如下 class A private int m nIndex public int getIndex return m nIndex void setIndex int value m nIndex value 如果采用属性方式实
  • VC++ 获取文件版本号

    源码实现 pragma comment lib Version lib typedef struct VS VERSIONINFO WORD wLength WORD wValueLength WORD wType WCHAR szKey
  • C++ 结束进程

    有时候进程未正常退出 导致进程列表遗留僵尸进程 程序启动需要杀死这种僵尸进程 include TLHELP32 H void TerminateSelfApplication TCHAR szFileName MAX PATH 0 TCHA
  • C++ 内存共享/软件守护

    功能描述 在无人看守的情况下 防止软件意外退出 接口调用简单 只需要简单声明就行 int main int argc char argv QShareProcess shareProcess 共享内存名称随意 下面实现自己的主体代码即可 类
  • Windows下批处理管理Nginx应用程序

    每次更新完配置 通过命令行或者任务管理器来操作Nginx重启 操作起来 显得有点麻烦 下面脚本就是解决这个问题的 cls echo off set NGINX PATH d0 set NGINX DIR cd color 0a title
  • sapi 实现语音朗读

    头文件定义 CSpeechSpeekImpl h pragma once include sphelper h class CSpeechSpeekImpl public CSpeechSpeekImpl void CSpeechSpeek
  • C++ 可扩展的内存缓冲区

    类声明 CMemBuffer h pragma once class CMemBuffer public CMemBuffer DWORD dwSize 0 CMemBuffer void 申请内存 BOOL Realloc DWORD d
  • TightVNC H264编解码(二)之硬编码库的编译

    AVCodec codec avcodec find encoder by name nvenc h264 如果是默认的ffmpeg库 返回结果是NULL 看来是不带有硬编码功能的 重新编译分支ffnvcodec 不到半个小时编译完成 返回
  • VC++ UI布局管理器

    程序从codeproject上下载的 功能类似QT的QLayout 有了它界面缩放再也不会乱套了 具体使用方法可参考源码示例 资源下载链接地址 https download csdn net download u012156872 1926
  • 高精度时间差值

    引用 解决GetTickCount的时间精度不够的问题 1 类声明 pragma once define WIN32 LEAN AND MEAN include
  • VCPKG 包下载失败解决思路

    vcpkg经常会遇到资源无法访问 可能是域名解析出了问题 我们只需要将域名解析后的ip地址添加到hosts文件列表中可解决此问题 如 185 199 108 133 raw githubusercontent com 在此之前可先通过终端p
  • GmSSL 在Windows上的使用(编译和使用)

    1 源码的下载 GitHub guanzhi GmSSL 支持国密SM2 SM3 SM4 SM9 SSL的密码工具箱 2 编译工具的下载 首先安装VS开发工具 接着下载ActivePerl 打开VS命令提示符 管理员权限 并切换到 Acti
  • vim/vi常用命令集

    格式 指令 或指令 参数 指令解释 文件操作 vim vi 打开一个空文件 vim vi a txt 打开当前目录中的a txt文件 若文件不存在则创建一个名为a txt的文件 指定保存位置为当前目录 vim vi home a txt 打
  • EAN13条形码绘制(Delphi版)

    单元声明 unit UnitEAN https wenku baidu com view d61eec0dc4da50e2524de518964bcf84b9d52d0d html 共有95 18 113条数据模块 1表示黑 0表示白 左侧
  • live555 流媒体开源库

    live555对每一个从事过流媒体开发的从业者而言 都不曾陌生 就像每一个从事音视频行业的从业者而言 ffmpeg也不曾陌生 随着行业需求的发展 live555也是越见强大 因前几天帮朋友项目查找问题 重拾live555 没想到时隔10年
  • 主线程消息处理

    写程序过程中 往往会遇到在按钮时间中执行一个循环事件 for while 耗费比较长的时候 这个时候会造成界面的假死想象 对于经常写程序的人来说 解决起来相对比较容易 创建一个子线程 然后把事件放到子线程执行 但是对于初学者而言 创建子线程
  • VC++ 源码实现通达信公式管理器2

    前面我们介绍了如何加载显示公式列表 本篇章介绍如何格式化显示公式内容 常用的CEdit或CRichEdit是不支持这种格式显示的 这里需要借助第三方控件SciLexer 没错 Notepad 就是使用的这个控件 它支持不同的文本内容支持不同

随机推荐

  • Pandas中插入新的行或列

    python中插入新行或列 前言 一 新增列 二 新增行 前言 在特定位置插入行或者列是比较常用的操作 具体的插入操作主要是在哪插入和插入什么 提示 以下是本篇文章正文内容 下面案例可供参考 一 新增列 在pandas中新增列用到的是ins
  • 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配(腾讯2012面试题)

    编写C 中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 腾讯2012面试题 这道题挺好的 HeapOnly cpp include
  • windows修改远程端口号

    windows远程桌面默认使用的是3389 为了提高服务器安全性 可以修改默认端口3389为其它端口号 端口使用原则 TCP与UDP段结构中端口地址都是16比特 所以端口范围在0 65535 对于这65536个端口号有以下的使用规定 1 端
  • java 根据已有ppt模板修改其内容

    现有需求 根据数据库数据 定期更新 ppt 报表内容 本文修改内容 主要是 ppt中的图表 测试ppt 代码 package org springblade bigdata ureport service impl import java
  • (一)win10安装hadoop 2.8.5(详细步骤)

    目录 1 JDK 2 Hadoop 2 1 下载 2 2 配置环境变量 2 3 配置文件 2 4 格式化hdfs 已解决 格式化总是报错 The markup in the document following the root eleme
  • JavaSwing结合windowBuilder以及BeautyEye开源UI框架快速实现美观的界面

    前言 虽然Java Swing现在公司用的比较少 但是我们平时学习中经常会用它来做一些小项目或者学校的任务 这个时候我们就发现Swing提供给我们的原生控件太丑了 下面教大家如何快速搭建美观的JavaSwing桌面程序 1 准备工作 首先通
  • GRPC详解

    什么是GRPC 官网 gRPC gRPC 是一个现代开源高性能远程过程调用 RPC 框架 可以在任何环境中运行 它可以有效地连接数据中心内和跨数据中心的服务 并提供对负载平衡 跟踪 健康检查和身份验证的可插入支持 它还适用于分布式计算的最后
  • springmvc框架

    1 什么是MVC MVC就是一个分层架构模式 M即model模型是指模型表示业务规则 在MVC的三个部件中 模型拥有最多的处理任务 被模型返回的数据是中立的 模型与数据格式无关 这样一个模型能为多个视图提供数据 由于应用于模型的代码只需写一
  • 前端页面中展开和收起用同一按钮控制

    一 页面代码 a href style font size 16px color 0f82d6 展开 a div style display none id为该div的唯一标志 该div默认为 style display none 收起的
  • Saga分布式事务

    一 简介 与分布式事务TCC一样 目的都是为了在各个服务中正常使用事务 和TCC相比 Saga没有 预留 动作 操作都是直接提交到库 其中 每个Saga由一系列sub transaction Ti 组成 每个Ti 都有对应的补偿动作Ci 补
  • 上帝之眼Nmap(黑客工具)简介及命令大全

    目录 前言 一 Nmap简介 1 1 Nmap优点 1 2 Nmap四项基本功能 二 Nmap常用命令 2 1 主机发现 2 2 扫描技术 2 3 端口规格和扫描顺序 2 4 服务 版本探测 2 5 脚本扫描 2 6 操作系统检测 2 7
  • 95、Image Restoration with Mean-Reverting Stochastic Differential Equations

    简介 主页 https github com Algolzw image restoration sde 扩散模型终于在去噪 超分辨率等应用了 这是一种基于随机微分方程的通用图像恢复方法 关键结构包括均值还原SDE 该SDE将高质量图像转换
  • 机会转瞬即逝刷脸看准目标把握未来

    所有的企业家 不仅仅要考虑全球化让我受益 而是要让全球化变得更加普惠 让更多的人 更多的企业受益 鼓励并且帮助更多企业参与全球竞争 全球贸易 贸易战是为昨天而战或者为昨天的利益而战 我们今天要思考的 不是怎么去维护或者保护昨天 而是应该赢得
  • Java-获取时间戳、util.Date、sql.Date类的使用

    Java 获取时间戳 util Date sql Date类的使用 1 获取时间戳 获取系统当前时间 System类中的currentTimeMillis package com lmw time import org junit Test
  • 不定量表达法

    文章目录 1 some 一些 any 一些 most 大多数 every 每一个 all 所有的 2 both 两者都 either 两者之一 neither 两者都不 3 many 许多 much 许多 a lot of lots of
  • eclipse之 Type Hierachy:Viewing the type hierarchy

    1 Type Hierachy 继承关系层次图快捷键F4 2 show the type hierachy 子面板会根据选中的类显示对应的内容 show the supertype hierachy ctrl T 显示子类到父类的层次关系
  • Qt知识笔记(一)

    Qt知识笔记 一 Qt概述 Qt特点 Qt模块 Qt窗口类 坐标体系 相对坐标 垃圾回收机制 Qt概述 Qt是一个跨平台的 C 应用程序开发框架 具有短平快的优秀特质 投资少 周期短 见效快 效益高 几乎支持所有的平台 可用于桌面程序开发以
  • LVS负载均衡群集——LVS-NAT模式搭建和LVS-DR模式搭建

    目录 lvs工作模式 1 NAT模式 VS NAT 2 直接路由模式 VS DR 3 IP隧道模式 VS TUN LVS调度算法 LVS群集类型 1 负载均衡群集 LB 2 高可用群集 HA 3 高性能运输群集 HPC LVS NAT模式搭
  • element-ui + sortable.js 实现可拖拽表格

    element ui sortable js 实现可拖拽表格 先看效果 安装Sortablejs npm install sortablejs save demo
  • VC++ 源码实现通达信公式管理器2

    前面我们介绍了如何加载显示公式列表 本篇章介绍如何格式化显示公式内容 常用的CEdit或CRichEdit是不支持这种格式显示的 这里需要借助第三方控件SciLexer 没错 Notepad 就是使用的这个控件 它支持不同的文本内容支持不同