有没有讲VB中对象机制的资料?具体的先提几个问题:    1. 消息传递中,是怎么样从windows的回调函数到类的方法的?这个传递过程是怎么样的? 更明白的说,窗口句柄和控件对象是如何关联的?    2. 如何动态的创建控件,并且给它的事件赋值?比如创建一个CommandButton,然后让它的Click消息处理过程指向CmdBtnClick这个过程?而且,我想实现的是动态替换这个处理函数。    3. 有没有VB的RTTI方面的资料?    搜索了好久都没有找到,VB出来这么久了,资料却这么少,希望有高人指点迷津...

解决方案 »

  1.   

    在百度上搜索“VB的RTTI“,可以得到14000条目录,
      

  2.   

    1. 当创建窗口类时,VB先调用CreateWindowEx,然后将得到的窗口句柄保存至窗口类的相应属性中。回调采取的是类似这样的机制(为了简单起见,我这里用类似VB的语法进行描述,真正的类库MSVBVMxx.dll是用C写的):Function WndProc(...)
      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。
      

  3.   

    每种开发语言都有自己的特点。VB更多的应用于事务的处理,面对对象机制并不是VB的特点,不是C++.
      

  4.   


    我有过类似的开发需求,可能没你的需求这么高级。我的经验写在这个博文里
    http://blog.csdn.net/slowgrace/archive/2008/12/05/3452804.aspx
      

  5.   

    首先,消息和事件是两回事。
    消息是 Windows 机制,每个 hWnd 句柄必须有一个 WindowProc 来响应消息。
    事件是 COM 机制,一个对象声明了一个消息,就可以有任意多个(包括 0 个)接收者来收取该事件。而 VB 的基本控件和 UserControl 模板已经实现了:响应固定的一些消息,必要时触发预定义的事件。
    至于事件的响应代码,VB 的语法只约定了按 <对象名> & "_" & <消息名> 的方式定义。
    没有 Handles 关键字,所以只能在编译时固定关联。
    在 <对象变量> - <事件响应> 这对关联中,你唯一可以变更的就是通过对 <对象变量> 的赋值来变更不同的对象实例。
      

  6.   

    第一个问题是类似vb中setwindowlong的用法和原理,参看下MSDN吧第二个问题是你可以参看高级visual basic编程,但是这本书有点..像楼上老马说的不是一定要明白的,毕竟这不是c/c++