AUTOSCROLLVIEW.CPP
上传用户:shgx688
上传日期:2009-12-27
资源大小:855k
文件大小:4k
源码类别:

SNMP编程

开发平台:

MultiPlatform

  1. // AutoScrollView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "OAM.h"
  5. #include "AutoScrollView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAutoScrollView
  13. IMPLEMENT_DYNCREATE(CAutoScrollView, CScrollView)
  14. CAutoScrollView::CAutoScrollView()
  15. {
  16. m_bIsScrolling = FALSE;
  17. }
  18. CAutoScrollView::~CAutoScrollView()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CAutoScrollView, CScrollView)
  22. //{{AFX_MSG_MAP(CAutoScrollView)
  23. ON_WM_LBUTTONDOWN()
  24. //}}AFX_MSG_MAP
  25. END_MESSAGE_MAP()
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CAutoScrollView drawing
  28. void CAutoScrollView::OnInitialUpdate()
  29. {
  30. CScrollView::OnInitialUpdate();
  31. CSize sizeTotal;
  32. // TODO: calculate the total size of this view
  33. sizeTotal.cx = sizeTotal.cy = 100;
  34. SetScrollSizes(MM_TEXT, sizeTotal);
  35. }
  36. void CAutoScrollView::OnDraw(CDC* pDC)
  37. {
  38. CDocument* pDoc = GetDocument();
  39. // TODO: add draw code here
  40. }
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CAutoScrollView diagnostics
  43. #ifdef _DEBUG
  44. void CAutoScrollView::AssertValid() const
  45. {
  46. CScrollView::AssertValid();
  47. }
  48. void CAutoScrollView::Dump(CDumpContext& dc) const
  49. {
  50. CScrollView::Dump(dc);
  51. }
  52. #endif //_DEBUG
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CAutoScrollView message handlers
  55. void CAutoScrollView::AutoScrollView(UINT nRefMessage)
  56. {
  57. HCURSOR hCur;
  58. hCur = AfxGetApp()->LoadCursor(IDC_HANDCUR);//AFX_IDC_HSPLITBAR);
  59. SetCursor(hCur);
  60. m_bIsScrolling = TRUE;
  61. MSG msg;
  62. CPoint ptScrollPos;
  63. CPoint ptDevScrollPos;
  64. CPoint ptCursorPos;
  65. CRect rc;
  66. long dx,dy;
  67. SIZE sizeTotal;
  68. SIZE sizePage;
  69. SIZE sizeLine;
  70. int nMapMode;
  71. int nMapFactor;
  72. int xMin,xMax;
  73. int yMin,yMax;
  74. /////
  75. CPoint ptOldCursorPos;
  76. GetCursorPos(&ptOldCursorPos);
  77. ScreenToClient(&ptOldCursorPos);
  78. /////
  79. msg.message = 0;
  80. SetCapture();
  81. GetDeviceScrollSizes(nMapMode,sizeTotal,sizePage,sizeLine);
  82. GetScrollRange(SB_HORZ,&xMin,&xMax);
  83. GetScrollRange(SB_VERT,&yMin,&yMax);
  84. while(msg.message != nRefMessage)
  85. {
  86. if(PeekMessage(&msg,0,0,0,PM_REMOVE))
  87. {
  88. TranslateMessage(&msg);
  89. DispatchMessage(&msg);
  90. }
  91. if(msg.message != WM_MOUSEMOVE)
  92. continue;
  93. ptScrollPos = GetScrollPosition();
  94. ptDevScrollPos = GetDeviceScrollPosition();
  95. GetCursorPos(&ptCursorPos);
  96. ScreenToClient(&ptCursorPos);
  97. GetClientRect(&rc);
  98. dx = 0l;
  99. dy = 0l;
  100. //////////////
  101. dx = ptOldCursorPos.x - ptCursorPos.x;
  102. if(dx < 0 && sizeTotal.cx <= rc.Width())
  103. dx = 0;
  104. else if(dx > 0 && (ptDevScrollPos.x < xMin || sizeTotal.cx <= rc.Width()))
  105. dx = 0;
  106. dy = ptOldCursorPos.y - ptCursorPos.y;
  107. if(dy < 0 && sizeTotal.cy <= rc.Height())
  108. dy = 0;
  109. else if(dy > 0 && (ptDevScrollPos.y < yMin || sizeTotal.cy <= rc.Height()))
  110. dy = 0;
  111. ptOldCursorPos = ptCursorPos;
  112. //////////////
  113. /*
  114. if((ptCursorPos.y<0)&&(ptDevScrollPos.y != yMin))
  115. dy = min(-sizeLine.cy,max(-sizePage.cy,
  116. (ptCursorPos.y/10)*sizeLine.cy));
  117. else if ((ptCursorPos.y>rc.bottom)&&(ptDevScrollPos.y!=yMax))
  118. dy = max(sizeLine.cy,min(sizePage.cy,
  119. ((ptCursorPos.y-rc.bottom)/10)*sizeLine.cy));
  120. if((ptCursorPos.x<0)&&(ptDevScrollPos.x != xMin))
  121. dx = min(-sizeLine.cx,max(-sizePage.cx,
  122. (ptCursorPos.x/10)*sizeLine.cx));
  123. else if ((ptCursorPos.x>rc.right)&&(ptDevScrollPos.x!=xMax))
  124. dx = max(sizeLine.cx,min(sizePage.cx,
  125. ((ptCursorPos.x-rc.right)/10)*sizeLine.cx));
  126. */
  127. //////////////////////
  128. if((dx != 0)||(dy != 0))
  129. {
  130. nMapFactor = (nMapMode == MM_TEXT)?1:-1;
  131. ptScrollPos.y += (int)dy*nMapFactor;
  132. ptScrollPos.x += (int)dx;
  133. // m_bIsScrolling = TRUE;
  134. // OnAutoScroll(ptCursorPos,TRUE);
  135. ScrollToPosition(ptScrollPos);
  136. // OnAutoScroll(ptCursorPos,FALSE);
  137. }
  138. else
  139. {
  140. // m_bIsScrolling = FALSE;
  141. }
  142. }
  143. ReleaseCapture();
  144. m_bIsScrolling = FALSE;
  145. }
  146. void CAutoScrollView::OnLButtonDown(UINT nFlags, CPoint point) 
  147. {
  148. // TODO: Add your message handler code here and/or call default
  149. AutoScrollView(WM_LBUTTONUP);
  150. CScrollView::OnLButtonDown(nFlags, point);
  151. }