如何利用IDL程序自动添加ENVI菜单呢?下面就是解决办法:
ENVI自身有个ENVI_DEFINE_MENU_BUTTON。
是这么定义的,如功能扩展函数名称为Envi_file_info,event,那么只需在函数中添加个过程PRO Envi_file_info_define_buttons, buttonInfo,然后菜单的添加工作就可以在这个过程下完成了。
ENVI_DEFINE_MENU_BUTTON的调用格式如下:ENVI_DEFINE_MENU_BUTTON, ButtonInfo [, /DISPLAY], $ EVENT_PRO=string | /MENU | UVALUE=string [, POSITION=long integer or string] [, REF_INDEX=long integer] [, REF_UVALUE=variable], REF_VALUE=string [, SEPARATOR={0 | 1 | -1}] [, /SIBLING], VALUE=string
; 其中
; Display-是创建在主菜单还是显示菜单
; VALUE -菜单的显示信息 -必须的
; UVALUE -必须的
; EVENT_PRO-程序事件名称
; Menu- 是否为菜单
; REF_INDEX-如REF_VALUE不唯一则可用此来设置
; REF_VALUE -作为parent的已存在菜单名
; SIBLING -是否创建同级菜单
; ...+++看一个例子
PRO Envi_file_info_define_buttons, buttonInfo
; 创建主菜单-在Basic Tools菜单前后
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '自定义菜单after', $
/MENU, REF_VALUE = 'Basic Tools', /SIBLING, POSITION = 'after'
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '自定义菜单before', $
/MENU, REF_VALUE = 'Basic Tools', /SIBLING, POSITION = 'before'
;创建子菜单
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '功能都有了,添加点儿啥呢?', $
uValue = '', $
event_pro ='Envi_file_info', $
REF_VALUE = '自定义菜单before'
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '确实不好加!', $
uValue = '', $
event_pro ='Envi_file_info', $
REF_VALUE = '自定义菜单before'
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '加分隔线咋样?', $
uValue = '', $
event_pro ='Envi_file_info',$
REF_VALUE = '自定义菜单before' , $
/SEPARATOR
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '后来的,加个塞', $
uValue = '', $
event_pro ='Envi_file_info', $
REF_VALUE = '自定义菜单before', POSITION = 'first'
;创建显示菜单
ENVI_DEFINE_MENU_BUTTON, buttonInfo, $
VALUE = '自定义菜单', $
/Display, $
/MENU, REF_VALUE = 'File', $
/SIBLING, POSITION = 'after'
ENVI_DEFINE_MENU_BUTTON, buttonInfo, $
VALUE = '更不知道加啥了', $
UValue =' ', $
/Display, $
event_pro ='Envi_file_info', $
REF_VALUE = '自定义菜单'
END
;+
;description:
; ENVI query image
; Author: DYQ 2009-5-15;
;
PRO Envi_file_info,event
; COMPILE_OPT STRICTARR
;选择文件
ENVI_OPEN_FILE, fname, r_fid=fid
;如无效则返回
IF fid[0] EQ -1 THEN BEGIN
msg = DIALOG_MESSAGE('未打开文件或数据错误!',/Error)
RETURN
ENDIF
;数据信息查询
ENVI_FILE_QUERY, fid, ns=ns, nl=nl, nb=nb, fname=fname
;提示
msg = DIALOG_MESSAGE('输入文件名:'+ fName + STRING(13B)+ $
';波段数:'+STRING(nb)+ STRING(13B)+ $
';大小:'+STRING(ns)+'*'+STRING(nl),$
/Information)
OK!