Visual Basic中的子类处理技术
作者:安徽省马鞍山钢铁总公司
王加龙
---- Visual Basic不仅仅是Windows环境下运行的一种全方位的编程语言,而且与Windows有着非常紧密的联系。如许多Visual Basic属性和事件与Windows属性和事件有着严格的"一对一"的关系。正因为如此,Visual Basic成为一种强大的Windows编程工具。在利用Visual Basic开发应用程序时,为了使程序具有自己鲜明的个性,常常要对Visual Basic中的窗体和控件做一些必要的改动,本文就谈一谈实现这一改动的一种方法--子类处理。
一、子类处理的概念
---- ⒈ 窗口
---- 在Visual Basic中,窗体和控件代表了屏幕上的一个矩形区域,这个矩形区域在Windows中就叫做窗口。因此窗体是窗口,按钮同样也是一个窗口等。需要认识的是如果它在屏幕里,它是位于一个窗口里,如果它不在屏幕里,它仍然可能位于一个窗口里。
---- ⒉ 窗口函数
---- 任何一个窗口都属于某个特定的类,在窗口建立时,都要调用该类提供的一个默认的窗口函数,窗口函数的作用在于对消息进行处理。窗口函数有四个参数,第一个参数是窗口的句柄,第二个参数是消息的编号,第三和第四个参数是32位参数,它们依据不同的消息取不同的值。
---- ⒊ 子类处理
---- 窗口并不一定非要默认那个窗口函数,完全可以调用由用户自己编写的一个窗口函数,从而达到拦截和处理到达该窗口的Windows消息,并能调用原来默认的窗口函数,这样就可以对该窗口的所有运作进行定制。这种技术就叫做子类处理技术。
二、子类处理的实现方法
---- 在Visual Basic环境下,为了实现子类处理,可以通过调用SetWindowLong这个API函数,用自己编写的窗口函数代替原来的窗口函数。SetWindowLong函数有三个参数,第一个是欲为其取得信息的窗口的句柄,第二个参数是欲取回的信息,在本方法中设置为GWL_WNDPROC,第三个参数是由第二个参数指定的窗口的新值,在本方法中应设置为自己编写的窗口函数的地址。在Visual Basic5.0以上的版本中,窗口函数的地址可以通过AddressOf操作符获得。值得注意的是,第一,窗口函数必须是Visual Basic工程中标准模块中的一个函数;第二,窗口必须是自己进程中的,若不是,则不能AddressOf操作符对它进行子类处理。为实现这种子类处理,必须采用第三方提供的控件或DLL。
---- 窗口函数的编写是子类处理的关键。如上所述,窗口函数须有四个参数,并且能拦截和处理消息。消息的拦截可采用Select Case语句,消息的处理可采用三种方式:
---- 第一,把消息不做任何处理传给原来的窗口函数;
---- 第二,把消息修改后再传给原来的函数;
---- 第三,自己处理这条消息而不传给原来的窗口函数。窗口函数如果用Visual Basic编写,其结构应该是如下的形式:
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余4页未读,立即下载