GetScrollInfo (user32)
Last changed: -202.74.138.1

.
Summary

C# Signature:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);

VB.Net Signature:

<DllImport("user32.dll", SetLastError:=True)> _
Public Function GetScrollInfo(hWnd As IntPtr, _
        <MarshalAs(UnmanagedType.I4)>fnBar As SBOrientation, _
        <MarshalAs(UnmanagedType.Struct)>ByRef lpsi As SCROLLINFO) As Integer
End Function

VB Signature:

Declare Function GetScrollInfo Lib "user32" (ByVal hWnd As IntPtr, ByVal fnBar As ScrollBarDirection, ByRef lpsi As SCROLLINFO) As Integer

C# User-Defined Types:

SCROLLINFO, SBOrientation, ScrollInfoMask

Notes:

None.

Tips & Tricks:

Please add some!

C# Sample Code:

// Returns the width of a UserControl containing a RichTextBox
//  such that no horizontal scrollbar will be needed
public int PreferredWidth
{
    get
    {
      int MINWIDTH = 200;
      int BORDERWIDTH = SystemInformation.Border3DSize.Width;
      int SCROLLBARWIDTH = SystemInformation.VerticalScrollBarWidth;

      SCROLLINFO si = new SCROLLINFO();
      si.cbSize = Marshal.SizeOf( si );
      si.fMask = (int) ScrollInfoMask.SIF_RANGE;
      GetScrollInfo( RichTextBox1.Handle, (int) ScrollBarDirection.SB_HORZ, ref si );

      int iWidth = si.nMax - si.nMin + 2 * BORDERWIDTH + SCROLLBARWIDTH + 2;    
      return Math.Max( MINWIDTH, iWidth );
    }
}

VB Sample Code:

    Private Function GetScrollBarPageSize(ByVal hWnd As IntPtr, ByVal fnBar As Integer) As Integer
    Dim si As New SCROLLINFO
    With si
        .cbSize = Len(si)
        .fMask = ScrollInfoMask.SIF_PAGE
    End With
    Dim lRet As Integer = GetScrollInfo(hWnd, fnBar, si)
    If lRet <> 0 Then
        Return si.nPage
    Else
        Return -1
    End If
    End Function

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
SeeAlso