Опция «Закрыть» недоступна, когда программа свернута на панель задач? - PullRequest
1 голос
/ 03 апреля 2020

Я программирую VB6 в Win7. У меня есть программа с окном без полей, без заголовка, без значка, без элемента управления и т. Д. c. просто окно. Используя командную кнопку, я могу свернуть окно до панели задач и вернуть его обратно.

Моя проблема в том, что при сворачивании на панель задач я щелкаю правой кнопкой мыши по значку и нажимаю sh, чтобы закрыть программу оттуда. Win7 не позволяет мне закрыть программу через всплывающее меню. Параметр закрытия есть в меню, но он ничего не делает.

Как закрыть эту программу из меню панели задач?

1 Ответ

4 голосов
/ 05 апреля 2020

Похоже, что это ошибка в подсистеме 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 из Модернизированное подклассификация Thunk хранилище добавлено в ваш проект для реализации создания безопасного подкласса IDE.

...