Я нашел эту ссылку WPF_Example , но она написана в WPF.Я не программирую в WPF, я делаю это в Windows Forms, и у меня нет реальной причины хотеть встроить WPF RichTextBox в мое приложение просто для получения нужного мне ответа.
Нет ли способа,используя WindowsForms (НЕ WPF), чтобы выяснить, находится ли большой палец полосы прокрутки RichTextBox в нижней части полосы прокрутки?
Цель этого состоит в том, чтобы позволить нашим пользователям, которые просматривают чат в RTFполе, чтобы прокрутить вверх, и когда текст добавлен, НЕ ПРОКРУТАТЬ вниз, если они прокручиваются вверх.Подумайте, как mIRC управляет чатом;если вы находитесь в нижней части окна чата, текст автоматически прокручивается в поле зрения;если вы переместитесь даже на одну строку вверх, текст будет добавлен без необходимости прокрутки.
Мне нужно повторить это.Я нашел эту ссылку здесь на SO: List_ViewScroll , но я не уверен, применима ли она в этом случае.
Любая помощь будет очень полезна:)
РАЗРЕШЕНИЕ
Используя этот класс, я смог заставить его работать.Большое спасибо человеку ниже, который указал на это, и разъяснил некоторые части этого:
internal class Scrollinfo
{
public const uint ObjidVscroll = 0xFFFFFFFB;
[DllImport("user32.dll", SetLastError = true, EntryPoint = "GetScrollBarInfo")]
private static extern int GetScrollBarInfo(IntPtr hWnd,
uint idObject,
ref Scrollbarinfo psbi);
internal static bool CheckBottom(RichTextBox rtb)
{
var info = new Scrollbarinfo();
info.CbSize = Marshal.SizeOf(info);
var res = GetScrollBarInfo(rtb.Handle,
ObjidVscroll,
ref info);
var isAtBottom = info.XyThumbBottom > (info.RcScrollBar.Bottom - info.RcScrollBar.Top - (info.DxyLineButton*2));
return isAtBottom;
}
}
public struct Scrollbarinfo
{
public int CbSize;
public Rect RcScrollBar;
public int DxyLineButton;
public int XyThumbTop;
public int XyThumbBottom;
public int Reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public int[] Rgstate;
}
public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}