有没有讲VB中对象机制的资料?具体的先提几个问题: 1. 消息传递中,是怎么样从windows的回调函数到类的方法的?这个传递过程是怎么样的? 更明白的说,窗口句柄和控件对象是如何关联的? 2. 如何动态的创建控件,并且给它的事件赋值?比如创建一个CommandButton,然后让它的Click消息处理过程指向CmdBtnClick这个过程?而且,我想实现的是动态替换这个处理函数。 3. 有没有VB的RTTI方面的资料? 搜索了好久都没有找到,VB出来这么久了,资料却这么少,希望有高人指点迷津...
Select Case uMsg
Case WM_INIT
RaiseEvent FormObject.Form_Initialize()
Case WM_PAINT
RaiseEvent FormObject.Form_Paint()
...
End Select
...
End Function2. 动态创建控件的话,基本上用Controls.Add,但对于事件的绑定一般得事前绑定,使用Dim WithEvents声明。虽然可以使用查找ConnectionPoint的方法在事后动态连接部分控件的事件(因为只有类型信息完整的类才可以绑定到指定事件),但不推荐这么做。3.资料少见,不过VB中的TypeOf...Is和TypeName可以判别对象所属的类,而在.NET中除了这俩东东之外,还有更强大的Reflection。
我有过类似的开发需求,可能没你的需求这么高级。我的经验写在这个博文里
http://blog.csdn.net/slowgrace/archive/2008/12/05/3452804.aspx
消息是 Windows 机制,每个 hWnd 句柄必须有一个 WindowProc 来响应消息。
事件是 COM 机制,一个对象声明了一个消息,就可以有任意多个(包括 0 个)接收者来收取该事件。而 VB 的基本控件和 UserControl 模板已经实现了:响应固定的一些消息,必要时触发预定义的事件。
至于事件的响应代码,VB 的语法只约定了按 <对象名> & "_" & <消息名> 的方式定义。
没有 Handles 关键字,所以只能在编译时固定关联。
在 <对象变量> - <事件响应> 这对关联中,你唯一可以变更的就是通过对 <对象变量> 的赋值来变更不同的对象实例。