前面学到了怎么设计对话框,现在我们来学习学习怎么来怎么写对话框的驱动程序吧~~(搬运工再次上线 一大波知识袭来喽~)
对话框文件描述了对话框的结构和外观、所属控件的样式、功能及控件的布局。但是将对话框显示到屏幕上,使对话框及其各控件发挥作用,必须靠程序驱动。用AutoLISP或Visual C++语言可以编写对话框的驱动程序。
对话框文件描述了对话框的结构和外观、所属控件的样式、功能及控件的布局。但是将对话框显示到屏幕上,使对话框及其各控件发挥作用,必须靠程序驱动。用AutoLISP或Visual C++语言可以编写对话框的驱动程序。
一.驱动对话框的程序流程
-
加载对话框文件
AutoLISP程序首先调用load_dialog函数加载指定的对话框文件,若加载成功返回一个大于零的整数。返回的整数类似于文件标识号,是显示和卸载对话框文件的主要参数,应该将其赋给一个变量保存,以备程序使用。 -
将对话框显示到屏幕上
调用new_dialog函数,将已加载的对话框文件中指定名字的对话框(一个对话框文件可定义多个对话框)按照指定的位置显示到屏幕上,默认位置在屏幕的中央。 -
初始化控件
根据对话框文件中控件的属性值对控件初始化。也可调用set_tile、mode_tile或action_tile等函数对控件初始化。经过初始化了的控件才有了初始的外观、状态或功能。 -
激活对话框
调用start_dialog函数,对话框处于激活状态,等待并接受用户施加在对话框上的操作,直到某一操作直接或间接地调用了done_dialog函数,对话框才消失(并没有释放对话框所占用的存储空间)。 -
用户操作对话框
用户可随意进行单击按钮或复选框、向编辑框键入字符、选取列表的选项或拖动滑动条等操作。控件根据用户的操作,执行相应的动作(有的控件可能不执行任何动作)。动作可以是执行表达式、调用函数,也可以通过get_tile、get_attr等函数获取控件的属性值、通过set_tile、mode_tile函数设置控件的属性。 -
卸载对话框文件
如果用户选择了OK(确认)、Cencal(取消)、Exit(退出)或其它含有退出功能的按钮,首先调用done_dialog函数,对话框从屏幕上消失,然后调用unload_dialog函数,卸载对话框文件,释放对话框所占用的存储空间。 -
对话框向应用程序传递数据
对话框本身并不具备向应用程序传递数据的功能。它只是利用某些控件将用户的输入或操作作为属性的值存放到这些控件。应用程序必须自己从对话框的一些控件中获取数据。应用程序还要设置OK按钮和Cencal按钮的动作。这两个按钮都含有调用done_dialog函数的表达式,但OK按钮的动作还含有从对话框获取最新数据功能的表达式或函数,于是若单击OK按钮对话框消失,将数据传递给应用程序,若单击Cencal按钮对话框虽然消失,但不向应用程序传递数据。
二.对话框驱动函数
- 加载、卸载对话框文件
(1)(load_dialog dclfilename)
加载一个对话框文件。参数dclfilename为对话框文件名(可省略扩展名.dcl),若未指定文件路径,该函数默认AutoCAD的搜索路径。若加载成功返回一个大于零的整数。例如:
(setq dcl_id (load_dialog "d:\\user\\test.dcl") )
若返回值大于0,表示加载成功;否则,加载失败。
返回值类似于文件标识号,是显示对话框、卸载对话框文件的主要参数,应该将其赋给一个变量dcl_id,作为其它函数调用的参数。
(2)(unload_dialog dcl_id)
卸载一个与dcl_id相关联的对话框文件,释放该对话框所占存储空间。参数dcl_id为load_dialog函数的返回值。不论卸载是否成功,返回值均为nil。例如:
(unload_dialog dcl_id)
- 初始化、激活、关闭对话框
(1)(new_dialog dlgname dcl_id [action [screen_pt]])
将对话框显示到屏幕上。参数dlgname是对话框的名字,dcl_id存放了加载对话框文件成功时的返回值,action是该对话框的动作,screen_pt是确定对话框左上角在屏幕上位置的二维点(以象素为单位)。Action和screen_pt都是可选项,但不能只选后者。对话框在屏幕上的默认位置是在屏幕的中央。如果调用成功,则返回T。
例如,下面表达式将名字为"yuan"的对