在FREEBASIC中使用鼠标(MystikShadows原著,沧海冷心翻译)

在FREEBASIC中使用鼠标(MystikShadows原著,沧海冷心翻译)

在网上搜索了一圈之后,我发现竟然没有一篇关于在WINDOWS控制台程序中使用鼠标的技术性文章。所以我决定写一篇文章来作为这方面的例子。大家都知道一个WINDOWS控制台肯定有鼠标功能,那就意味着它可以直接用WINDOWS API来创建,也可以直接从控制台访问鼠标。所以没有必要去打开或者关闭鼠标。你需要做的只是去设定它的X和Y坐标和取得它的状态。我们来看一下以下几点:

·取得鼠标坐标:当鼠标移动时,它的坐标值改变。你可以通过坐标来了解鼠标在屏幕上精确的位置。

·设置鼠标坐标:有些时候你可能需要移动鼠标去一个你要求它需要去的位置。

·获得鼠标按键状态:很简单,当用户按下鼠标的一个按键时,它将返回一个值告诉你哪个键被按下或者哪些键被按下(译者:哪些?鼠标有多少个按键呀~~)。从这些值你就可以让程序来选择执行哪一部分代码。


象大部分教程一样,我们将举一个非常简单的例子来演示用户和鼠标的交互。它将提供最基本的鼠标操控代码供你参考使用。

(警示:你必须在图形模式下使用鼠标。否则将返回-1值,表示图形模式未设定)

程序介绍:
这是一个非常简单和直观的示例程序。这个程序运行时将在屏幕顶部出现3个东西,点击不同的东西将有不同的提示。这个程序将给你足够的信息来了解在FREEBASIC中使用鼠标。

在FREEBASIC中有2个命令是你必须牢记的。这里是它们的使用方法。

GETMOUSE
--------------------------------------------------------------------------------
使用方法:
GETMOUSE x, y[, [Wheel][, [Buttons]]]

说明:
GETMOUSE 返回鼠标的位置和按键状态。

鼠标X和Y坐标将在函数调用的时候返回。如果鼠标不在窗口内,X和Y都返回-1

Wheel这个参数是鼠标滚轮的计数器。正着滚滚轮的时候这个数值将增加,反着则减。如果鼠标在窗口外则返回-1

Buttons参数。当函数调用时,它将返回鼠标按键状态信息。0是左键按下,1是右键,2是中键(如果有的话)。

 

SETMOUSE


--------------------------------------------------------------------------------
使用方法:
SETMOUSE x, y, visibility

说明:
SETMOUSE 可以设置鼠标位置和可见性。

X和Y参数来设定鼠标位置。

如果visibility=1则鼠标可见, 反之不可见。

 

例子代码开始:

这里是一些常量声明。它们可以使代码看上去更简洁明了。

Const LEFTBUTTON = 1
Const MIDDLEBUTTON = 2
Const RIGHTBUTTON = 4
Const SHOWMOUSE = 0
Const HIDEMOUSE = 1

声明变量:

Dim CurrentX As Integer
Dim CurrentY As Integer
Dim MouseButtons As Integer
Dim CanExit As Integer

所有程序需要做的事都放在DO循环里然后我们可以控制程序退出就OK了。所以我们创建一个循环,并且判断只要CanExit=0时就退出。在这个循环中我们监视鼠标并且作出响应。不要忘了设置图形模式喔,我们使用SCREEN 12模式:

Screen 12
CanExit = 1
Do While CanExit <> 0
    GETMOUSE CurrentX, CurrentY, , MouseButtons
    If CurrentX < 0 Then
    Print "Mouse is out of context."
    Else
    Print Using "Mouse position: ###:### Buttons: "; CurrentX; CurrentY;
    If MouseButtons And LEFTBUTTON Then Print "L";
    If MouseButtons And MIDDLEBUTTON Then Print "R";
    If MouseButtons And RIGHTBUTTON Then Print "M";
    End If
Loop

这个例子可以演示鼠标的位置和判断鼠标的按键按下。GETMOUSE函数把鼠标的X和Y坐标放进了CURRENTX和CURRENTY两个变量中,把按键状态放在MouseButtons变量。L表示左键按下,R表示右键按下,M表示中间键按下。

下一步,我们应该来对鼠标发生的事件做点什么了。我我们为鼠标例子做一些选项来进一步演示。

    Screen 12
    SETMOUSE 1, 1, 1
    CanExit = 1
    Locate 1,1
    Print " | FIRST | SECOND | THIRD | EXIT | "
    Do While CanExit <> 0
    Locate 1,1
    GETMOUSE CurrentX, CurrentY, , MouseButtons
    Loop

我们简单的把 | FIRST | SECOND | THIRD | EXIT | 显示在了屏幕上方。我们还是用循环来监视鼠标。当然,现在当你按任何鼠标键屏幕上都不会发生什么,因为我们还没有添加相关代码。为了方便读者起见,添加后的整体代码如下:

Const LEFTBUTTON   = 1
Const MIDDLEBUTTON = 2   ' UNUSED IN THIS DEMO
Const RIGHTBUTTON  = 4   ' UNUSED IN THIS DEMO
Const SHOWMOUSE    = 0
Const HIDEMOUSE    = 1

Dim CurrentX     As Integer
Dim CurrentY     As Integer
Dim MouseButtons As Integer

Screen 12
SETMOUSE 1, 1, SHOWMOUSE
CanExit = 1
Locate 1,1
Print " | FIRST | SECOND | THIRD | EXIT | "

Do
   GETMOUSE CurrentX, CurrentY, , MouseButtons
   If MouseButtons And LEFTBUTTON Then
      If CurrentY <= 12 Then
         If CurrentX >= 0 And CurrentX <=75 Then
            Locate 12, 1
            Print "First Option Selected ";
         Elseif CurrentX >= 76 And CurrentX <= 147 Then
            Locate 12, 1
            Print "Second Option Selected";
         Elseif CurrentX >= 148 And CurrentX <=212 Then
            Locate 12, 1
            Print "Third Option Selected ";
         Elseif CurrentX >= 213 And CurrentX <=268 Then
            Locate 12, 1
            Print "Last Option Selected  ";
            Exit Do
         End If
      End If
   End If
Loop While Inkey$ = ""

SETMOUSE 1, 1, HIDEMOUSE
Print
PRINT "AND NOW WE'RE OUT OF THE LOOP"
Sleep

你可以看到很多IF语句在上面,。这些数字都是在SCREEN 12模式下计算过的。如果你更换了鼠标图形,你需要重新计算一下,呵呵。

在FREEBASIC中使用鼠标是一件很简单的事情。不管你用什么来画屏幕,SETMOUSE和GETMOUSE函数都将正常工作并且返回值。你所需要做的就是让你的程序做你想让它做的事。

如果你有任何问题,可以EMAIL给我:

MystikShadows
srichard@adaworld.com    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值