教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

windows程序设计(C语言版)第12章-剪贴簿

来源:网络收集 时间:2025-09-14
导读: 《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。 第十二章 剪贴簿 Microsoft Windows剪贴簿允许把资料从一个程式传送到另一个程式中。它的原理相对而言比较简单,把资料

《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。

第十二章 剪贴簿

Microsoft Windows剪贴簿允许把资料从一个程式传送到另一个程式中。它的原理相对而言比较简单,把资料存放到剪贴簿上的程式或从剪贴簿上取出资料的程式都无须太多的负担。Windows 98和Microsoft Windows NT都提供了剪贴簿浏览程式,该程式可以显示剪贴簿的目前内容。

许多处理档案或者其他资料的程式都包含一个「Edit」功能表,其中包括「Cut」、「Copy」和「Paste」选项。当使用者选择「Cut」或者「Copy」时,程式将资料传送给剪贴簿。这个资料使用某种格式,如文字、点阵图(一种按位元排列的矩形阵列,其中的位元与平面显示的图素相对应)或者metafile(用二进位元数值内容表示的绘图命令集)等。当使用者从功能表中选择「Paste」时,程式检查剪贴簿中包含的资料,看看使用的是否是程式可以接受的一种格式。如果是,那么资料将从剪贴簿传送到程式中。

如果使用者不发出明确的指令,程式就不能把资料送入或移出剪贴簿。例如,在某个程式中执行剪下或复制(或者按Ctrl-X及Ctrl-C)操作的使用者,应该能够假定资料将储存在剪贴簿上,直到下次剪下或复制操作为止。

回忆一下第十和第十一章所示的POPPAD程式的修订版中,我们加上了「Edit」功能表,但是在那边这功能表的作用只是发送讯息给编辑控制项而已。多数情况下,处理剪贴簿并不方便,您必须自己呼叫剪贴簿传输函式。

本章集中讨论将文字传入和移出剪贴簿。在後面的章节里,我将向您展示如何用剪贴簿处理点阵图(第十四、十五和十六章)和metafile(第十八章)。 剪贴簿的简单使用

我们由分析把资料传送到剪贴簿(剪下或复制)和存取剪贴簿资料(粘贴)的程式码开始。

标准剪贴簿资料格式

Windows支援不同的预先定义剪贴簿格式,这些格式在WINUSER.H定义成以CF为字首的识别字。

首先介绍三种能够储存在剪贴簿上的文字资料型态,以及一个与剪贴簿格式相关的资料型态:

CF_TEXT 以NULL结尾的ANSI字元集字串。它在每行末尾包含一个carriage return和linefeed字元,这是最简单的剪贴簿资料格式。传送到剪

《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。

贴簿的资料存放在整体记忆体块中,并且是利用记忆体块代号进行传送的(我将简短地讨论此项概念)。这个记忆体块专供剪贴簿使用,建立它的程式不应该继续使用它。

CF_OEMTEXT 含有文字资料(与CF_TEXT类似)的记忆体块。但是它使用的是OEM字元集。通常Windows程式不必关心这一点;它只有与在视窗中执行MS-DOS程式一起使用剪贴簿时才会使用。

CF_UNICODETEXT 含有Unicode文字的记忆体块。与CF_TEXT类似,它在每一行的末尾包含一个carriage return和linefeed字元,以及一个NULL字元(两个0位元组)以表示资料结束。CF_UNICODETEXT只支援Windows NT。

CF_LOCALE 一个国家地区识别字的代号。表示剪贴簿文字使用的国别地区设定。

下面是两种附加的剪贴簿格式,它们在概念上与CF_TEXT格式相似(也就是说,它们都是文字资料),但是它们不需要以NULL结尾,因为格式已经定义了资料的结尾。现在已经很少使用这些格式了:

CF_SYLK 包含Microsoft 「符号连结」资料格式的整体记忆体块。这种格式用在Microsoft的Multiplan、Chart和Excel程式之间交换资料,它是一种ASCII码格式,每一行都用carriage return和linefeed结尾。

