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

SNMP编程

开发平台:

MultiPlatform

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 7/22/98 9:21:30 AM
  5.   Comments: DragPage.h header file for CDragPage
  6.  ************************************/
  7. #if !defined(AFX_DRAGPAGE_H__91E4A9F5_1FA5_11D2_864F_0040055C08D9__INCLUDED_)
  8. #define AFX_DRAGPAGE_H__91E4A9F5_1FA5_11D2_864F_0040055C08D9__INCLUDED_
  9. #if _MSC_VER >= 1000
  10. #pragma once
  11. #endif // _MSC_VER >= 1000
  12. class CSheetsWnd;
  13. struct SRectSave
  14. {
  15. private:
  16. CRect m_rectBMP;
  17. CBitmap* m_pBMPSave;
  18. CDC* m_pDC;
  19. public:
  20. // Function name : SRectSave
  21. // Description     : Default constructor of this structure
  22. // Return type : 
  23. SRectSave()
  24. {
  25. m_pDC = NULL;
  26. m_pBMPSave = NULL;
  27. m_rectBMP.SetRectEmpty();
  28. }
  29. // Function name : ~SRectSave
  30. // Description     : virtual default destructor, will destroy created bitmap for you.
  31. // Return type : virtual 
  32. virtual ~SRectSave()
  33. {
  34. Destroy();
  35. }
  36. // Function name : Destroy
  37. // Description     : Destroy all saved.
  38. // Return type : void 
  39. void Destroy()
  40. {
  41. if (m_pBMPSave)
  42. {
  43. m_pBMPSave->DeleteObject();
  44. delete m_pBMPSave;
  45. }
  46. m_pBMPSave = NULL;
  47. m_pDC = NULL;
  48. m_rectBMP.SetRectEmpty();
  49. }
  50. // Function name : Restore
  51. // Description     : Restore the zone saved in m_pBMPSave at m_rectBMP in m_pDC, if all OK
  52. // Return type : void 
  53. void Restore()
  54. {
  55. if (m_pBMPSave && m_pBMPSave->GetSafeHandle())
  56. if (!m_rectBMP.IsRectEmpty())
  57. {
  58. m_pDC = CDC::FromHandle(::GetDC(NULL));
  59. CDC dc;
  60. VERIFY(dc.CreateCompatibleDC(m_pDC));
  61. CBitmap* pOldBitmap = dc.SelectObject(m_pBMPSave);
  62.  m_pDC->BitBlt(m_rectBMP.left, m_rectBMP.top, m_rectBMP.Width(), m_rectBMP.Height(), &dc, 0, 0 , SRCCOPY);
  63. dc.SelectObject(pOldBitmap);
  64. ::ReleaseDC(NULL, m_pDC->m_hDC);
  65. }
  66. Destroy();
  67. }
  68. // Function name : Save
  69. // Description     : Save the zone rectBMP from pDC
  70. // Return type : void 
  71. // Argument         : CRect rectBMP
  72. void Save(CRect rectBMP)
  73. {
  74. // Must call Restore before call Save()
  75. ASSERT ( NULL == m_pBMPSave );
  76. ASSERT ( m_rectBMP.IsRectEmpty() );
  77. ASSERT ( !rectBMP.IsRectEmpty());
  78. if (m_pBMPSave = new CBitmap())
  79. {
  80. m_pDC = CDC::FromHandle(::GetDC(NULL));
  81. m_rectBMP = rectBMP;
  82. VERIFY(m_pBMPSave->CreateCompatibleBitmap(m_pDC, m_rectBMP.Width(), m_rectBMP.Height()));
  83. CDC dc;
  84. VERIFY(dc.CreateCompatibleDC(m_pDC));
  85. CBitmap* pOldBitmap = dc.SelectObject(m_pBMPSave);
  86.  dc.BitBlt(0,0, m_rectBMP.Width(), m_rectBMP.Height(), m_pDC, m_rectBMP.left, m_rectBMP.top, SRCCOPY);
  87. dc.SelectObject(pOldBitmap);
  88. ::ReleaseDC(NULL, m_pDC->m_hDC);
  89. }
  90. }
  91. // Function name : SRectSave::IsChanged
  92. // Description     : Return TRUE if something must changed
  93. // Return type : BOOL 
  94. // Argument         : CPoint ptnNew
  95. BOOL SRectSave::IsChanged(CPoint ptnNew)
  96. {
  97. return !(m_rectBMP.TopLeft() == ptnNew);
  98. }
  99. };
  100. class CDragPage
  101. {
  102. protected:
  103. BOOL m_bDragging;
  104. CWnd* m_pViewStartDrag;
  105. CWnd* m_pViewTrackDrag;
  106. public:
  107. virtual void SetTrackDrag(CWnd* pWnd);
  108. CWnd* GetTrackDrag() { return m_pViewTrackDrag; };
  109. CWnd* GetStartDrag() { return m_pViewStartDrag; };
  110. CDragPage();
  111. CDragPage(CDragPage& dragSource);
  112. virtual ~CDragPage();
  113. void Set(BOOL bDragging = FALSE, CWnd* pViewStartDrag = NULL);
  114. void Reset();
  115. BOOL IsDragging();
  116. void Draw(CSheetsWnd* pSheet);
  117. private:
  118. SRectSave* m_pRectSave;
  119. };
  120. #endif //AFX_DRAGPAGE_H__91E4A9F5_1FA5_11D2_864F_0040055C08D9__INCLUDED_