如何使用系統匣直接從 Visual Basic

文章翻譯 文章翻譯
文章編號: 176085 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將示範如何充份利用 Windows 系統匣或工作列通知區域使用 Visual Basic。它將您所選擇的圖示放入時,滑鼠 rested 至其上方、 應用程式按一下時,會回復,且會顯示快顯功能表會顯示您所選擇的工具提示在工作列通知區域時用滑鼠右鍵按一下。 這是因為 Visual Basic 能夠直接處理回呼的所有可能,因此利用完整 Shell_NotifyIcon 函式,會匯出由 Shell32.dll。

其他相關資訊

下列範例可加入至有至少一個表單和標準模組任何 Visual 基本專案。

雖說是逐步範例

  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 」 將需要將另一個圖示新增至新的表單使用 systray"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 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
關鍵字:?
kbmt kbbug kbhowto KB176085 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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