怎样捕捉点击事件?请高手帮忙。谢谢

fly@ 2006-03-23 11:57:12
我使用VB做东西的,但最近碰见了问题,问了好多都解决不了。
所以本人来这里请教一下,能否通过调用API来解决。
问题使这样的。我在VB的一个窗体上方了一个播放Flash的控件。运行时要求Flash全屏显示。单击它时,进入主程序。但这个控件没有单击事件。能否通过调用API来解决。来捕获呢???
...全文
125 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fly@ 2006-03-29
搞定了
回复
fly@ 2006-03-28
问高手一下。
Private Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long

Public hnexthookproc As Long
Const HC_ACTION = 0
Const WH_KEYBOARD = 2
Const WH_MOUSE = 7

Public Sub UnHookKBD()
UnhookWindowsHookEx hnexthookproc
End Sub

Public Function EnableKBDHook()
hnexthookproc = SetWindowsHookEx(7, AddressOf MyKBHFunc, App.hInstance, 0)
End Function

Public Function MyKBHFunc(ByVal iCode As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam = 513 Then ‘ 513 既是点击左键
UnHookKBD ‘卸载钩子函数
Unload Form1 ’ 执行到此处form1却无法卸载。form1上的flash仍在播放。
End If
End Function
以上代码在标准模块

以下是form1的代码:
Private Sub Form_Load()
SF1.Height = Screen.Height
SF1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.Width = Screen.Width
Form1.Top = 0
Form1.Left = 0
SF1.Movie = App.Path + "\1.swf"
Call EnableKBDHook
End Sub

Private Sub Form_Unload(Cancel As Integer)
Form2.Show 1
End Sub

form2为一空白框体
回复
fly@ 2006-03-27
感谢各位指导,从今开始好好学习VC
回复
wlwlxj 2006-03-26
自己写代码判断,PtInRect
回复
CUG122032 2006-03-26
一窍不通可以学啊.

怎么这么懒呢?
从你问问题就看出来了.
别人都说用"钩子函数"了,就自己去看呗.
回复
fly@ 2006-03-26
我是学VB的,对API可一窍不通呀。
回复
fly@ 2006-03-23
感谢楼上,我的主要问题就是程序启动时,Flash在全屏播放。这时如何捕获鼠标单击事件。
回复
shomay 2006-03-23
我是用VC的,VB放下好多年了,忘了。

不过API一样的用,你看:

PtInRect
The PtInRect function determines whether the specified point lies within the specified rectangle. A point is within a rectangle if it lies on the left or top side or is within all four sides. A point on the right or bottom side is considered outside the rectangle.

BOOL PtInRect(
CONST RECT *lprc, // pointer to structure with rectangle
POINT pt // structure with point
);

这个函数就是用来判断某一点是否在某区域内的。你可以先截获鼠标消息,然后加入判短语句(至于VB具体怎么写这些语句,我的确是忘了语法)。
回复
fly@ 2006-03-23
感谢楼上高手。能否说的详细点。我对API不甚了解。
回复
lixiaosan 2006-03-23
获得整个控件的rect
得到点击的point

判断后者是否在rect内
回复
shomay 2006-03-23
呵呵……我算是看明白了,你不会是要我把源代码直接贴上来吧?

自己看去!!关于钩子函数的资料,这个论坛里多的是,一搜就一大堆了。我把代码给你了,你复制过去,程序好了,可是你还是不懂。

呵呵……作程序员,不能这样啊。
回复
fly@ 2006-03-23
感谢楼上指点,能否具体说一下,“钩子函数”呢?谢谢
回复
shomay 2006-03-23
如果你再问我怎么捕获用户鼠标信息……嗬嗬……我记得当时我用了钩子函数。

靠,突然想起来了,用了钩子函数,还要个P的Timer啊?

Sorry,sorry~~~~~呵呵……就用钩子函数吧。程序一起来,就把钩子按上,不管在那里动鼠标,你都可以检测到。哈哈……
回复
shomay 2006-03-23
如果Flash遮住了所有的窗口,也就是其他窗口无法响应鼠标或者键盘消息,那么……

根据我多年前用VB作了本科毕业设计的经验,用Timer吧。做一个100ms的Timer,准实时监测用户的鼠标动作。

嘿嘿,虽然看起来不够专业,但是一定管用。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2006-03-23 11:57
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……