我需要將 ScrollBars 設定為,ForcedBoth但我也想知道 ScrollBars 的句柄何時可見并且用戶可以滾動。
兩個滾動條的布林值都可以
此處用戶無法滾動:

在這里,他們可以:

我嘗試GetScrollInfo使用 Win32 API,但在放大 RichTextBox 或一次洗掉一堆行時會導致結果不一致。
uj5u.com熱心網友回復:
如果這實際上是您需要了解 RichTextBox 的 ScrollBars 狀態的資訊,請使用GetScrollBarInfo()獲取此資訊,然后測驗存盤在rgstate回傳的SCROLLBARINFO結構的組件中的值。
當 ScrollBar 被禁用時,rgstate[0]設定為STATE_SYSTEM_UNAVAILABLE; 在這種情況下,索引 2(頁面元素)處的值應設定為STATE_SYSTEM_INVISIBLE。
當 ScrollBar 不存在時,相同的值是STATE_SYSTEM_INVISIBLE
否則,它是0(這里,設定為SBIdObj.STATE_SYSTEM_AVAILABLE = 0x00000000)
可用于測驗 ScrollBars 的示例方法。稱它為,例如,
var result = GetScrollBarsState(myRichTextBox.Handle);
它回傳一個命名元組,其中兩個 ScrollBars 的狀態都設定為當前 SBIdObj值
public (SBRgState Vertical, SBRgState Horizontal) GetScrollBarsEnabled(IntPtr controlHandle)
{
var sbi = new SCROLLBARINFO() { cbSize = Marshal.SizeOf<SCROLLBARINFO>() };
bool result = GetScrollBarsState(controlHandle, SBIdObj.OBJID_VSCROLL, ref sbi);
if (!result) throw new Exception("Failed to retrieve vertical ScrollBar info");
var vert = (SBRgState)sbi.rgstate[0];
result = GetScrollBarInfo(controlHandle, SBIdObj.OBJID_HSCROLL, ref sbi);
if (!result) throw new Exception("Failed to retrieve horizontal ScrollBar info");
return (vert, (SBRgState)sbi.rgstate[0]);
}
宣告:
[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool GetScrollBarInfo(IntPtr hWnd, SBIdObj idObject, ref SCROLLBARINFO psbi);
[StructLayout(LayoutKind.Sequential)]
public struct SCROLLBARINFO {
public int cbSize;
public Rectangle rcScrollBar;
public int dxyLineButton;
public int xyThumbTop;
public int xyThumbBottom;
public int reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public int[] rgstate;
}
// GetScrollBarInfo idObject
public enum SBIdObj : uint {
OBJID_HSCROLL = 0xFFFFFFFA,
OBJID_VSCROLL = 0xFFFFFFFB,
OBJID_CLIENT = 0xFFFFFFFC
}
// SCROLLBARINFO rgstate flags
[Flags]
public enum SBRgState {
STATE_SYSTEM_AVAILABLE = 0x00000000,
STATE_SYSTEM_UNAVAILABLE = 0x00000001,
STATE_SYSTEM_PRESSED = 0x00000008,
STATE_SYSTEM_INVISIBLE = 0x00008000,
STATE_SYSTEM_OFFSCREEN = 0x00010000,
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512744.html
