得更容易。
目前计算机用户依赖于专门的转换软件来在不同操作系统上例如 MS-DOS Windows Unix Linux OS/2 Macintosh 的应用程序之间移动和传递“字处理文件”。
富文本格式这种规格标准提供了一种可以将文本和图形等进行交换的格式这种格式可以适用在不同的输出设备不同的操作环境不同的操作系统之上。
富文本格式使用 ANSI PC-8 Macintosh 或者 IBM PC 等字符集不论在显示器屏幕上还是在打印设备上它都能够控制文档的表示与格式化。
拥有了这套富文本格式的表示方法在不同的操作系统之下和使用不同的应用程序软件所创建的文档就可以在这些操作系统和应用程序软件之间自由转换与传输。
在 Windows Macintosh 和 Power Macintosh 等操作系统中Word 6.0及以后版本以及在 Unix 和 Linux 等操作系统中 StartOffice 和 OpenOffice 所创建的富文本格式文件具有“.rtf”的文件扩展名。
如果一个程序读入一个富文本格式文件然后把它转换成另一种有格式的文件或者将文件中的某些当然也可以是全部实体元素在程序窗口客户区内构造出来并在视图中显示出来再或者将文件中的某些实体元素在剪贴板中构造出来等等诸如此类那么我们把这个程序称为“富文本格式分析器程序”。
富文本格式分析器程序所要做的工作第一章 前言 2 是从实际的富文本格式文件的文本中分离出信息组单元然后写入一个新的文件例如HTMLXMLTXT也可以是广义上的文件例如视图或者内存区域新生成的文件包含文本和与这些文本相关联的控制信息。
同样的道理如果一个程序读入一个有格式的文件然后把它转换成一个富文本文件格式文件那么我们把这个程序称为“富文本格式构造器程序”。
本文所要介绍的程序就是一个对富文本格式有分析和构造功能的程序。
1.2剪贴板 说起剪贴板也许你平时没有太注意但是你的许多操作可都是需要借助它才得以完成的剪贴板的一般操作方法很简单就是三个操作剪切Cut、复制Copy、粘贴Paste它作为Windows系统中重要的数据传递工具作用可是不容忽视。
从Windows 3.X开始窗口操作系统就有了剪贴板工具这是应用程序间进行静态数据交换极为有用的工具。
使用它只需要简单地按几个键就可以将数据从一个文件拷贝到另一个文件中去。
例如如果要将屏幕画面捕捉到剪贴板可以按键盘上的“Print Scrn”键如果要捕捉窗口则可以使用“AltPrint Scrn”键。
将屏幕或窗口图像捕捉到剪贴板后就可以使用画图或其它绘图软件将图像以指定格式储存在磁盘上。
从程序员的角度来讲剪贴板是在Windows系统中单独预留出来的一块内存它用来暂时存放在Windows应用 程序之间需要交换的数据。
这些数据可以是文本、图像、声音或应用程序等简单地说只要能够在硬盘上存储的数据就能存放在剪贴板里。
实际上剪贴板并不是一个独立的应用程序而是Windows中的一类API函数应用程序编程接口函数各种应用程序通过调用这类函数来管理应用程序间进行的数据交换。
Windows剪贴板的实现过程比较复杂涉及到Windows中固有的OLE对象链接和嵌入技术。
第一章 前言 3 1.3本文所做的工作 建立基于富文本格式的剪贴板就是架设富文本格式文件与剪贴板之间进行数据交换的桥梁。
根据“架设桥梁”所利用的“地基”的不同我们可以将转换途径区分为直接方法和间接方法。
所谓的“直接方法”就是直接分析富文本格式记录下各种格式信息然后在程序中重新构造出对象。
所谓的“间接方法”就是利用Windows已经具备的功能通过某些软件技术调用Windows的底层API函数建立联系。
本文对富文本格式进行了大量较为深入的分析并且给出了部分富文本格式的范式语法对富文本格式进行了明确的阐释。
本文对在应用程序之间进行静态数据交换的工具--剪贴板进行了大量的实践给出了一个观察剪贴板内容的实用工具。
本文随后给出了五种架设富文本格式文件与剪贴板之间进行数据交换的桥梁的方法。
下面是笔者所考虑过的建立富文本格式文件与剪贴板之间进行数据交换联系的五种方法的简单陈述与介绍笔者对如下所述方法都进行了尝试其中的实现细节将在后面的章节进行介绍与展开。
?? 方法一利用Visual C MFC的应用程序框架实现数据转换目标。
最简单的方法最容易被忽视最不容易被发现与注意。
其实Visual C的MFC应用程序框架为我们提供了一定的支持。
这些支持包括从RTF到视图从视图到RTF从视图到剪贴板从剪贴板到视图等方向的数据传送的支持。
我们几乎不用什么代码量就可以基本完成我们的基础的目标。
图一 方法一的原理图 ?? 方法二利用Visual C MFC视图类CRichEditView实现数据转换目标。
视图类CRichEditView是富文本格式编辑控制类CRichEditCtrl的封装而控制类CRichEditCtrl具有对富文本格式流的操作能力。
因而应用程序只需要完成从类CRichEditView得到类CRichEditCtrl对象的句柄就可以具有操纵富文本格式流的能力。
第一章 前言 4 这种方法所需要的代码量同样比较小难点在于必须对结构CHARFORMAT和回调函数有透彻的理解。
图二 方法二的原理图 ?? 方法三利用组件对象模型COM技术调用Windows系统下的字处理软件Word的编程接口API函数实现数据转换目标。
富文本格式是微软的规格说明是微软的字处理软件Word所支持的一种文件格式Windows本身一定会给富文本格式留下编程接口API。
如果找到了给Word所留下的编程接口API我们也就建立起富文本格式与剪贴板之间的联系从而使得对富文本格式文档的操作就好象是在使用Word对它进行操作时一样。
幸运的是笔者发现了Windows提供给我们的API。
虽然有关于这些API的支持信息并不多但是经过锲而不舍的尝试笔者最终利用它实现了编程目标。
在Visual C中通过导入Word的函数库生成操作Word对象的C类这些类帮助我们在Windows内部通过组件对象模型COM调用底层API函数。
我们只需要给这些类传递合适的参数就可以对文档对象进行“随心所欲”的操作。
我们仅仅需要不多的代码量就可以产生完美的效果。
这种方法的难点在于我们需要对组件对象模型COM有一个深入的了解。
实际上这种方法在程序中模拟了打开Word全选拷贝粘贴和另存为等一系列操作。
图三 方法三的原理图 第一章 前言 5 ?? 方法四利用组件对象模型COM技术将Windows系统的字处理软件Word嵌入到应用程序的客户区当中利用Word提供的所有功能实现数据转换目标。
这是一种更“妙”的方法。
不仅仅如“方法三”所述的那样“有选择地”利用Word提供给我们的功能我们甚至可以“完全地”利用Word所提供的一切功能对文档中的对象进行编辑与修改等操作。
图四 方法四原理图 ?? 方法五对富文本格式进行直接分析找出其中各个元素与它们各自的属性信息然后在程序中将它们直接构造出来。
图五 方法五的转换原理图 第一章 前言 6 富文本格式与我们所熟知的Word文档.DOC都是对文本与图形等对象进行组织的表述系统两者的表述能力是等同的。
所不同的是前者是ASCII标签表述系统后者是二进制表述系统。
正是由于使用了ASCII标签富文本格式在可编程性方面较.DOC具有更大的优势。
富文本格式的结构实际上并不复杂但是内容繁多。
目前富文本格式所使用的关键字的数量已经达到了一千一百个而且它还在不断的扩充之中这给完全的理解它带来了相当大的困难。
但是我们可以从这上千个关键字中寻找出最需要处理的然后再从中找出次重要的。
以这种渐进的方式理解富文本格式我们就可以逐步接近我们的目标。
通过大量阅读关键字并了解它们各自的意义可以将它们依照语法功能进行归纳进而明确富文本格式的结构。
依靠
上一篇:
webkit开发学习笔记
下一篇:
“台独”的渊源与实质(中)——兼论台湾问题的基本估计与中国统一的可能前景