用VC++设计语法编辑器

上帝已嫁人

上帝已嫁人

2016-01-29 12:16

用VC++设计语法编辑器,用VC++设计语法编辑器

用VC++设计语法编辑器

作者:ZhengXu

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

下载源代码

  语法编辑器是一个可以对程序设计语言进行语法编辑的文本编辑器,它对程序设计语言进行语法关键字进行加亮处理,如注释行、字符串、语法关键字、数字等,这样使得源程序更容易阅读,VB、VC++、DELPHI 等开发环境都提供了语法编辑功能,相信开发人员都会有切身的体会。
  本文将讲述如何用VC++设计一个语法编辑器,因为源程序较长,本文并不打算列出详尽的代码,而是指出语法编辑器的设计思路,在本文最后附有一个演示程序的下载网址,感兴趣的朋友可以下载试用。
  设计语法编辑器有多种方法,笔者准备用最简单的方法实现这一功能。我们知道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将恢复它的本来面貌!如果我们对取得的这些文本进行分析,将特定的文本用特定的颜色绘出,这不就是梦想中的语法编辑器吗?
  为了让编辑器的内容显示正常,必须使文本的绘制与编辑器的默认行为精确的一致,这要求绘出的文本要与编辑器本身的文本位置相同,否则会出现文本错位的错误。这需要注意两个问题:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 一、因为Rich Edit是精确精滚动的,也就它的第一行可能只显示出一半来,所以必须计算好第一行的top位置; 二、Rich Edit的TAB字符的问题,TAB代表的宽度不是一成不变的,而是根据字符数不断调整的。在写字板中输入文本,你可以观察到这一情况。

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

源码下载地址:http://www.easysrc.com/synedit.rar

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

展开更多 50%)
分享

猜你喜欢

用VC++设计语法编辑器

C语言教程 C语言函数
用VC++设计语法编辑器

wps公式编辑器怎么用

wps教程 wps office教程
wps公式编辑器怎么用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

捷速PDF编辑器怎么用

电脑网络
捷速PDF编辑器怎么用

wps公式编辑器怎么用?

wps教程 wps office教程
wps公式编辑器怎么用?

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

UBB编辑器

Web开发
UBB编辑器

Word公式编辑器

电脑入门
Word公式编辑器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Xhtml第10天:div自适应高度

Xhtml第10天:div自适应高度

加快JDBC设计中JSP访问数据库

加快JDBC设计中JSP访问数据库
下拉加载更多内容 ↓