13IDL入门教程十(组件程序).docVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
13IDL入门教程十(组件程序)

第十章 编写简单的组件程序 本章概述 本章目的是演示如何通过使用组件开发工具包开发一个简单的、具有图形用户界面的IDL程序。“组件”一词是指用来表示用户与程序输入输出交互作用的图形元素。按钮、滑动条和文本框都是组件。组件工具箱是一套IDL API命令的集合,它主要用于开发图形界面程序。在本章中,将学到以下方面内容: 组件定义模块和组件事件处理模块的区别; 如何编写组件定义模块; 如何编写组件事件处理模块; 如何解释和理解组件的事件结构; 如何创建不同类型的组件,比如顶层base组件,绘图组件和按钮组件; 组件程序模块之间在不使用公共块的情况下如何传递信息; 如何编写一个具有可改变大小的图形窗口的组件程序; 如何向组件程序中添加简单控制按钮; 组件程序的结构 许多IDL程序(比如前一章的ImageBar程序)只是由单一的程序模块组成,而组件程序至少包含两个种程序模块。组件定义模块是一个必不可少的程序模块,它可以是过程,也可以是函数。组件本身的创建或定义就是在组件定义模块中进行的。并且,还至少有一个事件处理模块(可以是过程也可以是函数),它对组件事件、触发器或用户的交互作用做出反应,并加以处理。(请看下图81) 甚至简单的组件程序也有几个事件处理模块,每一个模块都对不同的事件或触发器做出反应。这就要求在事件处理模块和组件定义模块之间对程序的某些信息进行共享。组件编程的主要技巧在于如何在构成组件程序或应用程序的各种程序模块之间传递程序信息。 图81 组件程序中的信息流从定义模块,通过事件结构传递到事件处理模块。一般而言,定义模块只执行一次,而事件处理模块却是重复执行。 组件程序也被称为事件驱动程序,这意味着程序事先并不知道程序执行的顺序。当用户对程序的组件元素进行交互作用时就会产生事件,然后事件处理模块根据事件产生的顺序分别对每个事件进行处理。 一般而言,组件程序的界面或可视部分在定义模块中产生,而组件程序的行为是在事件处理模块中产生。事实上,大多数组件程序的定义模块代码只被执行一次,而事件处理模块被多次,反复执行。每次事件产生时,相应的事件处理模块都会被执行一次。 组件程序如何对事件作出反应 除了创建组件界面外,定义模块的另外任务是建立被称为“事件循环”的组件,这个名字不确切,因为根本就没有真正的循环。当然,也可以将组件程序想象为一种等待状态,等待组件发生什么。而事实上也确实如此。但是是哪个组件,或什么在等待呢? 其实是窗口管理器在等待。在组件定义模块建立了事件循环的同时,它就将程序控制权转交给窗口管理器。(如下面所示,这两项工作都是由Xmanager来完成的)窗口管理器对属于自己管理的事件或用户的交互操作进行管理。 当事件产生后,窗口管理把关于事件的信息压缩成包,然后传递给IDL。IDL把事件信息解压后重新装入称为事件结构的里面。然后,IDL调用合适的事件处理模块来对该事件进行处理。在调用事件处理模块时,IDL把事件结构作为一个参数,也是唯一的一个参数传递给事件处理模块。(详细信息请参阅附录A:传递给事件处理模块的事件结构。) 尽管每一事件结构的专有字段各有不同,这取决于产生事件的组件,但是每个事件结构都拥有三个专用字段:ID、Top和Handler。这一点是相同的。事实上,正是IDL结构变量中这三个字段的出现,使得此结构成为有别于其他结构的事件结构。下面将会很快学到这三个字段的重要性及用法。 编写组件定义模块 组件程序中需要的第一件就是组件定义模块,它有三个目的(1)创建和定义共同组成组件程序图形用户界面的组件;(2)建立程序的事件循环;(3)注册到负责事件处理的窗口管理器的程序。组件定义模块和其它模块一样,可以是过程也可以是函数。也可以用平常方式定义参数和关键字。 在这里编写的程序将对上章的ImageBar程序进行包装。并取名为XimageBar。(程序名称前面的X是IDL表明该程序是组件程序的习惯。但有时候也并非如此。) 为保证程序的简单明了,起初就为ImageBar定义一个它所需要的参数。打开一个文本编辑窗口,键入如下所示: Pro XimageBar,image 也可以像程序ImageBar一样对图像参数进行类似的处理,键入: If N_Params() EQ 0 Then Begin Image=GetImage(Cancel=canceled, ‘m51.dat’, Xsize=340, Ysize=440 ) If Canceled Then Return EndIf If Size(image, /N_Dimensions) NE 2 Then Begin Message, ‘Image argument must be 2D.’, /Continue Retu

文档评论(0)

qianqiana + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5132241303000003

1亿VIP精品文档

相关文档