我写系统托盘程序时,点按钮可以把程序最小化到任务栏,现在如何处理点任务栏图标重新出现窗口这个过程。我是菜鸟,请多指教啊!
代码如下:
module中: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    Public a As Long    '以下为 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_LBUTTONDOWN = &H201    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    '以下过程为消息循环处理    Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long    If uMsg = WM_USER + 100 Then '检测到鼠标点动托盘图标     Select Case lParam     Case WM_LBUTTONDBLCLK             MsgBox "d"
     
          Case Else     End Select    Else '调用缺省窗口指针
     MsgBox "a"
     WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)    End If    End Function
frm中:Dim MyNot As NOTIFYICONDATA '定义一个托盘结构   
    Private Sub Command1_Click() '按下创建按钮    Dim hh As Long     With MyNot     .hIcon = Form1.Icon     .hwnd = Form1.hwnd     .szTip = "托盘图标" & Chr(&H0)     .uCallbackMessage = WM_USER + 100     .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE     .uID = 1     .cbSize = Len(MyNot)     End With    hh = Shell_NotifyIcon(NIM_ADD, MyNot) '添加一个托盘图标
        trayflag = True '图标添加后trayflag为真    End Sub    Private Sub Form_Load()     gHW = Me.hwnd '取得本窗体指针
    
   
     hook    End Sub    Public Sub hook()
     lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOfWindowProc)    End Sub    Public Sub Unhook()     Dim temp As Long     temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)    End Sub

解决方案 »

  1.   

    在这里将
    If uMsg = WM_USER + 100 Then '检测到鼠标点动托盘图标     Select Case lParam     Case WM_LBUTTONDBLCLK             MsgBox "d"   '-----这里修改为你要显示窗口代码
                 form1.show       
              Case Else     End Select
      

  2.   

    托盘程序的模块详细代码Option Explicit
    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
        Public a As Long
        '以下为 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_LBUTTONDOWN = &H201
        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    '以下过程为消息循环处理Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If hw = Form1.hwnd And uMsg = WM_USER + 100 Then '检测到鼠标点动托盘图标
            Select Case lParam
               Case WM_RBUTTONDOWN '鼠标右键按下
                   '你的代码
                   Form1.PopupMenu Form1.traymnu '弹出菜单
               Case WM_LBUTTONDOWN '鼠标左键按下
                   '你的代码
                   Form1.PopupMenu Form1.mnutray2 '弹出菜单
               Case Else
            End Select
        Else '调用缺省窗口指针
    '            WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
        End If
        WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Function