|||
从IDL实现上讲,无非就是显示一个不带菜单,不带标题栏的widget_base,里面显示了一张图片。
下面以一个常规的界面程序为例,注意代码中的调用部分。
代码如下:
;$Id: show_splash_screen.pro 4 2008-01-30 21:13:44Z mpiper $ ;+ ; Shows an image without a window border on the screen. ; ; @returns widget identifier of top-level base ; @param image {in}{type=2 or 3 dimensional array} an image to ; display ; @keyword true {in}{optional}{type=integer, 0-3}{default=0} order of ; bands, 0 if 8-bit image ; @keyword order {in}{optional}{type=boolean} orientation of image ; @keyword title {in}{optional}{type=string} title of window to ; display in icon ;- ;启动界面 function show_splash_screen, image, true=true, order=order compile_opt idl2 on_error, 2
true_local = n_elements(true) eq 0 ? 0 : true
sz = size(image, /structure)
if (true_local eq 0 and sz.n_dimensions ne 2) then $ message, 'TRUE keyword must be set to 1, 2, 3 ' $ + 'for 24-bit image'
if (true_local ne 0 and sz.n_dimensions ne 3) then $ message, 'TRUE keyword must be set to 0 for 8-bit image'
xind = (true_local ne 1) ? 0 : 1 yind = ((true_local eq 0) or (true_local eq 3)) ? 1 : 2 ;屏幕分辨率计算 device, get_screen_size=screen_size ;界面偏移量 xoffset = (screen_size[0] - sz.dimensions[xind]) / 2 yoffset = (screen_size[1] - sz.dimensions[yind]) / 2
tlb = widget_base(tlb_frame_attr=4, /column, $ xpad=0, ypad=0, xoffset=xoffset, yoffset=yoffset) draw = widget_draw(tlb, xsize=sz.dimensions[xind], $ ysize=sz.dimensions[yind])
widget_control, tlb, /realize widget_control, draw, get_value=win_id
wset, win_id tv, image, true=true_local, order=keyword_set(order)
return, tlb end
;启动界面示例代码 ; pro splash_example
;读取启动界面要显示的数据 file = filepath('rose.jpg', SUBDIRECTORY=['examples','data']) data = read_image(file)
;开始启动界面*** splash_base = show_splash_screen(data,/true) ; ;创建程序内容,初始化界面、程序、数据等,注意,程序界面的tlb先是要隐藏的 tlb = WIDGET_BASE($ /column, $
map = 0,$ ;隐藏 mbar =result,$ title ='test_button') ; WIDGET_CONTROL,tlb,/realize
menu = WIDGET_BUTTON(result, value ='文件(&F)') fmenu = WIDGET_BUTTON(menu, value ='√打开') ;menu关键字 mMenu = WIDGET_BUTTON(menu, value ='进入',/menu) tMenu = WIDGET_BUTTON(mMenu, value ='二级',/menu) ;separator关键字 eMenu = WIDGET_BUTTON(menu, value ='退出',/SEPARATOR)
ubase = WIDGET_BASE(tlb,/row) dbase = WIDGET_BASE(tlb,/row,/frame) ; b = WIDGET_BUTTON(ubase,value = '按钮',tooltip = '创建的button') b = WIDGET_BUTTON(ubase,value = '菜单', $ tooltip = '菜单加对号') h = WIDGET_BUTTON(ubase,value = BINDGEN(2,40)) ; bit =WIDGET_BUTTON(ubase,value =filepath('colorbar.bmp', SUBDIRECTORY=['resource','bitmaps']),/bitmap) ;单选button' exbase = WIDGET_BASE(dbase,/EXCLUSIVE,/column,/frame) eb1 = WIDGET_BUTTON(exbase,value ='对',uName = 'right',/NO_RELEASE ) eb2 = WIDGET_BUTTON(exbase,value ='错',uName = 'error',/NO_RELEASE ) ;选择第一个按钮 widget_control,eb1,/SET_BUTTOn ;复合选择button nexbase = WIDGET_BASE(dbase,/NONEXCLUSIVE,/column) eb1 = WIDGET_BUTTON(nexbase,value ='envi') eb2 = WIDGET_BUTTON(nexbase,value ='idl') ;选择第一个按钮 widget_control,eb1,/SET_BUTTOn ;创建显示组件 wDraw = Widget_Draw(tlb,xsize = 600,ysize = 400)
;等待2秒 wait,2
;销毁启动界面*** Widget_control, splash_base,/destroy
;计算界面居中 ;屏幕分辨率计算 device, get_screen_size=screen_size geoInfo = widget_info(tlb,/geo) ;界面偏移量 xoffset = (screen_size[0] - geoInfo.xSize) / 2 yoffset = (screen_size[1] - geoInfo.ySize) /2 Widget_Control,tlb, xoffset = xoffset, $ yoffset = yoffset
;显示程序主界面 widget_control,tlb,/map
;后面其他功能代码 ;.....
end |
知识点总结:
1、界面组件布局;
2、菜单、按钮(单选、复选)按钮;
3、启动界面;
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 21:21
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社