【问题标题】:'Close' option is not available when program minimized to the taskbar?程序最小化到任务栏时“关闭”选项不可用?
【发布时间】:2020-04-03 17:22:44
【问题描述】:

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

我的问题是,当最小化到任务栏时,我右键单击图标,我希望从那里关闭程序。 Win7不会让我通过弹出菜单关闭程序。关闭选项在菜单上,但它什么也没做。

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

【问题讨论】:

  • QueryUnload 或 Unload 事件中有什么逻辑吗?

标签: windows-7 vb6 taskbar


【解决方案1】:

这似乎是 VB6 表单子系统中的一个错误——当表单的 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

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

【讨论】:

  • 这种子类化方法对于这个小项目和我的业余爱好编程标准来说有点矫枉过正。不过很感谢这个回答,于是开始思考更简单的解决这个问题的办法,或许只是换个窗口界面。
猜你喜欢
  • 2015-08-22
  • 2013-07-14
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
相关资源
最近更新 更多