coolsb_mfctestView.cpp
上传用户:xhri001
上传日期:2022-07-04
资源大小:99k
文件大小:6k
源码类别:

界面编程

开发平台:

Visual C++

  1. // coolsb_mfctestView.cpp : implementation of the CCoolsb_mfctestView class
  2. //
  3. #include "stdafx.h"
  4. #include "coolsb_mfctest.h"
  5. #include "coolsb_mfctestDoc.h"
  6. #include "coolsb_mfctestView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // Cool Scroll support
  14. #include "..coolsbcoolscroll.h"
  15. //#pragma comment(linker, "/NODEFAULTLIB:LIBCD")
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CCoolsb_mfctestView
  18. IMPLEMENT_DYNCREATE(CCoolsb_mfctestView, CView)
  19. BEGIN_MESSAGE_MAP(CCoolsb_mfctestView, CView)
  20. //{{AFX_MSG_MAP(CCoolsb_mfctestView)
  21. ON_WM_VSCROLL()
  22. ON_WM_HSCROLL()
  23. ON_WM_CREATE()
  24. ON_WM_SIZE()
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CCoolsb_mfctestView construction/destruction
  29. CCoolsb_mfctestView::CCoolsb_mfctestView()
  30. {
  31. // TODO: add construction code here
  32. xChar = 10;
  33. yChar = 10;
  34. nVNumLines = 50;
  35. nHNumLines = 50;
  36. nVScrollPos = 0;
  37. nHScrollPos = 0;
  38. }
  39. CCoolsb_mfctestView::~CCoolsb_mfctestView()
  40. {
  41. }
  42. BOOL CCoolsb_mfctestView::PreCreateWindow(CREATESTRUCT& cs)
  43. {
  44. // TODO: Modify the Window class or styles here by modifying
  45. //  the CREATESTRUCT cs
  46. return CView::PreCreateWindow(cs);
  47. }
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CCoolsb_mfctestView drawing
  50. void CCoolsb_mfctestView::OnDraw(CDC* pDC)
  51. {
  52. CCoolsb_mfctestDoc* pDoc = GetDocument();
  53. ASSERT_VALID(pDoc);
  54. // TODO: add draw code for native data here
  55. }
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CCoolsb_mfctestView diagnostics
  58. #ifdef _DEBUG
  59. void CCoolsb_mfctestView::AssertValid() const
  60. {
  61. CView::AssertValid();
  62. }
  63. void CCoolsb_mfctestView::Dump(CDumpContext& dc) const
  64. {
  65. CView::Dump(dc);
  66. }
  67. CCoolsb_mfctestDoc* CCoolsb_mfctestView::GetDocument() // non-debug version is inline
  68. {
  69. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCoolsb_mfctestDoc)));
  70. return (CCoolsb_mfctestDoc*)m_pDocument;
  71. }
  72. #endif //_DEBUG
  73. /////////////////////////////////////////////////////////////////////////////
  74. // CCoolsb_mfctestView message handlers
  75. void CCoolsb_mfctestView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  76. {
  77. // TODO: Add your message handler code here and/or call default
  78. switch(nSBCode)
  79. {
  80. case SB_LINEUP: nVScrollPos --; break;
  81. case SB_LINEDOWN: nVScrollPos ++; break;
  82. case SB_PAGEUP: nVScrollPos -= nVScrollPage; break;
  83. case SB_PAGEDOWN: nVScrollPos += nVScrollPage; break;
  84. case SB_TOP: nVScrollPos = 0; break;
  85. case SB_BOTTOM: nVScrollPos = nVScrollMax -1; break;
  86. case SB_THUMBTRACK: nVScrollPos = nPos; break;
  87. }
  88. if(nVScrollPos < 0) 
  89. nVScrollPos = 0;
  90. if(nVScrollPos > nVScrollMax - nVScrollPage + 1) 
  91. nVScrollPos = nVScrollMax - nVScrollPage + 1;
  92. CoolSB_SetScrollPos(m_hWnd, SB_VERT, nVScrollPos, TRUE);
  93. //CView::OnVScroll(nSBCode, nPos, pScrollBar);
  94. }
  95. void CCoolsb_mfctestView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  96. {
  97. // TODO: Add your message handler code here and/or call default
  98. switch(nSBCode)
  99. {
  100. case SB_LINEUP: nHScrollPos --; break;
  101. case SB_LINEDOWN: nHScrollPos ++; break;
  102. case SB_PAGEUP: nHScrollPos -= nHScrollPage; break;
  103. case SB_PAGEDOWN: nHScrollPos += nHScrollPage; break;
  104. case SB_TOP: nHScrollPos = 0; break;
  105. case SB_BOTTOM: nHScrollPos = nHScrollMax -1; break;
  106. case SB_THUMBTRACK: nHScrollPos = nPos; break;
  107. }
  108. if(nHScrollPos < 0) 
  109. nHScrollPos = 0;
  110. if(nHScrollPos > nHScrollMax - nHScrollPage + 1) 
  111. nHScrollPos = nHScrollMax - nHScrollPage + 1;
  112. CoolSB_SetScrollPos(m_hWnd, SB_HORZ, nHScrollPos, TRUE);
  113. // CView::OnHScroll(nSBCode, nPos, pScrollBar);
  114. }
  115. void CCoolsb_mfctestView::SetupScrollbars()
  116. {
  117. SCROLLINFO si;
  118. RECT rect;
  119. GetClientRect(&rect);
  120. // VERT
  121. nVScrollPage = min(nVNumLines + 1, (rect.bottom - rect.top) / yChar);
  122. nVScrollMax  = max(0, nVNumLines );
  123.     nVScrollPos  = min(nVScrollPos, nVScrollMax - nVScrollPage + 1);
  124. si.cbSize = sizeof(si);
  125. si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_DISABLENOSCROLL;
  126. si.nMin = 0;
  127. si.nMax = nVScrollMax;
  128. si.nPos = nVScrollPos;
  129. si.nPage = min(nVScrollPage, nVScrollMax + 1);
  130. CoolSB_SetScrollInfo (m_hWnd, SB_VERT, &si, TRUE);
  131. // HORZ
  132. nHScrollPage = min(nHNumLines + 1, (rect.right - rect.left) / xChar);
  133. nHScrollMax  = max(0, nHNumLines);
  134.     nHScrollPos  = min(nHScrollPos, nHScrollMax - nHScrollPage + 1);
  135. si.cbSize = sizeof(si);
  136. si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE | SIF_DISABLENOSCROLL;
  137. si.nMin = 0;
  138. si.nMax = nHScrollMax;
  139. si.nPos = nHScrollPos;
  140. si.nPage = min(nHScrollPage, nHScrollMax + 1);
  141. CoolSB_SetScrollInfo (m_hWnd, SB_HORZ, &si, TRUE);
  142. }
  143. int CCoolsb_mfctestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  144. {
  145. if (CView::OnCreate(lpCreateStruct) == -1)
  146. return -1;
  147. // TODO: Add your specialized creation code here
  148. InitializeCoolSB(m_hWnd);
  149. SCROLLINFO si;
  150. si.cbSize = sizeof(si);
  151. si.fMask  = SIF_ALL;
  152. si.nMin   = 0;
  153. si.nMax   = 100;
  154. si.nPage  = 10;
  155. si.nPos   = 0;
  156. CoolSB_SetScrollInfo(m_hWnd, SB_HORZ, &si, TRUE);
  157. CoolSB_SetScrollInfo(m_hWnd, SB_VERT, &si, TRUE);
  158. CoolSB_SetStyle(m_hWnd, SB_BOTH, CSBS_FLAT);
  159. return 0;
  160. }
  161. void CCoolsb_mfctestView::OnSize(UINT nType, int cx, int cy) 
  162. {
  163. CView::OnSize(nType, cx, cy);
  164. // TODO: Add your message handler code here
  165. SetupScrollbars();
  166. }