首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

修改 VB6 Systray.ocx 實現托盤氣泡提示功能完整教程

     編輯:程式設計疑難解答

需求背景

VB6 自帶 systray.ocx 做托盤圖標穩定可靠,但缺乏氣泡提示(Balloon Tip)功能。項目已大量引用,不願更換組件,需修改源碼添加該功能。

源碼獲取

VB6 安裝目錄 Common\Tools\VB\Unsupprt\Systray\ 或網上搜索「VB6 Systray.ocx source」。

修改步驟

步驟 1:完善 NOTIFYICONDATA 結構體

編輯 mSysTray.bas,擴展結構體以包含氣泡提示所需字段(重點:szTip 必須 128 字節,非官方文檔的 64):

Public Type NOTIFYICONDATA
    cbSize As Long
    hWnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 128      ' 關鍵:必須 128,64 會導致氣泡不顯示
    dwState As Long
    dwStateMask As Long
    szInfo As String * 256     ' 氣泡提示內容
    uTimeout As Long           ' 顯示時長(ms) 或版本標識
    szInfoTitle As String * 64 ' 氣泡標題
    dwInfoFlags As Long        ' 圖標類型:NIIF_INFO/NIIF_WARNING/NIIF_ERROR
End Type

步驟 2:在 cSysTray.ctl 添加公共方法

Public Sub ShowBalloonTip(ByVal Title As String, ByVal Text As String, Optional ByVal IconType As Long = NIIF_INFO)
    Dim Tray As NOTIFYICONDATA
    If gInTray Then
        Tray.cbSize = Len(Tray)
        Tray.hWnd = gTrayHwnd
        Tray.szInfo = Left$(Text & vbNullChar, 256)
        Tray.szInfoTitle = Left$(Title & vbNullChar, 64)
        Tray.uFlags = NIF_INFO
        Tray.dwInfoFlags = IconType
        Tray.uTimeout = 10000 ' 10 秒
        Shell_NotifyIcon NIM_MODIFY, Tray
    End If
End Sub

步驟 3:重新編譯 OCX 並替換項目引用

  1. File → Make Systray.ocx 輸出到項目目錄。
  2. 項目 → Components → 取消舊勾選 → Browse 選中新 OCX。
  3. 代碼中調用:Systray1.ShowBalloonTip "標題", "內容", NIIF_INFO。

關鍵避坑點

  • szTip 必須 128 字節,否則 Shell_NotifyIcon 返回成功但氣泡不顯示(VB6 經典坑)。
  • 字符串必須以 vbNullChar 結尾,防止垃圾字符。
  • uTimeout 在 XP/2000 為顯示毫秒數,Vista+ 為版本標識,建議寫 10000 兼容。
  • 修改後的 OCX 需在目標機重新註冊 (regsvr32)。

修改底層 OCX 雖費力,但能完美保持項目原有架構不變,是存量項目增強的最佳路徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved