登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
该程序分2部分,主程序+事件响应程序; 一开始我发现主程序里没有响应程序名,那它是怎么调用的呢? 看书才知道,默认响应程序名为:组件名_event 基本问题: 1、每个组件对应一个ID; 2、创建组件后,它不会立即显示,而是需要用指令使其显示: widget_control,tlb(顶级base的ID),/realize 控制顶级base显示,子组件会一起显示,但是设置了隐藏关键字map的除外 3、查询属性用widget_info,设置属性用widget_control 4、用xManager调用事件响应程序,调用语法: xManager,Name,组件ID,[关键字] 关键字有: Event_Handler 指定事件响应名称,如果未指定,默认的响应程序名称为Name+_event; No_block 程序运行中是否屏蔽命令行(没明白?) 5、事件响应程序是个pro,参数是“组件事件结构体” 格式:pro 事件程序名_event,事件结构体 事件结构体包括ID,Top(顶级base的标识),Handler,3者都是Long型 6、不明白的地方:用户定义名uname和用户定义值uvalue的用处是什么?? ---------------------------------------------------------------- ;主程序 pro widget_create_example ;创建界面顶级base ;200*200像素,标题名=good,column表示其子界面均行排列 tlb=widget_base(/column,xsize=200,ysize=200,title='good') ---------------------------------------------------------------- ;创建按钮1,标签为close button1=widget_button(tlb,value='close',$ xoffset=100,uvalue='button1 uvalue',$ uname='close') ---------------------------------------------------------------- ;创建按钮1,标签为information button2=widget_button(tlb,value='Pop MSG',$ xoffset=100,uvalue=findgen(4,4),$ uname='infor') --------------------------------------------------------------- ;组件例示,仅控制顶级base即可,否则不显示 widget_control,tlb,/realize ---------------------------------------------------------------- ;查看组件ID print,'tlb',tlb print,'button1',button1 print,'button2',button2 ---------------------------------------------------------------- ;关联界面响应函数 xmanager,'widget_create_example',tlb;,/no_block end ---------------------------------------------------------------- ;事件响应程序 pro Widget_Create_Example_Event,event ;查看event事件结构体 help,event,/structure ;获取触发事件的组件ID print,'uName:',widget_info(event.id,/uname) ;获得触发事件的uvalue和value widget_control,event.id,get_value=curvalue,get_uvalue=curuvalue print,'value:',curvalue print,'uvalue:',curuvalue end 在这个程序中,xmanager把base关联到响应程序,效果显示,2个按钮(子组件)共用了一个响应程序, 我们发现: 1、显示base就可以显示全部子组件, 2、把base关联响应程序就相当于把所有子组件关联了响应程序 可见,操作base=操作所有子组件
|