如题,请问这是什么原因,该如果解决,谢谢

解决方案 »

  1.   

    其实会造成这个问题的主要原因是因为:当使用 Mouse 的左键或右键点选这些图标来叫出 PopupMenu 时,应用程序本身其实并不是 Active 的应用程序,所以在这个 Form 中的 Menu ,其实也没有得到 Focus,既然没有 Focus,当然就不会触发 LostFocus 事件,所以 Menu 本身根本没有收到关闭窗口的讯息!解法:要解决这个问题其实很简单,就是让 Form 变成 Active,也就是 Menu 取得 Focus!而要让Form 变成 Active,我们需要呼叫 SetForegroundWindow API,它的宣告方式如下:Public Declare Function SetForegroundWindow Lib "user32" _
    Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
    1、 在 Bas 檔中加入上面所提的 SetForegroundWindow API 宣告。 
    2、 在程序中呼叫 PopupMenu 方法之前,加入一行程序代码:SetForegroundWindow Me.hwnd Private Sub PicOn_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
        '设定 PicOn 对象的 ScaleMode 为 Pixels
        If PicOn.ScaleMode = vbPixels Then
            msg = X
        Else
            msg = X / Screen.TwipsPerPixelX
        End If    '以下的事件在本范例中只示范 (按鼠标右键)及(左键的DBClick)
        Select Case msg
            Case WM_RBUTTONUP    '按鼠标右键
                SetForegroundWindow Me.hwnd  '<--------------只要加上这行程序就可以了
                PopupMenu mnuShell   '显示右键下拉选单 
                    
            Case WM_LBUTTONDBLCLK    '左键的DBClick 
                Me.Visible = True                   '显示窗体 
                
            '***  以下为其它可处理的事件  *****'
            'Case WM_LBUTTONDOWN       'Left Button down
            'Case WM_LBUTTONUP             'Left Button up
            'Case WM_RBUTTONDOWN      'Right Button down
            'Case WM_RBUTTONUP            'Right Button up
            'Case WM_RBUTTONDBLCLK   'Double-click
            'Case WM_MOUSEISMOVING    'Mouse is moving
            '***  以上为其它可处理的事件  *****'
        End Select
    End Sub