SVscrollbar.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. namespace SOUI{
  3. //实现一个只有纵向滚动条皮肤
  4. /*img format: 1-normal, 2-hover, 3-pushdown, 4-disable
  5. 1 2 3 4 //for thumb
  6. 1 2 3 4 //for rail
  7. */
  8. class SSkinVScrollbar : public SSkinScrollbar
  9. {
  10. SOUI_CLASS_NAME(SSkinVScrollbar, L"vscrollbar")
  11. public:
  12. SSkinVScrollbar()
  13. {
  14. m_nStates=4;
  15. }
  16. //不支持显示上下箭头
  17. virtual BOOL HasArrow(){return FALSE;}
  18. virtual int GetIdealSize(){
  19. if(!GetImage()) return 0;
  20. return GetImage()->Width()/m_nStates;
  21. }
  22. protected:
  23. //返回源指定部分在原位图上的位置。
  24. virtual CRect GetPartRect(int nSbCode, int nState,BOOL bVertical)
  25. {
  26. CRect rc;
  27. if(!bVertical
  28. || nSbCode==SB_LINEDOWN
  29. || nSbCode==SB_LINEUP
  30. || nSbCode == SB_CORNOR
  31. || nSbCode==SB_THUMBGRIPPER)
  32. return rc;
  33. if(nState==SBST_INACTIVE && !m_bHasInactive)
  34. {
  35. nState=SBST_NORMAL;
  36. }
  37. SASSERT(GetImage());
  38. rc.right = GetImage()->Width()/m_nStates;
  39. rc.bottom = GetImage()->Height()/2;
  40. rc.OffsetRect(rc.Width()*nState,0);
  41. if(nSbCode == SB_PAGEUP || nSbCode == SB_PAGEDOWN)
  42. {
  43. rc.OffsetRect(0,rc.Height());
  44. }
  45. return rc;
  46. }
  47. };
  48. }