




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IDL实现程序界面时,很多时候需要实现鼠标当前值的显示,即那个鼠标信息时时显示小窗体。很多时候初学者想不明白,咋着能时时显示那个鼠标信息呢。参考下面的代码,知识点如下:1、界面构建(菜单、按钮、文本框、显示区域);2、界面中鼠标与键盘的事件响应(事件判断);3、界面由鼠标修改大小(位置计算,组件修改);4、界面关闭确认(判断关闭事件,确认是否关闭);5、鼠标信息显示功能(时时显示鼠标位置坐标);附代码:;+;2010年7月北京IDL培训班-示例代码; Author: DYQ 2010-7-8; Modified By DYQ:2011年12月15日; 添加鼠标信息显示界面; BBS: /ESRI/forum-28-1.html; E-Mail: ; Blog: /dyqwrp;-; 事件响应程序PRO TEST_EVENTS_EVENT, event ;获得顶base的uvalue,即组件信息指针结构体 WIDGET_CONTROL,event.TOP,get_uvalue=pstate CASE TAG_NAMES(event,/STRUCTURE_NAME) OF ;关闭事件 WIDGET_KILL_REQUEST: BEGIN tmp = DIALOG_MESSAGE(确认关闭?,$ title =关闭系统,/question) IF tmp EQ Yes THEN BEGIN ;注意销毁之前创建的指针 WIDGET_CONTROL,event.TOP,get_uValue = pState PTR_FREE, pState ;销毁界面 WIDGET_CONTROL,event.TOP,/destroy RETURN ENDIF RETURN END ;draw区域 WIDGET_DRAW: BEGIN CASE event.TYPE OF ;注意不同的类型对应的不同的事件 ;键盘和鼠标等各自事件的结构体内容不一定一致的 0: BEGIN PRINT,event.PRESS IF(event.PRESS AND 1) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=左键按下 ENDIF IF(event.PRESS AND 2) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=中键按下 ENDIF IF(event.PRESS AND 4) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=右键按下 ENDIF END 1: BEGIN IF(event.RELEASE AND 1) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=左键释放 ENDIF IF(event.RELEASE AND 2) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=中键释放 ENDIF IF(event.RELEASE AND 4) NE 0 THEN BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=右键释放 ENDIF END 2: BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=鼠标移动 ;鼠标位置 WIDGET_CONTROL,(*pState).WSHOWXY, set_Value = 鼠标位置:X+STRTRIM(event.X,2)+ Y+STRTRIM(event.Y,2) END 3: BEGIN END 4: BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value=暴露事件 END 5: BEGIN WIDGET_CONTROL,(*pstate).TEXT1,set_value = ch = +STRTRIM(STRING(event.CH),2) END 6: BEGIN IF event.KEY EQ 1 THEN BEGIN PRINT,event.CH END END 7: BEGIN IF event.CLICKS GT 0 THEN WIDGET_CONTROL,(*pstate).TEXT1,set_value=滚轮前滚 $ ELSE WIDGET_CONTROL,(*pstate).TEXT1,set_value=滚轮后滚 END ELSE: PRINT,event.TYPE ENDCASE END ELSE: ENDCASE uName = WIDGET_INFO(event.ID,/uname) IF uName EQ button THEN BEGIN ;tmp = DIALOG_MESSAGE(信息, /Info) tmp = DIALOG_MESSAGE(*pState).TESTSTR,/Infor) ENDIF ;设置大小 IF uName EQ tlb THEN BEGIN ;显示组件大小适应程序大小 drawXSize = event.X -(*pState).DRAWSPACE0 drawYSize = event.Y -(*pState).DRAWSPACE1 ;设置tlb大小(可忽略,因Draw组件后面已经设置了大小) WIDGET_CONTROL,event.TOP,xSize = event.X,ySize = event.Y ;设置显示组件的大小 WIDGET_CONTROL,(*pState).MYDRAW,xsize = drawXSize, ySize = drawYSize ;适应性显示 TVSCL,CONGRID(DIST(400),drawXSize,drawYSize) ENDIFEND;PRO TEST_MOUSE_EVENTS ; 创建一个主Base窗体 tlb = WIDGET_BASE(TITLE=窗口事件演示, $ xoffset =200, $ yOffset =100, $ mBar = mBar , $ uname =tlb, $ /COLUMN, $ ;重设置大小时产生事件 /TLB_SIZE_EVENTS,$ ;关闭时产生事件 /TLB_KILL_REQUEST_EVENTS) ;创建系统菜单 wFile = WIDGET_BUTTON(mbar,value = 文件(&F) ; 创建一个按钮 base1=WIDGET_BASE(tlb,/row) label1=WIDGET_LABEL(base1,$ value=当前窗口事件:) text1=WIDGET_TEXT(base1, $ xSize =10) button = WIDGET_BUTTON(base1,$ value =按钮, $ uName =button) mydraw=WIDGET_DRAW(tlb,$ retain=1,$ ;设置大小 xsize=400,$ ysize=400,$ ;滚轮时产生事件 /wheel_events,$ ;按钮时产生事件 /button_events,$ ;暴露(从遮挡到最前显示时)时产生事件 /expose_events,$ ;鼠标移动时产生事件 /motion_events,$ ;键盘敲击时事件 keyboard_events = 2,$ ;设置组件的uName,及名字,以便组件的区分及调用。 uname=mydraw) WIDGET_CONTROL, tlb, /REALIZE ;创建鼠标信息窗体 wInfoBase = WIDGET_BASE($ group_leader =tlb,$ xsize = 200, $ /floating,$ title = 信息界面,$ ySize = 25 ) wShowXY = WIDGET_LABEL(wInfoBase,$ xsize = 190,$ value= 鼠标位置:) ; 初始化它们 WIDGET_CONTROL, wInfoBase, /REALIZE ;获取组件的大小信息 sz = WIDGET_INFO(tlb,/geom) PRINT,sz.XSIZE PRINT,sz.YSIZE drawSZ = WIDGET_INFO(myDraw,/geom) ;显示区域与主界面的边界间隔 drawSpace = sz.XSIZE,sz.YSIZE - drawSZ.XSIZE,drawSZ.YSIZE ;是否显示伪彩色 DEVICE, decomposed =0 ;载入系统颜色表 LOADCT,23 ;显示一个400*400的方形图像 TVSCL,DIST(400) ;创建结构体,包含各个组件ID state=label1:label1,$ text1:text1,$ drawSpace: drawSpace, $ testStr : 程序初始字符串,,$ wShowXY: wShowXY,$ mydraw:mydraw ;创建指针 pstate=PTR_NEW(state,/no_copy) ;将指针信息存到tlb的uvalue中保存 WIDGET_CONTROL,tlb,set_uvalue=pstate ;关联产生事件 XMANAGER, test_events, tlb,/NO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共投资项目造价控制与咨询服务合同
- 混凝土泵送服务与施工合同
- 社会保障专业试题及答案
- 机械专业精彩面试题及答案
- 小字教学课件图片高清无水印
- 2025至2030中国氯氯化铜杀菌剂行业项目调研及市场前景预测评估报告
- 蛋糕裱花教学课件图片
- 2025至2030氧化铝翻板行业项目调研及市场前景预测评估报告
- 2025至2030中国遗传性血管性水肿药物行业项目调研及市场前景预测评估报告
- 临床化验单解读
- YY/T 1437-2023医疗器械GB/T 42062应用指南
- (完整版)PE管焊接工艺
- 处置废旧物资投标方案
- 电动起子使用教程
- 10000中国普通人名大全
- 历史虚无主义课件
- 微生物实验室风险评估报告
- 毕业论文范文3000字(精选十六篇)
- 2022年阜阳市工会系统招聘考试题库及答案解析
- 陶艺制作过程介绍教学课件(共48张)
- 发动机构造第7章 发动机总体结构
评论
0/150
提交评论