长 沙 左 家 垅 省 计 量 局 傅胜
---- PowerBuilder 为
程 序员 提 供 了 改 变 鼠 标 形 状 的 方 法, 却 没 有 提 供 控 制 鼠 标移 动 位 置 的 方 法。 其 实 在Windows 95 系
统 中, 已 经 为 程 序员 提 供 了 控 制 鼠 标 位 置 的 方 法, 利 用USER32.DLL 动 态 链 接库 中 的SetCursorPos()
函 数 就 可 以 灵 活 控 制 鼠 标 的 位 置。
---- 动 态 链 接
库(dynamic link library, DLL ) 是Windows 中 最 重 要 的 部 分 之 一, Windows 中 的 运行 程 序 可 以
共 享DLL 中 的 函 数 和 子 例 程, 从 而 使 应 用 程序 可 以 共 享 代 码, 减 少 内 存 占 用。
---- 要
在PowerBuilder 中调 用 外 部 函 数, 必 须 先 声 明 它。 有 两 种 类 型 的 外 部 函数: 全 局 外 部 函 数 和 局 部 外
部 函 数。 全 局 外 部 函 数 可以 在 应 用 程 序 的 任 何 地 方 声 明 使 用。 它 们 在 应 用 程 序中 与 其 他 全 局 变 量
一 起 保 存。 局 部 外 部 函 数 可 以 为 窗口, 菜 单, 用 户 对 象 定 义, 它 们 是 对 象 定 义 的 一 部分。
---- 定 义 外 部 函 数的 语
法 如 下 所 示:
{Access} Function ReturndataType Name({REF}{DataType]Arg],...
DataTypeN ArgN}] Library LibName
参数 描述
Access (只有在定义局部外部函数时使用)
可定义为Public, Protected或者
Private。缺省情况为Public。
ReturnDataType 函数的返回类型。
Name 函数名。
DataType1到 参数类型。
DataTypeN 如果是传值,可直接将参数写上。
如果是传参数,要在参数类型前加
上一个关健字REF。
Arg1到 参数名。
ArgN
LibName 动态链接库名。
在PowerBuilder的主菜单上选取
"Declare"的菜单项,然后选择子菜单项
"Global External Function",
在定义全局外部函数对话框中,输入:
FUNCTION long SetCursorPos(long x,long y) LIBRARY "USER32.dll"
---- 注 意: 对 于 关键 字"SetCursorPos"
中 的 大 小 写 字 母 必 须 严 格 区 分。
---- 这 样, 程 序 员就 可
以 在 应 用 程 序 的 任 何 位 置 使 用 该 函 数 了, 例 如 要将 鼠 标 定 位 到 屏 幕 中 央, 则 在 程 序 中 加
入SetCursorPos(320,240),这 里 假 设 当 前 屏 幕 的 分 辨 率 为640*480。
---- 当 然, 我 们 还可 做
更 复 杂 的 控 制。 例 如 要 使 用 户 在 单 行 编 辑 器 中 输入 完 后, 鼠 标 定 位 到"OK" 按 钮 上, 则 在 单 行 编 辑器
的losefocus 事 件 中 输 入:
long x1,y1
x1=(w_genapp_about.x+cb_ok.x+cb_ok.width/2)
x1=UnitsToPixels(x1, XUnitsToPixels!)
// 获 取"OK" 按 钮 的X 坐 标;
y1=(w_genapp_about.y+cb_ok.y+cb_ok.height/2+100)
y1=UnitsToPixels(y1, YUnitsToPixels!)
// 获 取"OK" 按 钮 的Y 坐 标;
SetCursorPos(x1,y1)
---- 如 果 要 使 鼠 标从 坐
标(100,200) 移 到 坐 标(500,200), 并 产 生 动 画 效 果, 则 编程 如 下:
long i,j
for i=100 to 500
SetCursorPos(i,200)
for j=1 to 999 //起延时作用,可根据实际情况调整;
next
next
---- 灵 活 地 控 制 鼠标 位
置, 能 使 程 序 更 加 有 趣, 对 用 户 也 更 友 好。
|