设为首页 加入收藏

TOP

滑鼠(三十九)
2010-12-30 21:11:57 来源: 作者: 【 】 浏览:27877
Tags:滑鼠
akesmallpic(this,600,1800);' src="F07zg10.gif" width="572" height="402" border="0" />

图7-4 BLOKOUT1的萤幕显示

那么,问题在哪里呢?

请试一试下面的操作:在BLOKOUT1的显示区域按下滑鼠的左键,然後将游标移出视窗。程式将停止接收WM_MOUSEMOVE讯息。现在释放按钮,BLOKOUT1将不再获得WM_BUTTONUP讯息,因为游标在显示区域以外。然後将游标移回BLOKOUT1的显示区域,视窗讯息处理程式仍然认为按钮处於按下状态。

这样做并不好,因为程式不知道发生了什么事情。

拦截的解决方案
 

BLOKOUT1显示了一些常见的程式功能,但它的程式码显然有缺陷。这种问题就是要使用滑鼠拦截来对付。如果使用者正在拖曳滑鼠,那么当滑鼠短时间内被拖出视窗时应该没有什么大问题,程式应该仍然控制著滑鼠。

拦截滑鼠要比放置一个老鼠夹子容易一些,您只要呼叫:

SetCapture (hwnd) ;

在这个函式呼叫之後,Windows将所有滑鼠讯息发给视窗代号为hwnd的视窗讯息处理程式。之後收到滑鼠讯息都是以显示区域讯息的型态出现,即使滑鼠正在视窗的非显示区域。lParam参数将指示滑鼠在显示区域座标中的位置。不过,当滑鼠位於显示区域的左边或者上方时,这些x和y座标可以是负的。当您想释放滑鼠时,呼叫:

ReleaseCapture () ;

从而使处理恢复正常。

在32位元的Windows中,滑鼠拦截要比在以前的Windows版本中有多一些限制。特别是,如果滑鼠被拦截,而滑鼠按键目前并未被按下,并且滑鼠游标移到了另一个视窗上,那么将不是由拦截滑鼠的那个视窗,而是由游标下面的视窗来接收滑鼠讯息。对於防止一个程式在拦截滑鼠之後不释放它而引起整个系统的混乱,这是必要的。

换句话说,只有当滑鼠按键在您的显示区域中被按下时才拦截滑鼠;当滑鼠按键被释放时,才释放滑鼠拦截。

BLOKOUT2程式
 

展示滑鼠拦截的BLOKOUT2程式如程式7-7所示。

 程式7-7 BLOKOUT2
BLOKOUT2.C
/*----------------------------------------------------------------------------
BLO
首页 上一页 36 37 38 39 40 41 42 下一页 尾页 39/50/50
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇计时器 下一篇键盘

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: