跳转到内容

Futurebasic/语言/参考/鼠标事件

来自维基教科书,开放的书籍,开放的世界

MOUSE <event>

[编辑 | 编辑源代码]

clickType = MOUSE(0)
locationInfo = MOUSE(locationType)

修订版

[编辑 | 编辑源代码]

2002 年 2 月(版本 6)

如果您使用 ON MOUSE 语句指定了鼠标事件处理例程,则 MOUSE <event> 函数会返回有关鼠标点击事件的信息。您的鼠标事件处理例程应在每次调用例程时检查 MOUSE(0) 函数,并可能检查 MOUSE(locationType) 函数。

MOUSE <event> 函数不会报告在活动控件(如按钮或滚动条)内部、编辑字段或图片字段中或活动窗口内容区域外的任何地方发生的鼠标点击。此类鼠标点击由其他例程处理,例如您的对话框事件处理例程(参见 <a href="dialog%20function.html">DIALOG</a> 函数)或您的菜单事件处理例程(参见 <a href="menu%20function.html">MENU</a> 函数)。

MOUSE(0) 函数 MOUSE(0) 函数指示是否发生了单击、双击或三击。它通常会返回以下值之一

图片在此处

在极少数情况下,用户可能在您的程序检测到点击之前,既点击了鼠标又释放了鼠标。例如,如果您的程序在连续调用 HANDLEEVENTS 之间运行很长时间,则可能发生这种情况。在这种情况下,MOUSE(0) 可能会返回以下值之一

图片在此处

如果您只想检测点击,并且不关心用户是否在调用您的鼠标事件处理例程之前释放了鼠标按钮,那么您的例程只需检查 ABS(MOUSE(0)),它将始终返回 1、2 或 3。

MOUSE(locationType) 函数 要检测鼠标指针在点击时的位置,请在您的鼠标事件处理例程中调用 MOUSE(_lastMHorz)MOUSE(_lastMVert) 函数。MOUSE(_lastMHorz)MOUSE(_lastMVert) 返回的值通常与 MOUSE(_horz)MOUSE(_vert) 返回的值相同(参见 <a href="mouse%20position.html">MOUSE <position></a> 函数),但它们可能不同,尤其是在鼠标移动很快的情况下。

如果 MOUSE(0) 返回一个正值(表示鼠标在调用您的鼠标事件处理例程之前被点击并释放),那么您可能还对 MOUSE(_releaseHorz)ÊÊ和 MOUSE(_releaseVert) 返回的值感兴趣。这些值告诉您鼠标指针在释放鼠标按钮时的位置。如果 MOUSE(0) 返回负值,则 MOUSE(_releaseHorz)MOUSE(releaseVert) 无意义。

MOUSE 窗口(外观管理器) 一个新的选择器帮助您的程序确定鼠标的位置

wndNum = MOUSE(_mouseWindow)

...将返回鼠标所在的窗口的 FB 窗口引用号。使用此功能时,窗口不需要处于活动状态。

点击排序 FB 只要鼠标按钮被按下,就会尽快报告鼠标点击事件。如果用户执行双击,FB 会先将其解释为单击事件,然后(在第二次点击发生时)解释为双击事件。这两个“事件”都将报告给您的鼠标事件处理例程。类似地,如果用户执行三击,FB 会首先报告单击事件,然后报告双击事件,最后报告三击事件。

编写鼠标事件处理例程时,您应该考虑到这一点。示例程序“DoubleClick.BAS”处理单击和双击;与大多数设计良好的程序一样,它的界面设计使得单击的效果包含在双击的效果中。

等待鼠标抬起 在大多数情况下,FB 会在鼠标按钮仍然按下的情况下调用您的鼠标事件处理例程。但在某些情况下,您的例程可能需要跟踪鼠标的移动,直到按钮被释放。您可以使用 Toolbox 函数 FN STILLDOWN 来确定用户何时释放鼠标按钮。参见示例程序“StillDown.BAS”。

示例: 图片在此处 CD 示例:DoubleClick.BAS
图片在此处 CD 示例:StillDown.BAS

MOUSE(_down); MOUSE <position>;ON MOUSE; ANDLEEVENTS

华夏公益教科书