我正在Win7中编程VB6。我有一个带有无边界窗口,没有标题,没有图标,没有控制箱等的程序,只是一个窗口。使用命令按钮,我可以将窗口最小化到任务栏,然后从那里返回。
我的问题是,当最小化到任务栏时,我右键单击该图标,并希望从那里关闭程序。 Win7不允许我通过弹出菜单关闭程序。如何从任务栏菜单关闭该程序?
这似乎是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安全的子类实现。