用VC++设计语法编辑器

原创 2004年09月08日 20:12:00

语法编辑器是一个可以对程序设计语言进行语法编辑的文本编辑器,它对程序设计语言进行语法关键字进行加亮处理,如注释行、字符串、语法关键字、数字等,这样使得源程序更容易阅读,VB、VC++、DELPHI等开发环境都提供了语法编辑功能,相信开发人员都会有切身的体会。本文将讲述如何用VC++设计一个语法编辑器,因为源程序较长,本文并不打算列出详尽的代码,而是指出语法编辑器的设计思路,在本文最后附有一个演示程序的下载网址,感兴趣的朋友可以下载试用。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

设计语法编辑器有多种方法,笔者准备用最简单的方法实现这一功能。我们知道Windows提供了Rich Edit控制,这是一个强大的编辑器,Windows的写字板用的就是这一控制。从它着手,我们不仅可以设计出语法编辑器,还可同时获得它强大的编辑能力。Rich Edit的支持文件是riched20.dll这个动态链接库,它的MFC接口是CRichEditCtrl,其对应的视类是CRichEditView。CRichEditView提供了一个SetCharFormat方法,可能在设计时首先考虑的就是如何利用它进行设计,但是根据笔者的试验,用这个方法效率很差,特别是对C++这种有多行注释的语言。我们将换一个思路,为了更好的理解本文计述的设计思路,我们先来做一个试验:

先用VC++生成一个单文档工程,假设其名为MyProject,在工程向导的最后一步即第六步,将视类的基类从CView改为CRichEditView。生成工程后,我们用工程向导添加工程视类CMyProjectView的WM_PAINT消息处理函数,但是在该函数中不添加任何代码,也就是什么也不做。现在编译执行,我们看到的是一个感觉设计拙劣的编辑器,它的内容窗口显示的内容完全不对,当然这很自然,因为我们在OnPaint中什么也没有做,所以它并不重绘窗口。我们从其它地方复制一段文本,将它粘贴到这个拙劣的编辑器中,似乎没有反应?现在拖动鼠标,你将看到有黑色选择区域出现,感悟到什么没有?是的,这个拙劣的编辑器中好象有文本存在,虽然我们不知道究竟是什么文本!做进一步的试验,试着用CRichEditCtrl的GetLine方法去取窗口中的文本,你将得到刚才那些看不到的文本!然后我们就可以在同样的位置绘出这些文本,Rich Edit将恢复它的本来面貌!如果我们对取得的这些文本进行分析,将特定的文本用特定的颜色绘出,这不就是梦想中的语法编辑器吗?

为了让编辑器的内容显示正常,必须使文本的绘制与编辑器的默认行为精确的一致,这要求绘出的文本要与编辑器本身的文本位置相同,否则会出现文本错位的错误。这需要注意两个问题:一、因为Rich Edit是精确精滚动的,也就它的第一行可能只显示出一半来,所以必须计算好第一行的top位置;二、Rich Edit的TAB字符的问题,TAB代表的宽度不是一成不变的,而是根据字符数不断调整的。在写字板中输入文本,你可以观察到这一情况。解决好所说的几个问题,一个简单的语法编辑器就大功告成了!

本文链接地址:http://www.easysrc.com/用VC++设计语法编辑器.rtf
源码下载地址:http://www.easysrc.com/synedit.rar

网站:http://www.easysrc.com

vc++ 纯sdk 实现的 文本编辑器类, 可以插入图片

  • 2016年12月26日 12:18
  • 32.64MB
  • 下载

vc6下 完整的文本编辑器源码

  • 2013年04月28日 17:17
  • 5.32MB
  • 下载

VC6.0的MFC简单计算器制作

在VC中的计算器制作,我们开始要考虑的就是计算器的
  • baidu_21919557
  • baidu_21919557
  • 2014年11月16日 14:45
  • 10865

VC++中cl.exe编译器的使用

转自百度博客:http://hi.baidu.com/lingyin55/blog/item/1545ddd08e421895a0ec9cdb.html   和在IDE中编译相比,命令行模...
  • u012377333
  • u012377333
  • 2015年02月11日 09:30
  • 1175

Hex文件转换Bin文件——VC代码

原文地址::http://flying-in-rain.blog.163.com/blog/static/1318685942009102564347569/ (2009-08-27...
  • xqhrs232
  • xqhrs232
  • 2013年03月08日 21:31
  • 1462

图形编辑器, 画图程序, 绘制, 设计, 打印, 矢量图转换, VC++, VB, 源代码

图形编辑器, 画图程序, 绘制, 设计, 打印, 矢量图转换, VC++, VB, 源代码
  • jackonlyone
  • jackonlyone
  • 2011年03月28日 15:41
  • 1522

文本编辑器设计(VC++)

  • 2008年05月17日 22:54
  • 3.86MB
  • 下载

VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式) 1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。  2...
  • u010456982
  • u010456982
  • 2013年11月02日 17:28
  • 996

VC++深入详解笔记——2.掌握C++基本语法

1.       C++主要特点: 封装性(Encapsulation):把数据与操作数据的函数组织在一起,使程序结构更加紧凑,提高类内部数据的安全性。 继承性(Inheritance):增加了软...
  • xiyanlgu
  • xiyanlgu
  • 2013年06月02日 14:13
  • 920

用VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式)   原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: ...
  • SUN20082567
  • SUN20082567
  • 2012年12月09日 10:28
  • 1301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用VC++设计语法编辑器
举报原因:
原因补充:

(最多只允许输入30个字)