标准滚动条算法

转自:http://blog.csdn.net/tdgx2004/article/details/5864784

wKioL1VupxaCLysSAAA-ouPlBrw244.gif 


#define MINSIZE 20

OnSize(O,G,D,H)
{
  if (H>D)
  {
    if ((H-O)<D)
    {
      O=H-D
      SetViewOffset(-O)
    }

    由 B:G=D:H 得 B=GD/H

    if (B<MINSIZE) B=MINSIZE

    由 P:(G-B)=O:(H-D) 得 P=O(G-B)/(H-D)

    SetScrollButtonTop(P)
    SetScrollButtonHeight(B)

    if(!IsScrollVisible())
    {
      ShowScroll()
    }
  }
  else
  {
    SetViewOffset(-O)
    HideScroll()
  }
  ReDraw()
}

OnScroll(G,D,H,P,B)
{
  由 P:(G-B)=O:(H-D) 得 O=P(H-D)/(G-B)
  SetViewOffset(-O)
  ReDraw()
}


你可能感兴趣的:(滚动条)