我想点一下系统托盘中的图标
再把哪个MDI窗体显示出来
怎么做啊?
难道我了
Private Sub MDIForm_Resize()
    If MDIForm1.WindowState = vbMinimized Then
        With m_IconData
        .cbSize = Len(m_IconData)
        .hWnd = Me.hWnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE 'Or NIF_TIP 'NIF_TIP Or NIF_MESSAGE
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Me.Icon
        .szTip = "Tour Ver1.0" & vbNullChar
        .dwState = 0
        .dwStateMask = 0
        .szInfo = "双击图标显示主窗体" & Chr(0)
        .szInfoTitle = "最小化信息" & Chr(0)
        .dwInfoFlags = NIIF_WARNING
         End With
    Shell_NotifyIcon NIM_ADD, m_IconData
    Me.Hide
    End If
End Sub

解决方案 »

  1.   

    最小化的时候
        Hook Me.hWnd
        AddIconToTray Me.hWnd, Me.Icon, Me.Icon.Handle, "This is a test tip"回调函数
    Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Hooking = True Then
            If lParam = WM_RBUTTONUP Then
                form1.SysTrayMouseEventHandler
                WindowProc = True
                Exit Function
            End If
            If lParam = WM_LBUTTONDBLCLK Then
                SetForegroundWindow hw
                form1.Show
                RemoveIconFromTray
                Exit Function
            End If
            WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
        End If
    End Function--------------------------------------
    你去看看这个版面的FAQ吧。
      

  2.   

    '相信您的机器上一定装有"金山词霸",试着启动它您发现了什么?启动画面过后它"不见了"。把鼠标移到  桌面的右下角,原来它以图标的形式"藏在"  Windows的托盘中。用鼠标右击它还会弹出一个菜单功能项供您选择。现在您一定想把自己的程序也放到托盘,这样您的  程序多具有专业水准!  
    '下面是此功能的实现步骤:  
    '1.这里我们调用的API函数是:  
    '"Shell_NotifyIcon",在您的模块中添加如下的函  
    '数声明和常量声明:  
    '以下常量告诉系统在托盘中您的图标上发生了什么  操作  
    '常量声明  
    Public  Const  WM_MOUSEMOVE  =  &H200  '在图标上移动鼠标  
    Public  Const  WM_LBUTTONDOWN  =  &H201  '鼠标左键按下  
    Public  Const  WM_LBUTTONUP  =  &H202  '鼠标左键释放  
    Public  Const  WM_LBUTTONDBLCLK  =  &H203  '双击鼠标左键  
    Public  Const  WM_RBUTTONDOWN  =  &H204  '鼠标右键按下  
    Public  Const  WM_RBUTTONUP  =  &H205  '鼠标右键释放  
    Public  Const  WM_RBUTTONDBLCLK  =  &H206  '双击鼠标右键  
    Public  Const  WM_SETHOTKEY  =  &H32  '响应您定义的热键  
    'API函数声明  
    Public  Declare  Function  Shell_NotifyIcon  Lib  "shell32.dll"  Alias  ""  ()  
    Shell_NotifyIconA  "  (ByVal  dwMessage  As  Long,  lpData  As  NOTIFYICONDATA)  As  Long  "  
    '自定义一个调用API  Shell_NotifyIcon要用到的类  型"NOTIFYICONDATA"  
    Public  Type  NOTIFYICONDATA  
    cdSize  As  Long  'NOTIFYICONDATA类型的大小  
    hwnd  As  Long  '你的应用程序窗体的名柄  
    uId  As  Long  '应用程序图标资源的ID号  
    uFlags  As  Long  '使那些参数有效它是以下枚举类型中的  
    'NIF_MESSAGE、NIF_ICON、NIF_TIP三组的组合  
    uCallbackMessage  As  Long  '鼠标移动时把此消息发给该图标的窗体  
    hIcon  As  Long  '图标名柄  
    szTip  As  String  *  64  '当鼠标在图标上时显示的Tip文本  
    End  Type  
     
    '这是一个枚举类型它告诉API  Shell_NotifyIcon去做什么操作  
    Public  Enum  enm_NIM_Shell  
    NIM_ADD  =  &H40  '在“金碟”中加一图标  
    NIM_MODIFY  =  &H1  '修改“金碟”中的图标  
    NIM_DELETE  =  &H2  '删除“金碟”中的图标  
    NIF_MESSAGE  =  &H1  '使类型"NOTIFYICONDATA"中的uCallbackMessage有效  
    NIF_ICON  =  &H2  '使类型"NOTIFYICONDATA"中的hIcon有效  
    NIF_TIP  =  &H4  '使类型"NOTIFYICONDATA"中的szTip有效  
    WM_MOUSEMOVE  =  &H200  '使鼠标移动消息有效  
    End  Enum  
    '定义一个"NOTIFYICONDATA"类型的变量  
    Public  nidProgramData  As  NOTIFYICONDATA  
     
    '以上是函数及常量声明和自定义的一个类型变量,下面是此API函数的调用方法:  
    '2.  在窗体上用菜单编辑一个具有如下信息的菜单项:  
    '主菜单:  无标题、名称  (mainMenu)  
    '子菜单:标题(API编程)、名称(submnul);  
    '标题(退出)、名称(submnu2).  
    '这里只是举个例子,具体的功能你可以根据你的具体需要来编辑此菜单项  
    '3.  在窗体的Load事件中添加如下代码:  
    Private  Sub  Form_Load()  
    '隐藏窗体  
    With  Me  
           .Top  =  -10000  
           .Left  =  -10000  
           .WindowState  =  vbMinimized  
    End  With  
    '设置类型NOTIFYICONDATA所具有的特征  
    With  nidProgramData  
           .cbSize  =  Len(nidProgramData)  
           .hwnd  =  Me.hwnd  
           .uld  =  vbNull  
           .uFlags  =  NIF_ICON  Or  NIF_TIP  Or  NIF_MESSAGE  
           '触发鼠标移动消息  
           .uCallbackMessage  =  WM_MOUSEMOVE  
           .hIcon  =  Me.Icon  
           '“托盘”中放入窗体图标,你可以把窗体的图标换成你所喜欢的图标  
           .szTip  =  "VB  的  Win32  API  编程"  &  vbNullChar  
    End  With  
     
    '调用该函数  
    Shell_NotifyIcon  NIM_ADD,  nidProgramData  
    End  Sub  
    '根据不同的鼠标消息做不同的操作  
    Private  Sub  Form_MouseMove(Button  As  Integer,  Shift  As  lnteger,  x  As  Single,  Y  As  Single)  
    On  Error  GoTo  Form_MouseMove_err:  
    Dim  Result  As  Long  
    Dim  msg  As  Long  
    'X的值依赖与显示模式的设置  
    If  Me.ScaleMode  =  vbPixels  Then  
           msg  =  x  
    Else  
           msg  =  x  /  Screen.TwipsPerPixe1X  
    End  If  
    Select  Case  msg  
           Case  WM_LBUTTONUP  
           '在这里加入鼠标左键释放时你想做的操作  
           Case  WM_LBUTTONDBLCLK  
           '在这里加入双击鼠标左键时你想做的操作  
           Case  WM_RBUTTONUP  
           '通常这里弹出你的功能菜单  
           PopupMenu  mainMenu  
           Case  WM_MOUSEISMOVING  
           '在这里加入鼠标正在移动时你想做的操作  
           End  Select  
    Exit  Sub  
     
    Form_MouseMove_err:  
    '在这里加入你的处理异常错误的代码  
    End  Sub  
    '4.Run你的程序,您是不是看到了象“金山词霸”一样的功能?相信你此时的感觉一定特别“爽”!  API的世界j是丰富多彩的,只要你肯细心地去探索它你一定会获得许多意想不到的好东西。所以笔者觉得定值得每一个具有“好奇”精神的人去探索它。后续的期刊笔者会向读者详细介绍一些更好更“牛”的API调用。
      

  3.   

    我看过别人编写的例子
    但都是FORM的例子
    没有MDIFORM的例子
    他们普遍用的都是
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim Msg As Long
        
        If Me.ScaleMode = vbPixels Then
            Msg = x
        Else
            Msg = x / Screen.TwipsPerPixelX
        End If
        Select Case Msg
        Case WM_LBUTTONUP
            PopupMenu main
        End Select
       
    End Sub但MDIFORM没有.ScaleMode
    所以我就不清楚怎么做了
    你上边的回调函数我看了但还是不知道怎么用
      

  4.   

    窗体
    Option ExplicitPrivate Sub MDIForm_Load()
        Hook Me.hWnd
    End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
        Unhook
    End Sub模块
    Option Explicit
    Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
    Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) 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
    Public nfIconData As NOTIFYICONDATA
    Public Const WM_LBUTTONDOWN = &H201
    Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
    Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
    Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Function ReleaseCapture Lib "user32" () As Long
    Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Public Const RGN_OR = 2
    Public Const WM_NCLBUTTONDOWN = &HA1
    Public Const HTCAPTION = 2
    Public Const WM_RBUTTONDOWN = &H204
    Public Const WM_RBUTTONUP = &H205
    Public Const WM_ACTIVATEAPP = &H1C
    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 MAX_TOOLTIP As Integer = 64
    Public Const GWL_WNDPROC = (-4)
    Public Const WM_LBUTTONDBLCLK = &H203Type NOTIFYICONDATA
       cbSize As Long
       hWnd As Long
       uID As Long
       uFlags As Long
       uCallbackMessage As Long
       hIcon As Long
       szTip As String * MAX_TOOLTIP
    End Type
    Private FHandle As Long
    Private WndProc As Long
    Private Hooking As Boolean
    Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String)
    With nfIconData
       .hWnd = MeHwnd
       .uID = MeIcon
       .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
       .uCallbackMessage = WM_RBUTTONUP
       .hIcon = MeIconHandle
       .szTip = Tip & Chr$(0)
       .cbSize = Len(nfIconData)
    End With
    Shell_NotifyIcon NIM_ADD, nfIconData
    End SubPublic Sub RemoveIconFromTray()
        Shell_NotifyIcon NIM_DELETE, nfIconData
    End SubPublic Sub Hook(Lwnd As Long)
        If Hooking = False Then
            FHandle = Lwnd
            WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
            Hooking = True
        End If
    End SubPublic Sub Unhook()
        If Hooking = True Then
            SetWindowLong FHandle, GWL_WNDPROC, WndProc
            Hooking = False
        End If
    End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Hooking = True Then
            If lParam = WM_LBUTTONDOWN Then
                SetForegroundWindow hw
                MDIForm1.Show
                MDIForm1.WindowState = 0
                SetForegroundWindow hw
                RemoveIconFromTray
                Exit Function
            End If
            If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
                MDIForm1.WindowState = 1
                MDIForm1.Hide
                AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
            End If
            WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
        End If
    End Function
      

  5.   

    谢谢~~
    多问你一个问题
    .szInfo = "双击图标显示主窗体" & Chr(0)
    .szInfoTitle = "最小化信息" & Chr(0)
    这两个事件没有了
    我怎么能有那样的提示框那?
    谢谢