【牢固】和我一起学OpenDCl对话框程序设计【三】模态与非模态对话框的比较
本帖最后由 牢固 于 2013-5-14 13:23 编辑模态对话框与非模态对话框的比较 模态对话框启动时禁用AutoCAD窗口直到他们关闭。就其本质而言,模态对话框更容易管理,因为AutoCAD状态一直保持不变。模态对话框关闭时返回一个对话框关闭时的状态码,用来传递给主应用程序,主程序根据话框返回的状态码来分别执行不同的任务。非模态对话框比模态对话框有更多挑战,因为非模态的对话框是对AutoCAD程序保持开放的,他们必须处理比如AutoCAD的文件打开和关闭等状况改变的各种情况。此外,由于每个AutoCAD绘图有它自己的AutoLisp名称空间,激活新文档,将意味着事件处理程序代码在新激活的文档中将失效。 这就意味着我们要确保非模态对话框事件处理程序在每一个新的图纸必须被加载。在实践中,我们通常将非模态对话框事件处理程序通过acaddoc.lsp或加入启动组来加载,以确保每个加载的文件中加载时间处理应用程序。此外,当加载执行事件处理程序时(例如:打开第二个图文件,) 非模态对话框可能已经激活,所以程序必须采取相应行动。例如,应用程序从注册表中读一些初始化设置值,来判断对话框是除此激活还是已经激活。如果是初次激活,则初始化任务是在对话框的OnInitialize事件中执行,当对话框是首次激活,它只会执行一次。如果应用程序需要在运行时判断对话是否已被激活,可以使用如下表达式: (and MyProject_MyForm (dcl_Form_IsActive MyProject_MyForm)) 除了程序要妥善处理多个文档打开的事件,非模态的对话框还必须在所有打开的图纸已经关闭(导致状态称为“无文件状态”)或当用户切换多个活跃的图纸也必须运行正确。如果非模态的对话框包含控件的设置或属性依赖图的内容,那么它必须定义的事件处理程序OnDocActivated和OnEnteringNoDocState事件更新控件状态的改变。 非模态的对话框调用事件处理程序通常是在AutoCAD应用程序环境而不是文档环境。AutoLISP代码运行中不能调用文档环境的依赖函数,如(command)函数。要处理这个问题,可设置'EventInvoke'属性为(asynchronously=1),来在文档环境触发异步事件处理程序,因此允许调用(Command)。另外,事件处理程序也可以同步执行(synchronously=0),在调用文档依赖函数时,它可以用一个新的函数(dcl_SendString)函数来代替(command)函数。
一如即往来学习,{:soso_e179:}感觉ODCL还不懂,牢固版主能不能对各常用控件弄点入门简单点的代码。。 不要太多子函数的。。 qianzj 发表于 2013-5-14 14:12
一如即往来学习,感觉ODCL还不懂,牢固版主能不能对各常用控件弄点入门简单点的代码。。 不 ...
OpenDcl自带的Sample里的控件使用例子是最详细的了!有各种控件的用法示例! 学习中,虽然看的还不是很明白但是希望版主多发些简单的让我们更快了解学会OpenDcl 学习中,
在sample里看了半天~没有太明白怎么利用那个案例来学习...{:soso_e117:} 学习了,谢谢 (dcl_SendString)函数怎么使用 entmakex也不行 谢谢G大,在这里长知识真快 支持下阿德萨奥送 感谢分享,东西很好
翻译的不错,
对于asynchronously还是不太理解 新手有这样的启蒙帖子 好! 没有基础,不懂啊,怎么用
页:
[1]
2