GFWindowStyle/Form1.frm

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   3195
   ClientLeft      =   60
   ClientTop       =   465
   ClientWidth     =   4635
   LinkTopic       =   "Form1"
   ScaleHeight     =   3195
   ScaleWidth      =   4635
   StartUpPosition =   3 'Windows‑Standard
   Begin VB.CheckBox DEBUGVisibleCheck
      Caption         =   "Visible"
      Height          =   195
      Left            =   2400
      TabIndex        =   2
      Top             =   480
      Width           =   2175
   End
   Begin VB.CheckBox DEBUGEnabledCheck
      Caption         =   "Enabled"
      Height          =   195
      Left            =   2400
      TabIndex        =   1
      Top             =   180
      Width           =   2175
   End
   Begin VB.CommandButton Command1
      Caption         =   "Toggle ShowInTaskBar"
      Height          =   735
      Left            =   60
      TabIndex        =   0
      Top             =   60
      Width           =   2235
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'(c)2001 by Louis. Use to change the window style of a window.
'This project also contains further General Functions that use the
'General Function GFWindowStyle[Ex].
'
'GFSetWindowStyle[Ex]
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As LongByVal nIndex As LongByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongByVal nIndex As Long) As Long
'GFShowInTaskBar
Private Declare Function UpdateWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As LongByVal fEnable As Long) As Long
'DEBUG
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As LongByVal nCmdShow As Long) As Long
Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsZoomed Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
'DEBUG
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As AnyByVal cbCopy As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'GFSetWindowStyle[Ex]
Const GWL_STYLE As Long = (‑16)
Const GWL_EXSTYLE = (‑20)
Const WS_BORDER = &H800000
Const WS_CAPTION = &HC00000
Const WS_CHILD = &H40000000
Const WS_CHILDWINDOW = (WS_CHILD)
Const WS_CLIPCHILDREN = &H2000000
Const WS_CLIPSIBLINGS = &H4000000
Const WS_DISABLED = &H8000000
Const WS_DLGFRAME = &H400000
Const WS_GROUP = &H20000
Const WS_HSCROLL = &H100000
Const WS_MAXIMIZE = &H1000000
Const WS_MAXIMIZEBOX = &H10000
Const WS_MINIMIZE = &H20000000
Const WS_MINIMIZEBOX = &H20000
Const WS_ICONIC = WS_MINIMIZE
Const WS_OVERLAPPED = &H0&
Const WS_SYSMENU = &H80000
Const WS_TABSTOP = &H10000
Const WS_THICKFRAME = &H40000
Const WS_SIZEBOX = WS_THICKFRAME
Const WS_VISIBLE = &H10000000
Const WS_VSCROLL = &H200000
Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Const WS_POPUP = &H80000000
Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Const WS_TILED = WS_OVERLAPPED
Const WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW
'GFShowInTaskBar
'Private Const WS_VISIBLE = &H10000000
'Private Const WS_DISABLED = &H8000000
'GFSetWindowStyleEx
Private Const WS_EX_DLGMODALFRAME As Long = &H1
Private Const WS_EX_NOPARENTNOTIFY As Long = &H4
Private Const WS_EX_TOPMOST As Long = &H8
Private Const WS_EX_ACCEPTFILES As Long = &H10
Private Const WS_EX_TRANSPARENT As Long = &H20
Private Const WS_EX_MDICHILD As Long = &H40
Private Const WS_EX_TOOLWINDOW As Long = &H80
Private Const WS_EX_WINDOWEDGE As Long = &H100
Private Const WS_EX_CLIENTEDGE As Long = &H200
Private Const WS_EX_CONTEXTHELP As Long = &H400
Private Const WS_EX_RIGHT As Long = &H1000
Private Const WS_EX_LEFT As Long = &H0
Private Const WS_EX_RTLREADING As Long = &H2000
Private Const WS_EX_LTRREADING As Long = &H0
Private Const WS_EX_LEFTSCROLLBAR As Long = &H4000
Private Const WS_EX_RIGHTSCROLLBAR As Long = &H0
Private Const WS_EX_CONTROLPARENT As Long = &H10000
Private Const WS_EX_STATICEDGE As Long = &H20000
Private Const WS_EX_APPWINDOW As Long = &H40000
'DEBUG
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
Const SC_MAXIMIZE = &HF030
Const SC_MINIMIZE = &HF020
Const SC_RESTORE = &HF120
'DEBUG
Dim ShowInTaskBarFlag As Boolean

Private Sub Form_Load()
    'on error resume next
    Load Me
    ShowInTaskBarFlag = True 'preset
    'Call GFSubClass(Me, "Me", Me, True)
    'Call GFSetWindowStyle(Me.hwnd, WS_SYSMENU, True)
End Sub

Private Sub Form_DblClick()
    'on error resume next
    Unload Me
End Sub

Private Sub Form_Resize()
    'on error resume next
    If Me.WindowState = vbMinimized Then
        Call Command1_Click
    End If
End Sub

Private Sub Command1_Click()
    'on error resume next
