谢谢sixfooter:你的程序稍稍有些遗漏,
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_USER+100 Then '在这里处理你的消息(嘿!!!!别看花眼了,向这看!!!!!!!)
myfunction()
else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
end if
End Function
这样实现的很好!
这个我会
过程是这样的
在你那个VC编的程序中要发消息的时候用sendmessgge函数
声明如下
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
第一个参数是接受消息窗口的hwnd,第二个参数是消息代码如果你要自定义消息可以发送
代号大于WM_USER = &H400的消息(wm_user在API常量可以查到),后两个参数是自己决定的只要和接受消息的程序协调好就可以了.
消息的发送方就可以了.
接收比较麻烦.窗口程序中写入如下代码
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub
再引入一个模块写入如下代码
Public Const GWL_WNDPROC = (-4)
Public Const WM_USER = &H400
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public prevWndProc As Long
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg > WM_USER Then '在这里处理你的消息(嘿!!!!别看花眼了,向这看!!!!!!!)
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function
有几点要注意不要在WndProc中打开窗口,也不要在其中给其它控件设置属性.
还有,接收窗口一定要正常卸载就是你在调试的时候要用窗口的 X 关闭它而不能用VB的停止按钮,
好了就这些.