[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetScrollInfo(IntPtr hwnd, int fnBar, ref SCROLLINFO lpsi);
<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
Declare Function GetScrollInfo Lib "user32" (ByVal hWnd As IntPtr, ByVal fnBar As ScrollBarDirection, ByRef lpsi As SCROLLINFO) As Integer
SCROLLINFO, SBOrientation, ScrollInfoMask
None.
Please add some!
// 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 );
    } 
}
    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
Do you know one? Please contribute it!
