Windows 7 ';关闭';当程序最小化到任务栏时,选项不可用?

Windows 7 ';关闭';当程序最小化到任务栏时,选项不可用?,windows-7,vb6,taskbar,Windows 7,Vb6,Taskbar,我正在用Win7编程VB6。我有一个无边框窗口的程序,没有标题,没有图标,没有控制框,等等。只有一个窗口。使用命令按钮,我可以最小化任务栏的窗口,并从那里返回它 我的问题是,当最小化到任务栏时,我右键单击图标,我希望从那里关闭程序。Win7不允许我通过弹出菜单关闭程序。关闭选项在菜单上,但不起任何作用 如何从任务栏菜单关闭此程序 这似乎是VB6表单子系统中的一个错误——当表单的边框样式设置为任务栏上的无关闭菜单和Alt+F4快捷方式时,只要停止工作,因为表单上没有系统菜单 不幸的是,解决方法涉及

我正在用Win7编程VB6。我有一个无边框窗口的程序,没有标题,没有图标,没有控制框,等等。只有一个窗口。使用命令按钮,我可以最小化任务栏的窗口,并从那里返回它

我的问题是,当最小化到任务栏时,我右键单击图标,我希望从那里关闭程序。Win7不允许我通过弹出菜单关闭程序。关闭选项在菜单上,但不起任何作用


如何从任务栏菜单关闭此程序

这似乎是VB6表单子系统中的一个错误——当表单的
边框样式
设置为任务栏上的无
关闭
菜单和
Alt+F4
快捷方式时,只要停止工作,因为表单上没有系统菜单

不幸的是,解决方法涉及子类化,这里有一种解决方法:

Option Explicit

Private Const WM_SYSCOMMAND             As Long = &H112
Private Const SC_CLOSE                  As Long = &HF060&

Private m_pSubclass As IUnknown

Private Property Get pvAddressOfSubclassProc() As Form1 '-- change Form1 to current form name
    Set pvAddressOfSubclassProc = InitAddressOfMethod(Me, 5)
End Property

Private Sub Form_Load()
    Set m_pSubclass = InitSubclassingThunk(hWnd, Me, pvAddressOfSubclassProc.SubclassProc(0, 0, 0, 0, 0))
End Sub

Public Function SubclassProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Handled As Boolean) As Long
    Select Case wMsg
    Case WM_SYSCOMMAND
        If wParam = SC_CLOSE Then
            Unload Me
            Handled = True
        End If
    End Select
End Function

这将需要将
mdmodernusubclassing.bas
添加到您的项目中,以实现IDE安全的子类化实现。

这似乎是VB6表单子系统中的一个错误——当表单的
边框样式
设置为无
关闭任务栏上的
菜单和
Alt+F4
快捷方式时,请停止工作,因为没有表单上的系统菜单

不幸的是,解决方法涉及子类化,这里有一种解决方法:

Option Explicit

Private Const WM_SYSCOMMAND             As Long = &H112
Private Const SC_CLOSE                  As Long = &HF060&

Private m_pSubclass As IUnknown

Private Property Get pvAddressOfSubclassProc() As Form1 '-- change Form1 to current form name
    Set pvAddressOfSubclassProc = InitAddressOfMethod(Me, 5)
End Property

Private Sub Form_Load()
    Set m_pSubclass = InitSubclassingThunk(hWnd, Me, pvAddressOfSubclassProc.SubclassProc(0, 0, 0, 0, 0))
End Sub

Public Function SubclassProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Handled As Boolean) As Long
    Select Case wMsg
    Case WM_SYSCOMMAND
        If wParam = SC_CLOSE Then
            Unload Me
            Handled = True
        End If
    End Select
End Function

为了IDE安全的子类化实现,这将需要从添加到项目中的
mdmodernusbclassing.bas

QueryLoad或Unload事件中是否有任何逻辑?QueryLoad或Unload事件中是否有任何逻辑?对于这个小项目和我拙劣的标准,这种子类化方法感觉有点过火了爱好编程。但是我很感激这个答案,所以我开始考虑这个问题的更简单的解决方案,也许只是改变窗口界面。这个子类化方法对于这个小项目和我拙劣的业余编程标准来说感觉有点过分了。但我很感激这个答案,所以我开始考虑更简单的解决方案,也许只是改变窗口界面。