.net、VB子类化教程

.net、VB子类化教程

ID:40657749

大小:126.00 KB

页数:14页

时间:2019-08-05

.net、VB子类化教程_第1页
.net、VB子类化教程_第2页
.net、VB子类化教程_第3页
.net、VB子类化教程_第4页
.net、VB子类化教程_第5页
资源描述:

《.net、VB子类化教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.何谓子类化(subclassing)众所周知,Windows是一个基于消息的系统,消息在Windows的对象之间进行着传递。子类化和Windows的钩子机制存在于消息系统之中,我们可以利用这些机制来操纵、修改甚至丢弃那些在操作系统或是进程中传递的消息,以求改变系统的一些行为。子类化技术用来截取窗口或控件之间的消息,当然是消息在到达目的窗口之前完成的操作。这些被截获的消息既可以保留也可以修改它们的状态,之后就继续发送到目的地。子类化技术实现了一些正常情况下无法实现的功能,试想鼠标右键单击TextBox,系统默认弹出Undo、Cut、Copy、Paste等菜单,我们就

2、可以利用子类化技术来改变这个系统菜单。简单的说,子类化就是创建一个新的窗口消息处理过程,并将其插入到原先的默认窗口消息处理过程之前。子类化分为三类:实例子类化(instancesubclassing)—从窗口或控件的单一实例截获消息,这种子类化技术最普遍;全局子类化(globalsubclassing)—能够截获从相同的窗口类创建出来的多个窗口或控件的消息;超类化(superclassing)—和全局子类化很类似,区别在于可以应用在新的窗口类上面。2.VisualBasic6子类化的实现在VisualBasic6子类化的实现中我们将通过一段代码的实例来介绍这一技术在V

3、B6中的应用。现在很多开发社区中经常谈到的一个话题就是界面开发如何Skin,这种技术有很多解决方式,如使用可以贴图的控件或使用第三方开发的换肤ActiveX控件。其实Skin技术需要处理的是WM_DRAWITEM、WM_MEASUREITEM、WM_NCPAINT消息,这些消息的主要用途就是可以重画控件和窗口的非客户区。想要对这些VB6无法处理的消息进行编程就必须用到子类化,这些消息都会被发送到能够自绘的控件的窗口上,因此下面的例子就是利用窗口子类化来重画Button控件。①创建工程启动VisualBasic6同时创建一个标准EXE工程。②窗口布局在FORM1上放置3

4、个Button控件,并将前两个Button的Style属性设置为1-Graphical,因为只有Style属性设置为Graphical的Button才可以Owner-drawn。③在窗体中录入代码PrivateSubCommand3_Click()'通过Enabled属性的控制,来显示重画控件在Unenabled状态时的效果IfCommand1.EnabledThenCommand1.Enabled=FalseElseCommand1.Enabled=TrueEndIfEndSubPrivateSubForm_Load()'安装子类化入口CallInit(Me.hWn

5、d)EndSubPrivateSubForm_Unload(CancelAsInteger)'卸载子类化CallTerminate(Me.hWnd)EndSub④加入一个模块并录入代码OptionExplicit'--引用Win32Api–'得到默认的窗口消息处理过程的地址需要的APIPrivateDeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByValhWndAsLong,ByValnIndexAsLong)AsLong'设置一个新的窗口消息处理过程的地址需要的APIPrivateDecla

6、reFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhWndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong'给指定的窗口消息处理过程传递消息需要的APIPrivateDeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"(ByVallpPrevWndFuncAsLong,ByValhWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByV

7、allParamAsLong)AsLong'内存拷贝PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(DestinationAsAny,SourceAsAny,ByValLengthAsLong)ConstGWL_WNDPROC=(-4&)DimPrevWndProc&PrivateConstWM_DESTROY=&H2PrivateConstWM_DRAWITEM=&H2BPrivateTypeRECTLeftAsLongTopAsLongRightAsLongBottomAs

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。