Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SROLLBARINFO.rcScrollbar是指滚动条本身或滚动拇指的尺寸_C#_User Interface_Scrollbar - Fatal编程技术网

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

C# SROLLBARINFO.rcScrollbar是指滚动条本身或滚动拇指的尺寸,c#,user-interface,scrollbar,C#,User Interface,Scrollbar,当GetScrollBarInfo()返回此结构时,rcScrollBar是滚动条或滚动拇指的尺寸 更新: GetScrollInfo的另一个结构: SCROLLBARINFO Struct cbSize DWORD rcScrollBar RECT dxyLineButton DWORD xyThumbTop DWORD xyThumbBottom DWORD reserved DWORD rgstate DWORD 6 DUP

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

更新:

GetScrollInfo的另一个结构:

SCROLLBARINFO Struct
    cbSize DWORD 
    rcScrollBar RECT 
    dxyLineButton DWORD
    xyThumbTop DWORD 
    xyThumbBottom DWORD 
    reserved DWORD 
    rgstate DWORD 6 DUP 
SCROLLBARINFO ends
要检测滚动拇指是否位于底部,请说明此公式起作用的原因:

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

nMax、nPos和滚动条rect之间的关系是什么


提前感谢。

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

这是滚动条本身的坐标(如a、so、顶部、左侧、右侧、底部)(请参阅)。为了获得需要执行减法的维度(代码片段是C++,但可以翻译成C):


您还需要确保在正确的坐标系(屏幕或客户端)下工作。我试图找到你从
GetScrollBarInfo
得到的坐标系,但还没有找到。我猜是在客户坐标中,但我无法确认这一点。

好的,谢谢!我不明白的是:这段代码为什么工作:IsAtBottom=(scrlINF.nMax-scrlINF.nPos)<(scrlBarINF.rcScrollBar.Bottom-scrlBarINF.rcScrollBar.Top)其中scrlINF是ScrollInfo,scrlBarINF是ScrollBarInfo,正如我所知,scrlBarINF.rcScrollBar总是相同的,但是nMax和nPos总是会改变的。我相信nMax不应该改变(除非将数据添加到可滚动控件),但nPos会的。nPos指示滚动框的位置。您不需要检查滚动条的大小。如果nPos为nMax,则应位于底部。如果nPos为nMin,则应位于顶部。但是,如果您使用C#工作,我认为您不需要P/调用windows API调用。控件上应具有滚动条。pstrjds:事实上,即使滚动拇指在底部,NPO也不等于nMax。但是根据上面的公式,它是有效的。但我不知道为什么。@Martin-你应该为你的后续问题发布一个新问题。如果你想的话,你可以链接到这里,但最好是每个问题都有自己的帖子。已经有一段时间了我把Windows API滚动条的东西弄乱了,我记得这些值有问题。不幸的是,我写的代码是在我以前的工作中编写的,我现在无法引用。发布一个新的问题,我相信Win32 GUI专家会帮上忙。@Martin-没问题。顺便说一句,你可能想尝试GetScrollPos方法,这将返回rn滚动框的位置。如果该值等于nMax,则它位于底部,无法再滚动。请选中此项
typedef struct tagSCROLLINFO {
  UINT cbSize;
  UINT fMask;
  int  nMin;
  int  nMax;
  UINT nPage;
  int  nPos;
  int  nTrackPos;
} SCROLLINFO, **LPCSCROLLINFO;
RECT coords = info.rcScollBar;
LONG width = coords.right - coords.left;
LONG height = coords.bottom - coords.top;