如何使用直接从 Visual Basic 系统任务栏

文章翻译 文章翻译
文章编号: 176085 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文演示了如何充分利用 Windows 系统送纸器或使用 Visual Basic 的任务栏通知区域。它将您选择的图标放入任务栏通知区域时鼠标 rested 通过它,将还原应用程序时单击了,并将显示一个弹出式菜单将显示您选择的工具提示的时用鼠标右键单击。 这是所有可能引起的直接处理回调的 Visual Basic 的能力,因此利用完全 Shell_NotifyIcon 函数的 Shell32.dll 由被导出。

更多信息

可以向任何可视的基本项目具有至少一个窗体和标准模块添加下面的示例。

分步示例

  1. 将下面的代码添加到项目中的标准模块的声明部分:
          'user defined type required by Shell_NotifyIcon API call
          Public Type NOTIFYICONDATA
           cbSize As Long
           hwnd As Long
           uId As Long
           uFlags As Long
           uCallBackMessage As Long
           hIcon As Long
           szTip As String * 64
          End Type
    
          'constants required by Shell_NotifyIcon API call:
          Public Const NIM_ADD = &H0
          Public Const NIM_MODIFY = &H1
          Public Const NIM_DELETE = &H2
          Public Const NIF_MESSAGE = &H1
          Public Const NIF_ICON = &H2
          Public Const NIF_TIP = &H4
          Public Const WM_MOUSEMOVE = &H200
          Public Const WM_LBUTTONDOWN = &H201     'Button down
          Public Const WM_LBUTTONUP = &H202       'Button up
          Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
          Public Const WM_RBUTTONDOWN = &H204     'Button down
          Public Const WM_RBUTTONUP = &H205       'Button up
          Public Const WM_RBUTTONDBLCLK = &H206   'Double-click
    
          Public Declare Function SetForegroundWindow Lib "user32" _
          (ByVal hwnd As Long) As Long
          Public Declare Function Shell_NotifyIcon Lib "shell32" _
          Alias "Shell_NotifyIconA" _
          (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
    
          Public nid As NOTIFYICONDATA
    					
  2. 下面的代码添加到您要为您的应用程序响应系统任务栏图标或通知图标在项目中的任何窗体:
          Private Sub Form_Load()
           'the form must be fully visible before calling Shell_NotifyIcon
           Me.Show
           Me.Refresh
           With nid
            .cbSize = Len(nid)
            .hwnd = Me.hwnd
            .uId = vbNull
            .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
            .uCallBackMessage = WM_MOUSEMOVE
            .hIcon = Me.Icon
            .szTip = "Your ToolTip" & vbNullChar
           End With
           Shell_NotifyIcon NIM_ADD, nid
          End Sub
    
          Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
          'this procedure receives the callbacks from the System Tray icon.
          Dim Result As Long
          Dim msg As Long
           'the value of X will vary depending upon the scalemode setting
           If Me.ScaleMode = vbPixels Then
            msg = X
           Else
            msg = X / Screen.TwipsPerPixelX
           End If
           Select Case msg
            Case WM_LBUTTONUP        '514 restore form window
             Me.WindowState = vbNormal
             Result = SetForegroundWindow(Me.hwnd)
             Me.Show
            Case WM_LBUTTONDBLCLK    '515 restore form window
             Me.WindowState = vbNormal
             Result = SetForegroundWindow(Me.hwnd)
             Me.Show
            Case WM_RBUTTONUP        '517 display popup menu
             Result = SetForegroundWindow(Me.hwnd)
             Me.PopupMenu Me.mPopupSys
           End Select
          End Sub
    
          Private Sub Form_Resize()
           'this is necessary to assure that the minimized window is hidden
           If Me.WindowState = vbMinimized Then Me.Hide
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
           'this removes the icon from the system tray
           Shell_NotifyIcon NIM_DELETE, nid
          End Sub
    
          Private Sub mPopExit_Click()
           'called when user clicks the popup menu Exit command
           Unload Me
          End Sub
    
          Private Sub mPopRestore_Click()
           'called when the user clicks the popup menu Restore command
           Dim Result As Long
           Me.WindowState = vbNormal
           Result = SetForegroundWindow(Me.hwnd)
           Me.Show
          End Sub
    					
  3. 使上面的代码添加到同一窗体上的以下属性设置:
       Property         Required Setting for Taskbar Notification Area example
       -----------------------------------------------------------------------
       Icon           = The icon you want to appear in the system tray.
       Minbutton      = True
       ShownInTaskbar = False
    					
  4. 将下面的菜单项添加到同一窗体使用菜单编辑器:
       Caption      Name          Enabled   Visible   Position
       ---------------------------------------------------------
       &SysTray     mPopupSys      True      False    Main Level
       &Restore     mPopRestore    True      True     Inset one
       &Exit        mPopExit       True      True     Inset one
    					
您可以根据需要添加更多菜单项。

任务栏通知区域灵活性

您可以修改的通知中会显示工具提示通过更改以下行在 Form_Load 过程中的图标:
   .szTip = "Your ToolTip" & vbNullChar
				
替换为想要显示的文本的"您工具提示"。

您可以修改通过更改以下行在 Form_Load 过程中的出现在任务栏通知区域中的图标:
   .hIcon = Me.Icon
				
替换 Me.Icon 与您的项目中的任何图标。

您可以更改任务栏通知区域设置的任何 NIM_ADD 常数的使用后的任何时候重新分配在 nid 变量值,然后使用在以下的变体 Shell_NotifyIcon API 调用的:
   Shell_NotifyIcon NIM_MODIFY, nid.
				
但是,如果您希望不同的窗体接收回调,然后您将需要首先删除当前图标 NIM_Modify 函数将不接受新的 Hwnd,或您使用"Shell_NotifyIcon NIM_Delete,nid"将需要将其他图标添加到新的窗体使用的系统托盘"Shell_NotifyIcon NIM_ADD,nid"后重填物料 nid 类型使用新窗体的 Hwnd。对于您希望 Windows 系统托盘中显示的图标,并在每个窗体中进行更改的每个窗体的激活使用 NIM_DELETE 和 NIM_ADD 序列的事件,也可以声明 nid 类型的不同副本。

参考

有关使用系统任务栏,或使用任务栏通知区域中,Visual Basic 4.0 或较早版本的详细信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
149276如何使用 Windows 95/98/me 任务栏通知区域图标

属性

文章编号: 176085 - 最后修改: 2006年9月29日 - 修订: 2.5
这篇文章中的信息适用于:
  • Microsoft Visual Basic 6.0 学习版
  • Microsoft Visual Basic 6.0 专业版
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 学习版
  • Microsoft Visual Basic 5.0 专业版
  • Microsoft Visual Basic 5.0 企业版
关键字:?
kbmt kbbug kbhowto KB176085 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 176085
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com