我以往用VB6做的应用程序,当程序最小化时,程序图标会出现在屏幕下的系统托盘上。但近期修改后,最小化时就不会出现在托盘上,而是以最小化窗口出现在托盘左上方的屏幕中,(程序启动后不会出现在系统托盘上)。我并未修改过窗体的参数,不知何故会这样?
(因为使用者习惯使用某种输入法,而该输入法的显示栏正好在托盘上方,刚好挡住了最小化后的窗口,使用很不方便)

解决方案 »

  1.   

    Option Explicit   '强制定义每个使用的变量
            Type NOTIFYICONDATA   '定义结构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
            '以下为  Shell_NotifyIcon将用到的常量
            Public Const NIF_ICON = &H2
            Public Const NIF_MESSAGE = &H1
            Public Const NIF_TIP = &H4
            Public Const NIM_ADD = &H0
            Public Const NIM_DELETE = &H2
            Public Const NIM_MODIFY = &H1
            'Shell_NotifyIcon的函数声明
            Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
          '处理消息将用到的结构、常量、API声明
            Type POINTAPI
              x  As Long
              y  As Long
            End Type
            Type Msg
              hwnd  As Long
              message  As Long
              wParam  As Long
              lParam  As Long
              time  As Long
              pt  As POINTAPI
            End Type
              Public Const WM_USER = &H400
        Public Const WM_RBUTTONDOWN = &H204
        Public Const WM_LBUTTONDBLCLK = &H203
            Public Const GWL_WNDPROC = -4
            Public trayflag   As Boolean   '定义托盘图标是否在桌面上
            Global lpPrevWndProc   As Long
            Global gHW   As Long
        Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long