我在MDI  用WndProc 来监控这个窗体发生的事件
然后 MDI里面有一些子窗体
Private Sub MDIForm_Load()
On Error Resume Next    prvWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)End Sub
现在的问题就是,现在调试这个程序的时候,我想要暂停调试的时候,却发现MDI始终在受监控,VB却没有办法获得焦点,请问,有什么办法可以解决这个问题吗?

解决方案 »

  1.   

    首先要还原它的函数地址.Private Sub Command1_Click()
    SetWindowLong Me.hwnd, GWL_WNDPROC, prvWinProc 
    End Sub
      

  2.   

    另外调试的时候 如果跟监控的消息无关 ,最好把 SetWindowLong 注释掉
      

  3.   

    將子類做成ActiveX Dll,編譯之後在工程裡調用.
      

  4.   

    帮你找了一个
    http://cosoft.org.cn/html/osl/projects.php?group_id=13694
    这个程序在 Visual Basic 使用 Active X 子类化控件,可以在 Visual Basic IDE中进行安全调试。子类化是一种强大的技术,可以让你修改应用程序中控件和窗体的常规行为。 
      

  5.   

    我按你们说的做成DLL我照做了然后问题变成了
    1.我把 WndProc  之类的函数放到 了这个DLL里面
    由于我的WndProc 是监控的一个菜单,点了菜单就要调用这个字符对应的窗体
    我DLL编译之后,发这我要调用的这些窗体DLL里面没有,
    于是我就想用现实然后把些调用窗体的代码还是写回到那些窗体里面于是有了'模块里Dim AAA as New ClsMenu
    Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error GoTo errhandle:
        Dim LngSelectMenuHwnd   As Long
        Dim LngActWindow        As LongDim StrFrm As String
        If Msg = WM_COMMAND Then        If lParam = 0 Then
    '如果点中菜单的话就让类去触发事件
                Call AAA.SelectedMenu(hwnd, Msg, wParam, lParam)
            End If    End If
             WndProc = CallWindowProc(prvWinProc, hwnd, Msg, wParam, lParam)
        Exit Functionerrhandle:
        MsgBox Err.Description
    ErrHandleNoErr:
            WndProc = CallWindowProc(prvWinProc, hwnd, Msg, wParam, lParam)
            Exit Function
    End FunctionClsMenu里面有
    Public Event SelectMenued(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long)Public Sub SelectedMenu(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long)
       RaiseEvent SelectMenued(hwnd, Msg, wParam, lParam)
       ’让窗体里的代码来加载窗体
    End Sub
    窗体里面是这样的
    Dim WithEvents ClsMainMenu as ClsMenu可是问题是为什么我在窗体里却没有
    Private Sub ClsMainMenu_SelectedMenu 
    end Sub
      

  6.   

    你在 ClsMenu 里自定义一个SelectedMenu  事件
    譬如:
    Dim  Event SelectedMenu(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) '注意Event 关键字
      

  7.   

    是呀,我就是这样的呀ClsMenu里面有
    Public Event SelectMenued(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long)
      

  8.   

    会不会ClsMenu 里有错误啊,如果有错误的话可能是不能现实 事件的要不你先按ctr+F5 运行一下 如果在ClsMenu 里出现错误的话 纠正他
      

  9.   

    在一个工程里面有什么问题,编译成Dll之后就有问题了
      

  10.   

    我知道了,是这样的有一个类模块里面有一个事件,如果在这个类RaiseEvent SelectMenued(hwnd, Msg, wParam, lParam)  是没有问题的,可是问题的关键是监控函数WndProc 又只能放到模块里面,那模块里面是没有就没有办法触发那个事件了,晕呀