我在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却没有办法获得焦点,请问,有什么办法可以解决这个问题吗?
然后 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却没有办法获得焦点,请问,有什么办法可以解决这个问题吗?
SetWindowLong Me.hwnd, GWL_WNDPROC, prvWinProc
End Sub
http://cosoft.org.cn/html/osl/projects.php?group_id=13694
这个程序在 Visual Basic 使用 Active X 子类化控件,可以在 Visual Basic IDE中进行安全调试。子类化是一种强大的技术,可以让你修改应用程序中控件和窗体的常规行为。
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
譬如:
Dim Event SelectedMenu(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) '注意Event 关键字
Public Event SelectMenued(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long)