电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> VB编程>>VB托盘程序详解之四:

VB托盘程序详解之四

来源:www.cncfan.com | 2006-3-30 | (有2471人读过)


  我们要自己写程序来处理消息,必须先更改窗口的属性,从原来由默认的窗口过程来处理消息变成由我们自己写的消息处理过程来处理消息。方法是使用SetWindowLong函数来取得默认窗口过程的地址,然后转向为我们自己写的窗口过程的地址,具体的实现方法如下代码:

'GWL_WNDPROC获得该窗口的窗口过程的地址,AddressOf是取址函数,NewWindowProc是我们写的过程
OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf
               NewWindowProc)
 
  然后在NewWindowProc函数中写入如下代码,需要注意的是下面代码中红色的TRAY_CALLBACK是由托盘区图标传来的消息,要让托盘图标传回消息,必须在添加托盘图标时指定:

   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

  这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSCOMMAND表示发送的是系统控制类的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:

   '托盘图标右键菜单上的“移动”项被点击时
   Private Sub mnuTrayMove_Click()
     SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0&
   End Sub
   '托盘图标右键菜单上的“恢复”项被点击时
   Private Sub mnuTrayRestore_Click()
     SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0&
   End Sub
   '托盘图标右键菜单上的“退出”项被点击时
   Private Sub mnuTraySize_Click()
     SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0&
   End Sub

  最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。
VB编程热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号