'    If DEBUGVisibleCheck.Value = 1 Then
'        Me.Visible = True
'    Else
'        Me.Visible = False
'    End If
'    If DEBUGEnabledCheck.Value = 1 Then
'        Me.Enabled = True
'    Else
'        Me.Enabled = False
'    End If
    ShowInTaskBarFlag = Not ShowInTaskBarFlag
    If (ShowInTaskBarFlag) Then
        Call GFShowInTaskBar(Me.hwnd, True)
    Else
        Call GFShowInTaskBar(Me.hwnd, False)
    End If
    'DoEvents
    'Call Sleep(2000)
    'DoEvents
    'If Not (Me.Enabled) Then Me.Enabled = True
    'If Not (Me.Visible) Then Me.Visible = True
End Sub

Private Sub GFShowInTaskBar(ByVal WindowHandle As LongByVal ShowInTaskBarFlag As Boolean)
    'on error resume next
    Dim IsIconicFlag As Boolean
    Dim IsZoomedFlag As Boolean
    Dim IsEnabledFlag As Boolean
    Dim IsVisibleFlag As Boolean
    'preset
    IsIconicFlag = CBool(IsIconic(WindowHandle))
    IsZoomedFlag = CBool(IsZoomed(WindowHandle))
    IsEnabledFlag = CBool(IsWindowEnabled(WindowHandle))
    IsVisibleFlag = CBool(IsWindowVisible(WindowHandle))
    'begin
    'Call ShowWindow(WindowHandle, vbHide)

    Call GFSetWindowStyleEx(WindowHandle, WS_EX_APPWINDOW, ShowInTaskBarFlag)

    'Call EnableWindow(WindowHandle, 0)
    'Call EnableWindow(WindowHandle, 1)
    'Call UpdateWindow(WindowHandle)
'    If (IsVisibleFlag = True) Then
'        If (IsIconicFlag = False) And (IsZoomedFlag = False) Then
'            Call ShowWindow(WindowHandle, vbNormalFocus)
'        End If
'        If (IsIconicFlag = True) And (IsZoomedFlag = False) Then
'            Call ShowWindow(WindowHandle, vbMinimizedFocus)
'        End If
'        If (IsIconicFlag = False) And (IsZoomedFlag = True) Then
'            Call ShowWindow(WindowHandle, vbMaximizedFocus)
'        End If
'    Else
'        Call ShowWindow(WindowHandle, vbNormalNoFocus)
'    End If
'    If (IsVisibleFlag = True) Then
'        Call GFSetWindowStyle(WindowHandle, WS_VISIBLE, True)
'    Else
'        Call GFSetWindowStyle(WindowHandle, WS_VISIBLE, False)
'    End If
'    If (IsEnabledFlag = True) Then
'        Call GFSetWindowStyle(WindowHandle, WS_DISABLED, False)
'    Else
'        Call GFSetWindowStyle(WindowHandle, WS_DISABLED, True)
'    End If
End Sub

Public Sub GFSubClassWindowProc(ByVal SourceDescription As StringByVal hwnd As LongByVal Msg As LongByVal wParam As LongByVal lParam As LongByRef ReturnValue As LongByRef ReturnValueUsedFlag As Boolean)
    'On Error Resume Next
    If Msg = WM_SYSCOMMAND Then
        'wParam = (wParam And &HFFFF&) ‑ &HFFFF& 'hex number must be of the type Long
        Debug.Print (wParam And &HFFFF)
        'If (wParam And SC_CLOSE) = SC_CLOSE Then Debug.Print "CLOSE"
        'If (wParam And SC_MAXIMIZE) = SC_MAXIMIZE Then Debug.Print "MAXIMIZE"
        'If (wParam And SC_MINIMIZE) = SC_MINIMIZE Then Debug.Print "MINIMIZE"
        'If (wParam And SC_RESTORE) = SC_RESTORE Then Debug.Print "RESTORE"
    End If
End Sub

Private Function GFSetWindowStyle(ByVal WindowHandle As LongByVal Style As LongByVal StyleEnabledFlag As Boolean)
    On Error Resume Next 'use to enable or disable a window style
    Dim WindowStyleMaskOld As Long
    '
    WindowStyleMaskOld = GetWindowLong(WindowHandle, GWL_STYLE)
    '
    If StyleEnabledFlag = True Then
        GFSetWindowStyle = SetWindowLong(WindowHandle, GWL_STYLE, WindowStyleMaskOld Or Style)
    Else
        GFSetWindowStyle = SetWindowLong(WindowHandle, GWL_STYLE, WindowStyleMaskOld And Not Style)
    End If
End Function

Private Function GFSetWindowStyleEx(ByVal WindowHandle As LongByVal StyleEx As LongByVal StyleExEnabledFlag As Boolean)
    On Error Resume Next 'use to enable or disable a window style
    Dim WindowStyleExMaskOld As Long
    '
    WindowStyleExMaskOld = GetWindowLong(WindowHandle, GWL_EXSTYLE)
    '
    If StyleExEnabledFlag = True Then
        GFSetWindowStyleEx = SetWindowLong(WindowHandle, GWL_EXSTYLE, WindowStyleExMaskOld Or StyleEx)
    Else
        GFSetWindowStyleEx = SetWindowLong(WindowHandle, GWL_EXSTYLE, WindowStyleExMaskOld And Not StyleEx)
    End If
End Function

Private Sub Form_Unload(Cancel As Integer)
    'on error resume next
    Call GFSubClass_Terminate
End Sub


[END OF FILE]