XTPControlScrollBar.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPControlScrollBar.cpp : implementation of the CXTPControlScrollBar class.
  2. //
  3. // This file is a part of the XTREME COMMANDBARS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "Common/XTPDrawHelpers.h"
  22. #include "Common/XTPPropExchange.h"
  23. #include "XTPControlScrollBar.h"
  24. #include "XTPPaintManager.h"
  25. #include "XTPCommandBar.h"
  26. #ifdef _DEBUG
  27. #undef THIS_FILE
  28. static char THIS_FILE[]=__FILE__;
  29. #define new DEBUG_NEW
  30. #endif
  31. //////////////////////////////////////////////////////////////////////
  32. // Construction/Destruction
  33. //////////////////////////////////////////////////////////////////////
  34. IMPLEMENT_XTP_CONTROL(CXTPControlScrollBar, CXTPControl)
  35. CXTPControlScrollBar::CXTPControlScrollBar()
  36. {
  37. m_nWidth = 150;
  38. m_spi.fVert = FALSE;
  39. m_nMax = 100;
  40. m_nMin = 0;
  41. m_nPos = 0;
  42. m_nPage = 0;
  43. m_scrollBarStyle = xtpScrollStyleDefault;
  44. }
  45. CXTPControlScrollBar::~CXTPControlScrollBar()
  46. {
  47. }
  48. void CXTPControlScrollBar::Copy(CXTPControl* pControl, BOOL bRecursive)
  49. {
  50. CXTPControl::Copy(pControl, bRecursive);
  51. CXTPControlScrollBar* pControlScrollBar = DYNAMIC_DOWNCAST(CXTPControlScrollBar, pControl);
  52. if (!pControlScrollBar)
  53. return;
  54. SetRange(pControlScrollBar->m_nMin, pControlScrollBar->m_nMax);
  55. SetPos(pControlScrollBar->GetPos());
  56. m_nPage = pControlScrollBar->m_nPage;
  57. m_scrollBarStyle = pControlScrollBar->m_scrollBarStyle;
  58. }
  59. void CXTPControlScrollBar::DoPropExchange(CXTPPropExchange* pPX)
  60. {
  61. CXTPControl::DoPropExchange(pPX);
  62. PX_Int(pPX, _T("Min"), m_nMin, 0);
  63. PX_Int(pPX, _T("Max"), m_nMax, 100);
  64. PX_Int(pPX, _T("Pos"), m_nPos, 0);
  65. PX_Enum(pPX, _T("ScrollBarStyle"), m_scrollBarStyle, xtpScrollStyleDefault);
  66. }
  67. CSize CXTPControlScrollBar::GetSize(CDC* /*pDC*/)
  68. {
  69. if (m_spi.fVert)
  70. {
  71. return CSize(GetScrollBarPaintManager()->m_cxVScroll + 4, GetWidth());
  72. }
  73. return CSize(GetWidth(), GetScrollBarPaintManager()->m_cyHScroll + 4);
  74. }
  75. void CXTPControlScrollBar::Draw(CDC* pDC)
  76. {
  77. if (!m_pSBTrack || !m_pSBTrack->bTrackThumb)
  78. SetupScrollInfo();
  79. GetScrollBarPaintManager()->DrawScrollBar(pDC, this);
  80. }
  81. void CXTPControlScrollBar::SetPos(int nPos)
  82. {
  83. if (m_pSBTrack != NULL)
  84. return;
  85. m_nPos = nPos;
  86. RedrawParent(FALSE);
  87. }
  88. int CXTPControlScrollBar::GetPos() const
  89. {
  90. return m_nPos;
  91. }
  92. void CXTPControlScrollBar::SetRange( int nMin, int nMax)
  93. {
  94. if ((m_nMin != nMin) || (m_nMax != nMax))
  95. {
  96. m_nMin = nMin;
  97. m_nMax = nMax;
  98. RedrawParent(FALSE);
  99. }
  100. }
  101. BOOL CXTPControlScrollBar::HasFocus() const
  102. {
  103. return m_pSBTrack != NULL;
  104. }
  105. void CXTPControlScrollBar::OnCalcDynamicSize(DWORD dwMode)
  106. {
  107. m_spi.fVert = (dwMode & LM_VERTDOCK);
  108. }
  109. void CXTPControlScrollBar::OnClick(BOOL bKeyboard, CPoint point)
  110. {
  111. if (IsCustomizeMode() && !bKeyboard)
  112. {
  113. m_pParent->SetPopuped(-1);
  114. m_pParent->SetSelected(-1);
  115. CustomizeStartDrag(point);
  116. }
  117. else if (!bKeyboard)
  118. {
  119. PerformTrackInit(m_pParent->m_hWnd, point, &m_spi, (GetKeyState(VK_SHIFT) < 0) ? TRUE : FALSE);
  120. }
  121. }
  122. void CXTPControlScrollBar::OnScroll(UINT nSBCode, UINT nPos)
  123. {
  124. int nCurPos = GetPos();
  125. switch (nSBCode)
  126. {
  127. case SB_TOP: nCurPos = 0; break;
  128. case SB_BOTTOM: nCurPos = m_nMax; break;
  129. case SB_LINEUP: nCurPos = max(nCurPos - 1, 0); break;
  130. case SB_LINEDOWN: nCurPos = min(nCurPos + 1, m_nMax); break;
  131. case SB_THUMBTRACK: nCurPos = nPos; break;
  132. case SB_PAGEUP: nCurPos = max(nCurPos - m_nMax / 10, 0); break;
  133. case SB_PAGEDOWN: nCurPos = min(nCurPos + m_nMax / 10, m_nMax); break;
  134. }
  135. if (nCurPos == m_nPos)
  136. return;
  137. m_nPos = nCurPos;
  138. RedrawParent(FALSE);
  139. NotifySite(CBN_XTP_EXECUTE);
  140. }
  141. //////////////////////////////////////////////////////////////////////////
  142. // CXTPControlScrollBar::Base
  143. CRect CXTPControlScrollBar::GetScrollBarRect()
  144. {
  145. CRect rcItem(GetRect());
  146. rcItem.DeflateRect(2, 2, 2, 2);
  147. if (m_pParent->GetType() == xtpBarTypePopup && m_pParent->GetPosition() == xtpBarPopup)
  148. {
  149. CXTPPaintManager* pPaintManager = GetPaintManager();
  150. rcItem.left += pPaintManager->GetPopupBarGripperWidth(GetParent())
  151. + pPaintManager->m_nPopupBarTextPadding - 2;
  152. }
  153. return rcItem;
  154. }
  155. void CXTPControlScrollBar::GetScrollInfo(SCROLLINFO* psi)
  156. {
  157. psi->cbSize = sizeof(SCROLLINFO);
  158. psi->fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
  159. psi->nMax = m_nMax;
  160. psi->nMin = m_nMin;
  161. psi->nPage = m_nPage;
  162. psi->nPos = m_nPos;
  163. }
  164. BOOL CXTPControlScrollBar::IsScrollBarEnabled() const
  165. {
  166. return GetEnabled();
  167. }
  168. CWnd* CXTPControlScrollBar::GetParentWindow() const
  169. {
  170. return m_pParent;
  171. }
  172. CXTPScrollBarPaintManager* CXTPControlScrollBar::GetScrollBarPaintManager() const
  173. {
  174. return m_scrollBarStyle == xtpScrollStyleSlider ?
  175. (CXTPScrollBarPaintManager*)GetPaintManager()->GetSliderPaintManager() :
  176. (CXTPScrollBarPaintManager*)GetPaintManager()->GetGalleryPaintManager();
  177. }
  178. void CXTPControlScrollBar::DoScroll(int cmd, int pos)
  179. {
  180. OnScroll(cmd, pos);
  181. }
  182. void CXTPControlScrollBar::RedrawScrollBar()
  183. {
  184. RedrawParent(FALSE);
  185. }
  186. void CXTPControlScrollBar::OnMouseMove(CPoint point)
  187. {
  188. int ht = HitTestScrollBar(point);
  189. if (ht != m_spi.ht)
  190. {
  191. m_spi.ht = ht;
  192. RedrawParent(FALSE);
  193. }
  194. }