完全用 VB 6.0 自身功能实现对 Windows 消息的拦截!

本文介绍如何使用VB 6.0自身功能实现对Windows消息的拦截,通过设置自定义窗口函数,拦截WM_NCHITTEST消息,模拟标题栏拖动效果。尽管VB功能相对VC++和Delphi有限,但通过巧妙的编程方法,可以扩展其能力,例如使用AddressOf操作符和回调函数机制。文章提供了一个简单的无边框窗体拖动示例,强调了VB也能处理复杂的编程需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,VB 的功能没有 VC++、Delphi 这样的全功能开发平台强大,但她也足以完成我们绝大部分的工作,只要你开动脑筋,敢想敢干,我们可以让 VB 发挥最大的效能,做出许多令人惊叹的软件。开发高难度软件,并不只是 VC++ 和 Delphi 的专利!

过去普遍认为 VB 无法自定义拦截 Windows 的消息,只能靠 VB 本身提供的几个有限的事件来编程,这有很大的局限性。缺少消息捕获,同时又被认为不支持回调函数机制(主要是因为 VB 没有指针,更谈不上函数指针),这造成了 VB 编程的很大局限性。事实上,VB 可以采用别的办法变相地实现这一机制。从 VB 5.0 开始就提供了 AddressOf 操作符,利用这个操作符可以获取 VB 自定义函数的地址。有了函数地址就可以采用回调函数的机制了。当然,VB 仍然无法实现 VB 函数之间的地址传递,她只支持 VB 函数到 DLL 的函数抵制传递。但是,这已经足够了。下面这个程序,就是采用了这一方法,程序中只有一个主窗体,通过设置属性,使得主窗体没有边框,没有标题栏,不能改变大小,不能通过标题栏托动。但是通过拦截 Windows 消息可以使得鼠标处在窗体中的任意位置都可以托动它,就像按住标题栏托动一样。这个程序没有用到任何附加的控件,全部采用 VB 代码完成。注意,请增加一个公共模块,以便声明一些函数和常数。以下代码在 VB 6.0 中通过。

' ===================================
' 这是公共模块的代码
Attribute VB_Name = "Module1"
Option Explicit

Public Const WM_NCHITTEST = &H84
Public Const VK_LBUTTON = &H1
Public Const HTCAPTION = 2
Public Const HTCLIENT = 1


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Declare Function Cal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值