VB6表单控件

问题描述 投票:0回答:1

我正在Win7中编程VB6。我有一个带有无边界窗口,没有标题,没有图标,没有控制箱等的程序,只是一个窗口。使用命令按钮,我可以将窗口最小化到任务栏,然后从那里返回。

我的问题是,当最小化到任务栏时,我右键单击该图标,并希望从那里关闭程序。 Win7不允许我通过弹出菜单关闭程序。如何从任务栏菜单关闭该程序?

windows-7 vb6 taskbar
1个回答
0
投票

这似乎是VB6 Forms子系统中的一个错误-当窗体的BorderStyle在任务栏上没有设置为Close菜单,并且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

这需要将mdModernSubclassing.bas中的Moderen Subclassing Thunk repository添加到项目中以实现IDE安全的子类实现。

© www.soinside.com 2019 - 2024. All rights reserved.