Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > 用vc实现类似vc,vb开发环境的语法编辑器
【标  题】:用vc实现类似vc,vb开发环境的语法编辑器
【关键字】:vc,c,语法,vb,vc,vc,vb
【来  源】:网络

用vc实现类似vc,vb开发环境的语法编辑器

Your Ad Here 下载本文所附源代码


程序运行效果截图:


语法编辑器是一个可以对程序设计语言进行语法编辑的文本编辑器,它对程序设计语言进行语法关键字进行加亮处理,如注释行、字符串、语法关键字、数字等,这样使得源程序更容易阅读,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将恢复它的本来面貌!如果我们对取得的这些文本进行分析,将特定的文本用特定的颜色绘出,这不就是梦想中的语法编辑器吗?
为了让编辑器的内容显示正常,必须使文本的绘制与编辑器的默认行为精确的一致,这要求绘出的文本要与编辑器本身的文本位置相同,否则会出现文本错位的错误。这需要注意两个问题:一、因为Rich Edit是精确精滚动的,也就它的第一行可能只显示出一半来,所以必须计算好第一行的top位置;二、Rich Edit的TAB字符的问题,TAB代表的宽度不是一成不变的,而是根据字符数不断调整的。在写字板中输入文本,你可以观察到这一情况。解决好所说的几个问题,一个简单的语法编辑器就大功告成了!
本文链接地址: http://www.easysrc.com/用VC++设计语法编辑器.rtf
网站: http://www.easysrc.com/
利用函数getglyphoutline函数得到字体的外框信息:【上一篇】
在单文档中添加系统菜单项:【下一篇】
【相关文章】
  • 从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件
  • 在类VC的界面实现中加入目录树
  • 援非洲刚果共和国电力监控系统VC实现一(系统框架)
  • 援非洲刚果共和国电力监控系统VC实现二(测量/计量信息汇总刷新显示)
  • 为CListBox加上智能水平滚动条
  • 在VC下显示JPEG、GIF格式图像的一种简便方法
  • 如何在VC中改变控件的背景色
  • 一个功能强大的MFC界面处理扩展库:CJ60Lib
  • VC++中MFC窗口对象的清除
  • 用MFC对话框做无闪烁图片重绘
  • 【随机文章】
  • css手册(六)List 列表
  • AIX内核参数调整之vmtune -f -F(3)?
  • 做销售最重要的素质是什麽?
  • 出售一个.cn域名(JavaV.CN)
  • ASP.NET 2.0 中 AuthorizationStoreRoleProvider 可用性不高
  • KXML:J2ME中的XML语法分析利器
  • 还是ASP或.NET的Round函数问题
  • Quick File Viewer V1.1
  • A tools to make sure the remote box is living
  • Tomcat设置类似IIS的访问密码
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.