CF_DIF 包含资料交换格式(DIF)之资料的整体记忆体块。这种格式是由Software Arts公司提出的,用於把资料送到VisiCalc试算表程式中。这也是一种ASCII码格式,每一行都使用carriage return和linefeed结尾。

下面三种剪贴簿格式与点阵图有关。所谓点阵图就是资料位元的矩形阵列,其中的资料位元与输出设备的图素相对应。第十四和第十五章将详细讨论点阵图以及这些点阵图剪贴簿的格式:

CF_BITMAP 与装置相关的点阵图格式。点阵图是通过点阵图代号传送给剪贴簿的。同样,在把这个点阵图传送给剪贴簿之後,程式不应该再继续使用这个点阵图。

CF_DIB 定义一个装置无关点阵图(在第十五章中描述)的记忆体块。这种记忆体块是以点阵图资讯结构开始的,後面跟著可用的颜色表和点阵图资料位元。

CF_PALETTE 调色盘代号。它通常与CF_DIB配合使用,以定义与装置相关的点阵图所使用的颜色调色盘。

在剪贴簿中,还有可能以工业标准的TIFF格式储存的点阵图资料:

CF_TIFF 含有标号图像档案格式(TIFF)资料的整体记忆体块。这种格式由Microsoft、Aldus公司和Hewlett-Packard公司以及一些硬体厂商推荐使用。

《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。

这一格式可从Hewlett-Packard的网站上获得。

下面是两个metafile格式,我将在第十八章详细讨论。一个metafile就是一个以二进位格式储存的画图命令集:

CF_METAFILEPICT 以旧的metafile格式存放的「图片」。

CF_ENHMETAFILE 增强型metafile(32位元Windows支援的)代号。

最後介绍几个混合型的剪贴簿格式:

CF_PENDATA 与Windows的笔式输入扩充功能联合使用。

CF_WAVE 声音(波形)档案。

CF_RIFF 使用资源交换档案格式(Resource Interchange File Format)的多媒体资料。

CF_HDROP 与拖放服务相关的档案列表。

记忆体配置

程式向剪贴簿传输一些资料的时候,必须配置一个记忆体块,并且将这块记忆体交给剪贴簿处理。在本书早期的程式中需要配置记忆体时,我们只需使用标准C执行时期程式库所支援的malloc函式。但是,由於在Windows中执行的应用程式之间必须要共用剪贴簿所储存的记忆体块,这时malloc函式就有些不适任这项任务了。

实际上,我们必须把早期Windows所开发的记忆体配置函式再拿出来使用,那时的作业系统在16位元的实际模式记忆体结构中执行。现在的Windows仍然支援这些函式,您还可以使用它们,但不是必须使用这些函式就是了。 要用Windows API来配置一个记忆体块,可以呼叫:

hGlobal = GlobalAlloc (uiFlags, dwSize) ;

此函式有两个参数:一系列可能的旗标和记忆体块的位元组大小。函式传回一个HGLOBAL型态的代号,称为「整体记忆体块代号」或「整体代号」。传回值为NULL表示不能配置足够的记忆体。

虽然GlobalAlloc的两个参数略有不同,但它们都是32位元的无正负号整数。如果将第一个参数设定为0,那么您就可以更有效地使用旗标GMEM_FIXED。在这种情况下,GlobalAlloc传回的整体代号实际是指向所配置记忆体块的指标。

如果不喜欢将记忆体块中的每一位元都初始化为0,那么您也能够使用旗标GMEM,_ZEROINIT。在Windows表头档案中,简洁的GPTR旗标定义为GMEM_FIXED和GMEM_ZEROINIT旗标的组合:

#define GPTR (GMEM_FIXED | GMEM_ZEROINIT)

下面是一个重新配置函式:

《Windows程序设计(第5版 珍藏版)》是一本经典的Windows编程圣经,曾经伴随着近50万Windows程序员步入编程殿堂,成长为IT时代的技术精英。

hGlobal = GlobalReAlloc …… 此处隐藏:3527字,全部文档内容请下载后查看。喜欢就下载吧 ……

windows程序设计(C语言版)第12章-剪贴簿.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/116449.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)