熟 悉 Windows 编 程 的 人 员 都 知 道, Windows 的 API 为 程 序 员 提 供 了 大 量 的 消 息, 约 有 两 百 多 个 的 消 息。 在 PowerBuilder 中, 系 统 将 每 个 Windows 消 息 做 为 事 件 传 递 给 程 序 员 处 理, 并 且 为 大 多 数 普 通 的 事 件 提 供 了 缺 省 的 处 理。
PowerBuilder 在 语 句 描 绘 器 中 为 每 一 个 标 准 的 控 件 设 定 了 一 些 常 用 的 事 件,一 般 的 编 程 人 员 基 于 这 些 事 件 就 基 本 可 以 完 成 常 见 的 操 作。 如 果 我 们 会 遇 到 事 件 的 处 理 是 需 要 另 外 的 截 获 Windows 的 消 息, 我 们 可 以 在 语 句 描 绘 器 的 菜 单 的 Declare | User Event... 中 加 入 一 个 新 的 事 件, 同 时 指 出 您 所 希 望 对 应 的 Windows 消 息。
Windows API 的 消
息 一 般 以 两 到 三 个 字 符 的 标 识 开 始, 这 个 标 识 标 明 了
该 消 息 的 来 源 或 对 象。 例 如:pbm_active实 际 上 对 应 的 是
WM_ACTIVATE,WM 说 明 该 消 息 是 一 窗 口 消 息。 其 它 的 消 息 前 缀
包 括:
*BM 按 钮 消 息 *BN 按 钮 通 知 消 息 *CB 通 用 对 话 框 消 息 *CBN 通 用 对 话 框 通 知 消 息 *DM 对 话 框 消 息 *EM 编 辑 器 控 件 消 息 *EN 编 辑 器 控 件 通 知 消 息 *LB 列 表 框 消 息 *LBN 列 表 框 通 知 消 息 *MM 多 媒 体 消 息 *SBN 卷 滚 条 通 知 消 息
此 外 还 有 一 个 DDE 消 息,DDE 消 息 从 技 术 上 来 说 属 于 窗 口 消 息, 但 在 这 里 我 们 把 它 们 分 离 出 来, 因 为 PowerBuilder 并 不 完 全 支 持 全 部 的 DDE 消 息。
消 息 一 般 告 诉 某 个 对 象(如 按 钮) 去 执 行 一 些 动 作。 通 知 消 息 一 般 由 某 个 控 件 发 出, 它 通 知 应 用 程 序 某 些 事 件 在 其 上 发 生 了。Waite Group 的 《Windows API 编 程 宝 典》 详 细 描 述 了 这 200 多 个 消 息 的 具 体 含 义, 这 些 消 息, 我 们 在 PowerBuilder 中 也 可 以 用 Send(handle, message_no, word, long) 函 数 发 出。
所 有 的 PowerBuilder 自 动 映 射 的 事 件 名 都 以"Pbm"前 缀, 例 如,BM_GETCHECK变 成 了
pbm_bmgetcheck。 通 过 向 定 义 用 户 事 件 对 话 框 中 增 加 事 件, 程 序 员 可 以 在 需 要 的 时 候 截 获 这 些 消 息。
PowerBuilder 还 有 另 一 类 消 息 是 标 准 的 Windows API 所 不 提 供 的 消 息。 这 类 消 息 以"dw"或"dwn"开 头, 如 pbm_dwnretrieveend。 这 些 是 与 数 据 窗 口 有 关 的 消 息 和 通 知 消 息, 因 为 数 据 窗 口 不 是 标 准 窗 口 对 象, 它 们 有 它 们 自 己 的 事 件。
下 面 我 们 解 释 一 下 PowerBuilder 中 以 pbm 开 头 的 内 部 映 射 事 件 的 含 义。 限 于 篇 幅, 我 们 不 能 全 部 介 绍, 只 能 将 每 一 类 中 举 一 些 主 要 的 例 子, 其 余 的 事 件 类 推。
单 选 或 多 选
按 钮 消 息(前 缀:pbm_bm)
getcheck 单选按钮或多选按钮是否被选? getstate 按钮是否加亮 setcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然 setstate 加亮或不加亮按钮 change 改变按钮的风格;例如,改为单选按钮或组合框
单选或多选按钮通知消息(前缀:pbm_bn) clicked 按钮控件被点中 disable 使按钮控件无效 double-clicked 按钮控件被双点 dragdrop 一个对象被放到按钮控件 dragenter 一个对象被拖到按钮控件 dragleave 一个对象被拖离按钮控件 dragover 一个对象被拖经按钮控件 hilite 按钮控件将被加亮 paint 按钮控件将被绘制 setfocus 按钮控件将获得聚焦 unhilite 按钮控件将被不加亮 通用对话框消息(前缀:pbm_cb) addstring 将字符串加到通用对话框 deletestring 从通用对话框删除一个字符串 dir 加一个目录列表到通用对话框 findstring 搜索以一组字符开头的字符串 findstringexact 搜索与所提供的字符完全匹配的字符串 getcount 列表框中的项数 getcursel 当前被选项的数目 getdroppedcontrolset 列表框在屏幕上的坐标位置 geteditsel 编辑器控件中被选字符的范围 getextendedui 缺省或扩展的用户界面 getitemdata 重画的列表框中的 4字节的项 getitemheight 列表框中某一项的高度 getlbtext 列表框中的文本 getlbtextlen 列表框中文本的长度 insertstring 向列表框中增加新的字符串或4字节项 limittext 限制能被输入到列表框中的字符数 resetcontent 删除列表框中所有元素 selectstring 搜索匹配的字符串并显示 setcursel 在列表框中选择并显示一项 seteditsel 在列表框的编辑区域中选择一块文本 setextendedui 设置缺省或扩展用户界面 setitemdata 在列表框中设定 4字节(32位)项 setitemheight 设置列表框中项的高度 showdropdown 转换(显示或隐藏列表框中拖放区域)
通用对话框通知消息(前缀:pbm_cbn) dblclk 用户在列表中某一项上双点 dragdrop 一个对象被放到通用对话框控件上 dragententer 一个对象被拖到通用对话框控件上 dragleave 一个对象被拖离通用对话框控件 dragover 一个对象被拖经通用对话框控件 dropdown 列表框的下放区域即将被显示 editchange 编辑器控件中的文本发生变化 editupdate 列表框编辑器控件中的文本即将被改变 errspace 列表框满,不能再向其中加入项 killfocus 通用列表框失去聚焦 selchange 列表框中被选文本被改变 selendcancel 用户按下了"取消"按钮 selendok 用户按下了"确认"按钮 setfocus 通用对话控件拥有聚焦
数据窗口消息(前缀:pbm_dw) closedropdown 关闭下拉式数据窗口 scrollend 在数据窗口中卷滚到最后一行 scrdlhome 在数据窗口中卷滚到第一行 scrolllineend 卷滚到当前行的行尾(水平方向) scrolllinehome 卷滚到当前行的行首(水平方向)
数据窗口通知消息(前缀:pbm_dwn) backtabout 即将通过 Shift+Tab组合键离开该控件 changing 控件即将被改变 dropdown 下拉式列表框的下拉部分即将可见 graphcreate 即将创建图形 itemchangefocus 数据窗口控件中当前项的聚焦改变 itemvalidationerror 对当前项的修改引起了一个合法性检查错误 key 有键被按下。使用KeyDown()处理键盘值 lbuttondown 鼠标左键被按下 lbuttonup 鼠标左键被松开 mbuttonclk 鼠标中键点击 mbuttondbclk 鼠标中键双点 mousemove 鼠标移动 printmarginchange 打印边界被改变 processenter 回车键被按下 rowchange 数据窗口中聚焦从一行转向另一行 tabdownout 用户在数据窗口最后一行按下了下箭头键 tabout 用户在数据窗口的最后一行/列中按下了tab键 tabupout 用户在数据窗口第一行中按下了上箭头键
动态数据交换(DDE)消息(前缀:pbm_dde) ddeack 收到一个DDE消息 ddeinitiate 开始一个DDE会话 ddeterminate 终止一个DDE会话
编辑器控件消息(前缀:pbm_em) canundo 编辑器控件是否能撤消上一次修改? emptyundobuffer 清空由 Windows管理的取消操作的缓冲区 fmtlines 在多行编辑器控件的行尾增加或删除回车换行 getfirstvisibleline 返回编辑器控件中可见的第一行的行号 gethandle 获得编辑器控件使用的内存句柄 getline 从编辑器控件中复制一行到内存中的一个缓冲区 getlinecount 返回多行编辑器控件的行数 getmodify 文本是否被用户修改 getrect 返回控件的长方形域 getsel 返回被选文本的起始位置 limittext 限制用户键入的文本长度 linefromchar 返回被选文本的行号 lineindex 返回编辑器控件中被选行第一个字符在编辑串中的位置 linelength 返回编辑器控件中被选行中的字符数 linescroll 水平或垂直卷滚编辑器控件 replacesel 从剪贴板或从键盘用新文本替换被选文本 sethandle 设置编辑器控件的句柄指向内存中的一个缓冲区 setmodify 设置编辑器控件的modified标志 setpasswordchar 设置用户输入任何文本时显示的字符。用来在输入密码时的显示 setrect 设置/重置编辑器控件所在的长方形区域。 编辑器控件中的文本被重画。 setrectnp 与Setrect大致相同,除了不重画文本 setsel 选择字符 settabstops 在多行编辑器控件中设置tab stops setwordbreak 设置新的词拆分函数 setwordbreakproc 设置新的词拆分过程 undo 撤消最近的编辑操作
编辑控件通知消息(前缀:pbm_en) change 编辑器控件中的文本发生改变 errspace 编辑器控件内存缓冲区溢出 hscroll 用户点中上水平卷滚条 maxtext 用户试图输入比所允许的更多的文本 update 编辑器控件即将显示用户的修改 vscroll 用户点中了垂直卷滚条