- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
15IDL入门教程十二
第十二章 对话框程序
本章概述
本章主要讲解两种编写对话框程序的方法。对话框是用于接收用户信息,并把信息传递到另一个程序模块,或程序中。其中,将学到以下几个方面的内容:
如何编写模式对话框;
如何编写非模式对话框;
如何在组件程序中用指针存储信息;
如何在组件程序中使用伪消息;
如何在独立的组件程序之间传递信息;
创建模式对话框
在上一章的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以前的版本中,编写一个模式的组件程序相对简单些。只要简单地在XManager命令后设置关键字Modal即可。但在IDL5中,Xmanager命令中的关键字Modal已经被废弃了。取而代之的是,在创建顶级base时的Widget_Base函数中增加一个Modal关键字。
这里有一个很小却很重要的补充。如果为一个base组件设置Modal关键字,同时也必须为那个base组建设置一个有效的Group Lead
您可能关注的文档
- 03IDL入门教程二(下)(简单图形显示I).doc
- 02IDL入门教程二(上)(简单图形显示II).doc
- 04IDL入门教程三(上).doc
- 01IDL入门教程一.doc
- 05IDL入门教程三(下).doc
- 07IDL入门教程五.doc
- 08IDL入门教程六.doc
- 12IDL入门教程九.doc
- 10IDL入门教程七(下).doc
- 11IDL入门教程八.doc
- 2025年烟台市正大城市建设发展有限公司招聘工作人员12名笔试参考题库附带答案详解.doc
- 2025年衢州市属国企公开招聘工作人员笔试参考题库附带答案详解.doc
- 2025中铁四局集团有限公司法律合规部公开招聘1人笔试参考题库附带答案详解.docx
- 2025中国建筑股份有限公司岗位招聘【人力资源部(干部人事部)】笔试参考题库附带答案详解.docx
- 2025年滁州定远县中盐东兴盐化股份有限公司招聘2人笔试参考题库附带答案详解.doc
- DB1331T109-2025雄安新区建设工程抗震设防标准(963.84KB)(1).pdf
- 2025辽宁省能源控股集团所属抚矿集团招聘76人笔试参考题库附带答案详解.pdf
- 2024陕西延长石油集团华特新材料股份有限公司社会招聘8人笔试参考题库附带答案详解.pdf
- 2023内蒙古大唐国际锡林浩特矿业有限公司采煤自营专项社会招聘32人笔试参考题库附带答案详解.pdf
- 2024年12月云南大学国际合作与交流处公开招聘(1人)笔试历年典型考题(历年真题考点)解题思路附带答案详解.doc
最近下载
- 注册安全工程师中级其他安全生产专业实务(其他安全类案例)模拟试卷5.pdf VIP
- 2025低压分布式光伏入网技术规范.docx VIP
- GB生产设备安全卫生设计总则.doc VIP
- 产教融合、校企合作——黄淮学院的探索与实践.ppt VIP
- 注册安全工程师中级其他安全生产专业实务(其他安全类案例)模拟试卷9.pdf VIP
- 《呼吸防护用品 自吸过滤式防颗粒物呼吸器》GB 2626-2019-2020.7.1.docx VIP
- 危险货物包装标志.docx VIP
- 地下水质量标准GB148482017.docx VIP
- 《心理学史教学大纲.doc VIP
- GBT-用于校准表面污染监测仪的参考源 α、β和光子发射体及编制说明.pdf VIP
文档评论(0)