idl入门教程_12_对话框程序.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
idl入门教程_12_对话框程序

第十二章 对话框程序 本章概述 章主要讲解两种编写对话框程序的方法。对话框是用于接收用户信息,并把信息传递 到另一个程序模块,或程序中。其中,将学到以下几个方面的内容: 1. 如何编写模式对话框; 2. 如何编写非模式对话框; 3. 如何在组件程序中用指针存储信息; 4. 如何在组件程序中使用伪消息; 5. 如何在独立的组件程序之间传递信息; 创建模式对话框 在上一章的XImageBar 程序中,已经调用过一个模式对话框程序,即GetImage,它允 许用户选择并读入一个影像文件。在 XImageBar 程序中,这个对话框被调用过两次。一次 是在组件定义模块中,当一个影像数据未被传入到程序时;另一次则是在Open Image 按钮 被 下的时候。(如果在上一章中没有编写XImageBar 程序,可以调用与 书配套使用的文 档XImageB 。)在第一个程序实例中调用方式如下: image = GetImage (Cancel = canceled) 在第二个程序实例中调用如下: image = GetImage (Cancel = canceled, Parent = event. Top) 在这两次调用过程中有几个微小的区别,不过调用时读者可能没有注意到。如果想编写 对话框程序,就必须了解这两次调用的差别以及它们是如何工作的。 阻塞的组件程序 在上述例子中,第一次调用GetImage 时,GetImage 程序运行时就好比是阻塞的组件程 序。要看它是如何工作的,在IDL 命令行中键入如下所示: IDL image = GetImage ( ) 注意到IDL 命令行要么是消失了要么是变灰了。这时要在IDL 命令行上键入命令并执 行它们是不可能的。我们就称IDL 命令行是阻塞了。(当命令行正处于消失或变灰状态时, 可以键入命令,但只有在命令行解除了阻塞后命令才可以执行。) 一般而言,无论运行哪一种IDL 程序都会阻塞IDL 命令行。换言之,只有等到当前的 命令执行完毕后才有可能键入并执行另一命令。IDL 5 以前的版 中,所有的组件程序也都 是如此运行的。一旦运行了一个组件程序,只有等到这个组件程序执行完毕后才可进入IDL 命令行。 但在 IDL5 中,刚才的现象已经改变了。现在,可以运行一个组件程序并立即在 IDL 命令行上输入命令然后执行它。我们称这种组件程序为无阻塞组件程序。要创建一个无阻塞 的组件程序,只需要程序中的XManager 命令使用关键 No_Block 即可。这正如先前编写 的程序XimageBar 中所做的那样。 然而,在程序GetImage 中的XManager 命令是没有关键 Bo_Block 的。因而,它是一 种阻塞程序。 在这里的 “阻塞”,是指在执行Xmanager 命令的同时,IDL 就停止执行GetImage 组件 定义模块中的代码。组件定义模块中任何在XManager 命令下面的代码(其中也有一些可以, 待会可以看到)都不能被执行,直到组件程序被销毁后才被执行,也就是说这是阻塞被解除 了。 这对像GetImage 这样的程序是合适的,因为阻塞给用户提供了足够的时间来填写表格 或对话框中的信息。当用户添完表格,他们就会点击Cancel 或Accept 按钮。无论哪种情况, IDL 都将销毁组件,并解除阻塞,程序也可以用所收集的信息继续工作。对于GetImage 而 言,收集的信息是指关于数据文件、打开文件读取数据,将结果返回给用户。所有收集,读 取,返还这一系列的操作都是在组件定义模块中的XManager 命令执行完毕后才进行。 优点就这些。但是,阻塞也有个细微方面容易被忽视。那就是,只有第一个调用XManager 为阻塞的组件程序才可以成为阻塞。后来所有的组件程序都将越过阻塞好像他们是无阻塞的 组件程序一样。 这种行为对于像GetImage 这样的程序而言,完全是一个灾难,因为程序将在用户获得 填写表格的机会之前就开始读取数据文件。从一个自己对它一无所知的文件中读取数据会带 来一些小麻烦。 模式组件程序 如果想确保在任何条件下一个组件程序都会阻塞,而不是仅仅在第一次侥幸地调用 Manager 后才成为阻塞,那么就必须建立一个模式的组件程序。模式的组件程序总是在执行 XManager 命令时处于阻塞状态,直到组件被销毁。 在IDL5 以

文档评论(0)

561190791 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档