2011-09-29 38 views
0
SCROLLBARINFO Struct 
    cbSize DWORD 
    rcScrollBar RECT 
    dxyLineButton DWORD 
    xyThumbTop DWORD 
    xyThumbBottom DWORD 
    reserved DWORD 
    rgstate DWORD 6 DUP 
SCROLLBARINFO ends 

當GetScrollBarInfo()返回該結構,rcScrollBar是滾動條或滾動滑塊的尺寸?SROLLBARINFO.rcScrollbar被稱爲滾動條本身或滾動滑塊的dimesion

更新:

從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和滾動條矩形之間的關係是什麼?

在此先感謝。

回答

0

這是滾動條本身的座標(如RECT,所以頂部,左側,右側,底部)(請參閱msdn)。爲了獲得尺寸則需要進行相減(代碼片段是在C++中,但你可以轉換成C#):

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

你也想確保你正確的座標系中工作(屏幕或客戶端)。我試圖找到你從GetScrollBarInfo找回的座標系,但還沒有找到它。我的猜測是它在客戶端座標,但我無法證實這一點。

+0

好的,謝謝!我不明白的是:爲什麼 此代碼: IsAtBottom =(scrlINF.nMax - scrlINF.nPos)<(scrlBarINF.rcScrollBar.Bottom - scrlBarINF.rcScrollBar.Top) 凡ScrlINF是SCROLLINFO,ScrlBarINF是ScrollBarInfo 據我所知,在ScrlBarINF.rcScrollBar將永遠是相同的,但n最大和非營利組織將隨時改變。 –

+0

我相信nMax不應該改變(除非數據被添加到可滾動控件),但nPos會。 nPos指示滾動框的位置。你不需要檢查滾動條的大小。如果nPos在nMax,那麼你應該在底部。如果nPos在nMin你應該在最上面。如果你用C#工作,我認爲你不需要P/Invoke windows API調用。控件上應該有滾動條的屬性。 – pstrjds

+0

pstrjds:事實上,即使滾動拇指在底部,nPos也不等於nMax。但有了上面的公式,它的工作原理。但我不知道爲什麼。 –

0

它的滾動條的尺寸,而不是大拇指。