.NET学习:将VB6写的游戏修改器用.NET重写——专用游戏修改器通用框架编写(3)

又一篇。写写回调。研究了N小时,结果就这么几句。。怒!

先帖VB6写的这个回调:

模块:

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

'回调函数
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
'在这里实现要的操作,不过想操作窗体里的东西就不好办,据说VB6的回调只能在模块里,那想实现事件啥的,就麻烦了,需要关联到现成的控件..NET里面就没那么麻烦了.(这是我看到的唯一的好处)
End Sub

 '窗体

SetTimer 0, 0, 1, AddressOf TimerProc (注意AddressOf 的位置:这个位置将对应API函数的修改位置: ByVal lpTimerFunc As SetTimerProc,而Delegate 的定义方式是与原API完全相同的,只是返回值改为Boolean)

这就可以了

换到.NET里面,好像得托管还是非托管,名词俺们不懂,要代码来重用就行了,不是吗?

类的实现:

public class Test

    Private Delegate Function SetTimerProc(ByVal hwnd As Integer, ByVal nIDEvent As Integer, ByVal uElapse As Integer, ByVal lpTimerFunc As Integer) As Boolean
    Private ST As New SetTimerProc(AddressOf TimerProc)
    Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Integer, ByVal nIDEvent As Integer, ByVal uElapse As Integer, ByVal lpTimerFunc As SetTimerProc) As Integer

    Private Function TimerProc(ByVal hwnd As Integer, ByVal nIDEvent As Integer, ByVal uElapse As Integer, ByVal lpTimerFunc As Integer) As Boolean

'这里就写你的操作即可.实际上我是在这里实现了全局热键和定时器,把定时器写在这里
End Function

'以上这些就实现了这个回调

end class

若想实现事件,就可以在类的开头写入事件:

Public Event Tick(ByVal KeyState As Integer)

然后在Private Function TimerProc里面添加如下代码

RaiseEvent Tick(thenTime)

就可以实现了,当然了,具体实现代码自己写吧.

调用时这样写:

Private WithEvents KeyPass As  new Test

然后窗体里就可以使用这个事件了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨曦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值