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

对话框与窗口

开发平台:

Visual C++

  1. // ExcelEditCtrl.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME CONTROLS 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 "ExcelTab.h"
  22. #include "ExcelEditCtrl.h"
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CExcelEditCtrl
  30. CExcelEditCtrl::CExcelEditCtrl()
  31. {
  32. }
  33. CExcelEditCtrl::~CExcelEditCtrl()
  34. {
  35. }
  36. BEGIN_MESSAGE_MAP(CExcelEditCtrl, CEdit)
  37. //{{AFX_MSG_MAP(CExcelEditCtrl)
  38. ON_WM_HSCROLL()
  39. ON_WM_CREATE()
  40. ON_WM_SIZE()
  41. ON_CONTROL_REFLECT(EN_UPDATE, OnUpdate)
  42. ON_WM_KEYDOWN()
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CExcelEditCtrl message handlers
  47. void CExcelEditCtrl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  48. {
  49. if (m_ScrollBarH.m_hWnd  &&
  50. pScrollBar->GetSafeHwnd() == m_ScrollBarH.m_hWnd)
  51. {
  52. SCROLLINFO si;
  53. ZeroMemory(&si, sizeof(si));
  54. si.cbSize = sizeof(si);
  55. si.fMask = SIF_PAGE;
  56. m_ScrollBarH.GetScrollInfo(&si);
  57. int x = m_ScrollBarH.GetScrollPos();
  58. switch (nSBCode)
  59. {
  60. case SB_TOP:
  61. x = 0;
  62. break;
  63. case SB_BOTTOM:
  64. x = INT_MAX;
  65. break;
  66. case SB_LINEUP:
  67. x--;
  68. break;
  69. case SB_LINEDOWN:
  70. x++;
  71. break;
  72. case SB_PAGEUP:
  73. x -= si.nPage;
  74. break;
  75. case SB_PAGEDOWN:
  76. x += si.nPage;
  77. break;
  78. case SB_THUMBTRACK:
  79. x = nPos;
  80. break;
  81. }
  82. si.nPos = x;
  83. si.fMask = SIF_POS;
  84. m_ScrollBarH.SetScrollInfo(&si);
  85. }
  86. CEdit::OnHScroll(nSBCode, nPos, pScrollBar);
  87. }
  88. CScrollBar* CExcelEditCtrl::GetScrollBarCtrl(int nBar) const
  89. {
  90. if (nBar == SB_HORZ)
  91. {
  92. CScrollBar *pSB = (CScrollBar *)&m_ScrollBarH;
  93. SCROLLINFO si;
  94. ZeroMemory(&si, sizeof(si));
  95. si.cbSize = sizeof(si);
  96. if (m_ScrollBarH.m_hWnd == NULL)
  97. {
  98. pSB->Create(WS_CHILD, CRect(0, 0, 0, 0), (CWnd *)this, 0);
  99. si.fMask = SIF_ALL;
  100. if (::GetScrollInfo(m_hWnd, SB_HORZ, &si))
  101. {
  102. pSB->SetScrollInfo (&si);
  103. }
  104. }
  105. else
  106. {
  107. si.fMask = SIF_RANGE | SIF_POS;
  108. ::SendMessage(m_hWnd, WM_SETREDRAW, FALSE, 0);
  109. ::ShowScrollBar(m_hWnd, SB_HORZ, TRUE);
  110. ::GetScrollInfo(m_hWnd, SB_HORZ, &si);
  111. ::ShowScrollBar(m_hWnd, SB_HORZ, FALSE);
  112. ::SendMessage(m_hWnd, WM_SETREDRAW, TRUE, 0);
  113. pSB->SetScrollInfo (&si);
  114. }
  115. return pSB;
  116. }
  117. return CEdit::GetScrollBarCtrl(nBar);
  118. }
  119. int CExcelEditCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
  120. {
  121. if (CEdit::OnCreate(lpCreateStruct) == -1)
  122. return -1;
  123. return 0;
  124. }
  125. void CExcelEditCtrl::OnSize(UINT nType, int cx, int cy)
  126. {
  127. CEdit::OnSize(nType, cx, cy);
  128. if (m_ScrollBarH.m_hWnd)
  129. {
  130. SCROLLINFO si;
  131. ZeroMemory(&si, sizeof(si));
  132. si.cbSize = sizeof(si);
  133. CRect r;
  134. GetClientRect(r);
  135. si.fMask = SIF_PAGE;
  136. si.nPage = r.Width() - 1;
  137. m_ScrollBarH.SetScrollInfo(&si);
  138. }
  139. }
  140. void CExcelEditCtrl::OnUpdate()
  141. {
  142. CXTExcelTabCtrl *pParent = (CXTExcelTabCtrl *)GetParent();
  143. ASSERT_KINDOF(CXTExcelTabCtrl, pParent);
  144. pParent->SyncScrollBar();
  145. }
  146. void CExcelEditCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
  147. {
  148. CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
  149. OnUpdate();
  150. }