William Benson (VBACreations.Com)
vbacreations at gmail.com
Sat Jun 8 12:21:19 CDT 2013
I am positioning controls based on the form's windowwidth value, trying to
establish how wide a control should be based on contents, right-flush based
on its required width and the form's windowwidth property. I am finding that
the vertical scrollbar does appears or does not appear according to
necessity, but this does not affect the windowwidth property.
I either need a way to detect if the vertical scrollbar is present and
adjust for its width, or I need a different property to use for usable width
of a form (can't find such a property).
Any help out there? I have tried the function I am posting below but it is
not telling me there is a vertical scrollbar.
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const GWL_HWNDPARENT = (-8)
Private Const WS_HSCROLL = &H100000
Private Const WS_VSCROLL = &H200000
Function GetScrollStatus(frm As Form) As Long
'frm.Hwnd
Dim wndStyle As Long
' Retrieve the window style of the control.
wndStyle = GetWindowLong(frm.hwnd, GWL_STYLE)
' Test if the horizontal scroll bar style is present
' in the window style, indicating that a horizontal
' scroll bar is visible.
If (wndStyle And WS_HSCROLL) <> 0 Then
GetScrollStatus = 1 'A horizontal scroll bar is visible."
End If
' Test if the vertical scroll bar style is present
' in the window style, indicating that a vertical
' scroll bar is visible.
If (wndStyle And WS_VSCROLL) <> 0 Then 'FALSE EVEN WHEN FRM HAS A
VERTICAL SCROLLBAR SHOWING
GetScrollStatus = GetScrollStatus + 2
End If
End Function