第十章 编写简单的组件程序 本章概述 本章目的是演示如何通过使用组件开发工具包开发一个简单的、具有图形用户界面的IDL 程序。“组件”一词是指用来表示用户与程序输入输出交互作用的图形元素。按钮、滑动条和文本框都是组件。组件工具箱是一套 IDL API 命令的集合,它主要用于开发图形界面程序。在本章中,将学到以下方面内容: 1. 组件定义模块和组件事件处理模块的区别; 2. 如何编写组件定义模块; 3. 如何编写组件事件处理模块; 4. 如何解释和理解组件的事件结构; 5. 如何创建不同类型的组件,比如顶层 base 组件,绘图组件和按钮组件; 6. 组件程序模块之间在不使用公共块的情况下如何传递信息; 7. 如何编写一个具有可改变大小的图形窗口的组件程序; 8. 如何向组件程序中添加简单控制按钮; 组件程序的结构 许多 IDL 程序(比如前一章的ImageBar 程序)只是由单一的程序模块组成,而组件程序至少包含两个种程序模块。组件定义模块是一个必不可少的程序模块,它可以是过程,也可以是函数。组件本身的创建或定义就是在组件定义模块中进行的。并且,还至少有一个事件处理模块(可以是过程也可以是函数),它对组件事件、触发器或用户的交互作用做出反应,并加以处理。(请看下图81) 甚至简单的组件程序也有几个事件处理模块,每一个模块都对不同的事件或触发器做出反应。这就要求在事件处理模块和组件定义模块之间对程序的某些信息进行共享。组件编程的主要技巧在于如何在构成组件程序或应用程序的各种程序模块之间传递程序信息。 图8 1 组件程序中的信息流从定义模块,通过事件结构传递到事件处理模块。一般而言,定义模块只执行一次,而事件处理模块却是重复执行。 组件程序也被称为事件驱动程序,这意味着程序事先并不知道程序执行的顺序。当用户对程序的组件元素进行交互作用时就会产生事件,然后事件处理模块根据事件产生的顺序分别对每个事件进行处理。 一般而言,组件程序的界面或可视部分在定义模块中产生,而组件程序的行为是在事件处理模块中产生。事实上,大多数组件程序的定义模块代码只被执行一次,而事件处理模块被多次,反复执行。每次事件产生时,相应的事件处理模块都会被执行一次。 组件程序如何对事件作出反应 除了创建组件界面外,定义模块的另外任务是建立被称为“事件循环”的组件,这个名字不确切,因为根本就没有真正的循环。当然,也可以将组件程序想象为一种等待状态,...