SROLLBARINFO.rcScrollbar指的是滚动条本身或滚动条的尺寸

本文关键字:滚动条 rcScrollbar SROLLBARINFO | 更新日期: 2023-09-27 18:09:59

SCROLLBARINFO Struct
    cbSize DWORD 
    rcScrollBar RECT 
    dxyLineButton DWORD
    xyThumbTop DWORD 
    xyThumbBottom DWORD 
    reserved DWORD 
    rgstate DWORD 6 DUP 
SCROLLBARINFO ends

当GetScrollBarInfo()返回这个结构,rcScrollBar是滚动条或滚动拇指的尺寸?

更新:

GetScrollInfo:

中的另一个结构
typedef struct tagSCROLLINFO {
  UINT cbSize;
  UINT fMask;
  int  nMin;
  int  nMax;
  UINT nPage;
  int  nPos;
  int  nTrackPos;
} SCROLLINFO, **LPCSCROLLINFO;

要检测滚动拇指是否在底部,为什么这个公式工作:

IsAtBottom = (si。nMax - si.nPos) <(sbi.rcScrollBar。bottom - sbi.rcScrollBar.top)

nMax, nPos和滚动条矩形之间的关系是什么?

SROLLBARINFO.rcScrollbar指的是滚动条本身或滚动条的尺寸

它是滚动条本身的坐标(作为RECT,即上,左,右,下)(参见msdn)。为了得到维度,你需要执行减法(代码片段是c++,但你可以转换为c#):

RECT coords = info.rcScollBar;
LONG width = coords.right - coords.left;
LONG height = coords.bottom - coords.top;

您还需要确保您在正确的坐标系(屏幕或客户端)中工作。我试着找出你从GetScrollBarInfo得到的坐标系统但是还没找到。我猜它是在客户端坐标,但我不能确认这一点。

这是滚动条的尺寸而不是拇指的尺寸