VB利用API函数添加系统托盘图标的问题
网上看了一下教程,用的最多的方法就是通过:CallWindowProc、SetWindowLong、Shell_NotifyIcon等几个API函数实现。其中关键一步是需要自己定义一个窗口过程。
在自己定义的窗口过程:
Public Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键
If Msg = TRAY_CALLBACK Then
'如果点击了左键
If lParam = WM_LBUTTONUP Then
'而这时窗体的状态是最小化时
If TheForm.WindowState = vbMinimized Then _
'恢复到最小化前的窗体状态
TheForm.WindowState = TheForm.LastState
TheForm.SetFocus
Exit Function
End If
End If
'如果点击了右键
If lParam = WM_RBUTTONUP Then
'则弹出右键菜单
TheForm.PopupMenu TheMenu
Exit Function
End If
End If
'如果是其他类型的消息则传递给原有默认的窗口函数
NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)
End Function
这段代码其他的都好理解,唯一不解的是:
NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)
这个我知道是通过 CallWindowProc 来让原来的默认的窗口函数处理其它消息。
不解的是为什么 CallWindowProc的返回值一定要赋给自定义的窗口过程NewWindowProc呢?
我直接调用CallWindowProc,不赋值给NewWindowProc不行吗?(试了一下去掉赋值,直接调用,好像不行)
我想知道原因何在?CallWindowProc函数到底返回了什么东西,而且必须赋给NewWindowProc 你替换了原来函数,它返回是什么,你照样复制返回就行了,没必要关心那是什么内容。
补充:VB , API