附录A
组件的事件结构
事件结构的定义
事件结构包含了特定组件的相关信息。每个事件都产生于它自身的、特定的事件结构中,然后被发送到事件处理模块。事件结构可以是命名的也可以是匿名的IDL结构变量。使事件结构与其它结构区分开来的是,事件结构有ID、Top和Handler三个字段。这三个字段都是长整型。下面列举了由IDL组件创建或返回的事件结构。
公共字段的定义
字段ID,通常是长整型,是产生事件的组件的唯一标示符,
产生事件的组件通常是组件层次结构中的一部分。那么字段Top就是该层次结构中顶级base的唯一标示符,它通常也是一个长整型的数。
事件产生的事件结构都要发送到事件处理程序中。每个事件处理程序都与某一个组件联系在一起。而字段Handler,就是那个与事件处理程序相联系的组件的标识符。它通常是个长整型的数.
这些公共字段的详细信息以及它们是如何定义的,请参阅256页的“事件结构中的公共字段”
基本组件的事件结构
base组件
{WIDGET_BASE, ID:0L, Top:0L, Handler:0L, X:0, Y:0}
只有顶级base,并且是在用户改变其大小的情况下才会产生事件。要产生事件,那么关键字TLB_Size_Events必须被显式地指定。字段X和Y是顶级base的尺寸大小,以像素为单位。Base的尺寸大小并不包含窗口的任何边框。
按钮组件
{WIDGET_BUTTON, ID:0L, Top:0L, Handler:0L, Select:0}
如果按钮被选中,那么字段Select被设置为1;如果按钮被释放,那么就被设为0。一般的按钮在被释放时并不产生事件,因此Select字段一直为1。然而,单选按钮对选中和释放动作会分别产生事件。
绘图组件
{WIDGET_DRAW, ID:0L, Top:0L, Handler:0L, Type:0, X:0, Y:0, Press:0, Release:0,Clicks:0}
字段Type将告诉事件的类型,它可能的值有:鼠标按下(0);鼠标松开(1);鼠标移动(2);视点滚动(3)和显示(4)。上面所有的事件都必须显式地指定,否则相应的事件是不会产生的。
字段X和Y给出了事件发生时的设备或屏幕坐标,绘图组件的左下角为坐标原点。字段Press和Release都是位掩码,当鼠标被按下或释放时,它们的值就分别存在了。其中1
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示鼠标左键,2表示鼠标中键,4表示鼠标右键。如果是个鼠标移动事件,那么Press和Release都被设置为0。
当鼠标单击时,字段Clicks返回1,双击时返回2。
下拉式列表组件
{WIDGET_DROPLIST, ID:0L, Top:0L, Handler:0L, Index:0L}
字段Index返回所选择列表项的索引号。通过它,可以对最初赋予该下拉式列表的数组进行引用。(数组应该存放于组件的用户值中或其他什么地方。)
标签组件
标签组件本身并不产生事件,但可以通过它来设置Timer事件。
列表组件
{WIDGET_LIST, ID:0L, Top:0L, Handler:0L, Index:0L, Clicks:0L }
字段Index返回所选项的索引号,通过索引号,可以对最初赋予给列表的数组进行引用。字段Clicks返回1或2,这取决于列表项是如何选择的。如果列表项被双击选中,Clicks返回2。主意,在事件处理程序中,单击和双击的信息都可以获得。
滑动条组件
{WIDGET_SLIDER, ID:0L, Top:0L, Handler:0L, Value:0, Drag:0}
字段Value返回滑动条的新值。当滑动条在拽动过程中,字段Drag返回1,拽动操作结束,则Drag返回0。注意,只有在UNIX操作系统上,并且设置了Drag关键字,滑动条才会产生Drag事件。
表单组件
插入单个字符事件
{WIDGET_TABLE_CH, ID:0L, Top:0L, Handler:0L, Type:0, Offset:0L, CH:0B, X: 0L, Y:0L}
字段Offset是包含的是一个以0为基数的插入点位置,插入的字符在插入点之后。字段Ch是当前插入字符的ASCII码,字段X和Y,则表示的是当前单元格在表单中的位置,也是以0为基数的。
插入字符串事件
{WIDGET_TABLE_STR, ID:0L, Top:0L, Handler:0L, Type:1, Offset:0L, Str:’’, X: 0L, Y:0L }
字段Str是要插入的字符串。
删除字符串事件
{WIDGET_TABLE_DEL, ID:0L, Top:0L, Handler:0L, Type:2, Offset:0L, Length:0L, X: 0L, Y:0L }
字段Offset是要删除的第一个字符所在的位置,它是以0为基数的。同时它也是下一个字符的插入点。字段Length表示删除字符的个数。
选择文本是事件
{WIDGET_TABLE_TEXT_SEL, ID:0L, Top:0L, Handler:0L, Type:3, Offset:0L, Length:0L, X: 0L, Y:0L }
当插入点的位置发生变化时,这个事件就会被引发。字段Offset是所选文本的第一个字符的位置,以0为基数。字段Length为所选字符的个数。如果Length为0,则表明没有选中,且字符插入点也被设置为Offset值。
选择单元事件
{WIDGET_TABLE_CELL_SEL, ID:0L, Top:0L, Handler:0L, Type:4, Sel_Left:0L, Sel_Top:0L, Sel_Right:0L, Sel_Bottom:0L}
当前所选择的单元格发生变化时,这个事件会被引发。所选择的单元格范围由字段Sel_Left、Sel_Top、Sel_Right和Sel_Bottom确定,它们都是以0为基数。当所选择的单元格在取消选择的事件发生时(选择发生改变或点击表单左上角会导致这个事件的发生),字段Sel_Left、Sel_Top、Sel_Right和Sel_Bottom的值都为-1。
注意,这就意味着,当选择焦点从一个已选中的单元格到一个新单元格时,会产生两次WIDGET_TABLE_CELL_SEL事件。在程序中,要将选择和取消选择区分开来。
改变行高事件
{WIDGET_TABLE_ROW_HEIGHT, ID:0L, Top:0L, Handler:0L, Type:6, Row:0L, Height:0L}
当用户改变表单给定行的高度时会引发这个事件。字段Row包含了所选定行的值(以0 为基数),字段Height包含的是改变后的高度。
改变列宽事件
{WIDGET_TABLE_COLUMN_WIDTH, ID:0L, Top:0L, Handler:0L, Type:7, Column:0L, Width:0L}
当用户改变表单给定列的宽度时会引发这个事件。字段Column包含了所选定列的值(以0 为基数),字段Width包含的是改变后的高度。
无效数据事件
{WIDGET_TABLE_INVALID_DATA, ID:0L, Top:0L, Handler:0L, Type:8, Str:’’, X:0L ,Y:0L}
当这个事件发生时,所在的单元格的数据保持不变。用户输入的无效数据保存在字段Str中。单元格的位置由字段X和Y来确定。
文本组件
插入字符事件
{WIDGET_TEXT_CH,ID:0L, Top:0L, Handler:0L, Type:0, Offset:0L, Ch:0B}
字段Offset是当前插入点的位置(以0为基数)。字符Ch为插入字符的ASCII码。
插入字符串事件
{WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:1, Offset:0L, Str:’’ }
字段Str为插入的字符串。
删除字符串事件
{WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:2, Offset:0L, Length:0L }
字段Offset为要删除的第一个字符串的位置(以0为基数),它同时也是下一个字符的插入点。字段Length为要删除的个数。
文本选择事件
{ WIDGET_TEXT_STR,ID:0L, Top:0L, Handler:0L, Type:3, Offset:0L, Length:0L }
插入点的改变会引发这个事件的产生。字段Offset为所选择的第一个字符的位置(以0为基数)。字段Length为要所选择字符的个数。Length表明没有选中字符,并且插入点被设置为Offset的值。
复合组件的事件结构
CW_Animate
{ID:0L, Top:0L, Handler:0L, Action:0L}
字段Action中唯一允许的字符串就是“DONE”
CW_Arcball
{ ID:0L, Top:0L, Handler:0L, Value:FltArr(3,3)}
字段Value包含了新的旋转矩阵。
CW_BGroup
{ ID:0L, Top:0L, Handler:0L, Select:0, Value:*}
字段Select包含了新的旋转矩阵。字段Value可以是按钮的Index、ID、Name和按钮用户值,这取决于组件创建时情况。
CW_Clr_Index
{CW_COLOR_INDEX, ID:0L, Top:0L, Handler:0L, Value:0}
字段Value为所选择的颜色的索引号。
CW_Color_Sel
{COLORSEL_EVENT, ID:0L, Top:0L, Handler:0L, Value:0}
字段Value为所选择的颜色的索引号。
CW_DefROI
这个复合组件有内部事件处理程序,并且不会产生任何外部事件。
CW_Field
{ ID:0L, Top:0L, Handler:0L, Value:’’,Type:0, Update:0}
字段Value包含了文本组件中的值。字段Type指定了数据的类型,它可能的值有:0(字符串),1(浮点数),2(整数)或3(长整型)。如果没有更新,则字段Update返回0,否则返回1。
CW_Form
{ ID:0L, Top:0L, Handler:0L, Tag:’’,Value:0, Quit:0}
字段Tag包含了那些发生了变化的字段标签。字段Value则是包含了变化后的新值;字段;如果Quit被设置,那么Quit返回0,否则返回1。
CW_Flisder
{ ID:0L, Top:0L, Handler:0L,Value:0.0, Drag:0}
字段Value返回滑动条的当前值。当滑动条在拽动过程中,字段Drag返回1,拽动操作结束,则Drag返回0。
CW_Orient
当组件内部不同子组件改变变换矩阵时,这个复合组件产生不同的事件。一般来讲,这个组件在字段ID第一次发生变化时,将内部组件所产生的的事件直接传送到本组件的顶级base中。大多数事件处理程序都忽略该复合组件的事件,因为系统变量!P.T在任何时候都是自动更新的。
CW_PDMenu
{ID:0L, Top:0L, Handler:0L, Value:*}
字段Value既可以是按钮组件的Index、ID、Name,也可以是按钮的Full_Name,这取决于按钮组件是如何创建的。
CW_RGBSlider
{ID:0L, Top:0L, Handler:0L, R:0B, G:0B, B:0B}
字段R、G、B分别代表所选择颜色的红、绿、蓝的值。
CW_Zoom
{ZOOM_EVENT,ID:0L, Top:0L, Handler:0L, XSize:0L, Ysize:0L,
X0:0L, Y0:0L, X1:0L, Y1:0L }
字段Xsize和Ysize包含了缩放后图像的大小,字段X0,Y0,X1,Y1分别包含了原始图像左下角和右上角的坐标。
组件程序的事件结构
Xcolors
{XCOLORS_LOAD, ID:0L, Top:0L, Handler:0L, R:BytArr(!D.Table_Size), G:BytArr(!D.Table_Size), B:BytArr(!D.Table_Size), Index:0}
Xcolors将向由NotifyID所标识的组件发送事件。字段R、G、B分别包含了当前颜色表的红、绿、蓝的向量值。字段Index设置为-1,或者在载入了颜色表后设置为颜色表的索引值。
其他组件的事件结构
下面所列出的是组件产生的其他事件。
键盘焦点事件
{WIDGET_KBRD_FOCUS, ID:0L, Top:0L, Handler:0L, Enter:0L}
某些组件,如文本框,在设置了关键字KBRD_FOCUS_EVENTS后可以产生键盘焦点事件。当这些组件获得键盘焦点时(字段Enter设置为1)或失去键盘焦点时(字段Enter设置为0)会产生这个事件。
组件退出请求事件
{WIDGET_KILL_REQUEST, ID:0L, Top:0L, Handler:0L}
设置了关键字TLB_KILL_REQUEST_EVENTS的顶级base在窗口管理器销毁该组件(比如,用户用鼠标关闭窗口,而不是点击Quit按钮)时就会接收到这个事件。不管销毁事件是来自Quit按钮,还是来自窗口管理器,调用CleanUp过程来处理任何组件的销毁事件会更加简单。(CleanUp过程的详细信息请参阅278页的“使用CleanUp过程来防止内存泄漏”)
组建计时器事件
{WIDGET_TIMER, ID:0L, Top:0L, Handler:0L}
事件处理程序在接收到计时器事件时可以做任何事情。字段ID是用来标识设置计时器的组件。
组件跟踪事件
{WIDGET_TRACKING, ID:0L, Top:0L, Handler:0L, Enter:0}
每次鼠标进入到组件(字段Enter设置为1)或从组件出来(字段Enter设置为0)时都产生这个事件。对于指定的组件,如果要产生这个事件,则必须设置关键字Tracking_Events。注意,在Windows操作系统下,跟踪事件运行得不是很好。
附录B
数据文件描述
在这里,列举了本书所涉及到的有关数据文件。这些文件可以从下面网站中下载到:
ftp://ftp.dfanning.com/pub/dfanning/outgoing/coyote
同时,这些文件也可以在IDL的目录下找到。详细信息请参阅7页的“拷贝数据文件”。
文件名称
描 述
类型
X
Y
Z
abnorm.dat
开有小孔的血小球
字节
64
64
15
cereb.dat
大脑的X射线影像
字节
512
512
1
convec.dat
地幔对流图像
字节
248
248
1
ctscan.dat
胸腔CT扫描图像
字节
256
256
1
galaxy.dat
银河系图像
字节
256
256
1
head.dat
人头的MRI切片组
字节
80
100
57
hurric.dat
Gilbert飓风数据
字节
440
340
1
image24.dat
彩色的世界海拔高程数据
字节
3
360
360
jet.dat
水利模拟
字节
81
40
101
m51.dat
M51星系图像
字节
340
440
1
people.dat
RSI公司的创始人图像
字节
192
192
2
worldelv.dat
世界海拔高程数据
字节
360
360
1
PAGE
6