windows程序设计(C语言版)第12章-剪贴簿
《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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节