GraphWnd.h
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:5k
源码类别:

P2P编程

开发平台:

Visual C++

  1. #if !defined(AFX_GRAPHWND_H__F0ED8D7D_618F_4CB4_8DD9_FF9A6C5563C2__INCLUDED_)
  2. #define AFX_GRAPHWND_H__F0ED8D7D_618F_4CB4_8DD9_FF9A6C5563C2__INCLUDED_
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. // GraphWnd.h : header file
  7. //
  8. class CFileDBItem;
  9. class CMonitorWnd;
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CGraphWnd window
  12. class CGraphWnd : public CWnd
  13. {
  14. // Construction
  15. public:
  16. CGraphWnd();
  17. // Attributes
  18. public:
  19. // Operations
  20. public:
  21. void Monitor(CFileDBItem* pFileDBItem);
  22. void ShowGraph(bool bRefreshInfo);
  23. void SetContent(vector<long> vItems);
  24. // Overrides
  25. // ClassWizard generated virtual function overrides
  26. //{{AFX_VIRTUAL(CGraphWnd)
  27. public:
  28. virtual BOOL PreTranslateMessage(MSG* pMsg);
  29. //}}AFX_VIRTUAL
  30. // Implementation
  31. public:
  32. BOOL CreateEx(CWnd* pParent, CRect rc, long lID, long lParam, CMonitorWnd* pMonitorWnd);
  33. virtual ~CGraphWnd();
  34. // Generated message map functions
  35. protected:
  36. //{{AFX_MSG(CGraphWnd)
  37. afx_msg void OnPaint();
  38. afx_msg void OnSize(UINT nType, int cx, int cy);
  39. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  40. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  41. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  42. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  43. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  44. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  45. afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  46. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  47. afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
  48. //}}AFX_MSG
  49. afx_msg void OnMenuitemMonitorSub(UINT uID);
  50. DECLARE_MESSAGE_MAP()
  51. private:
  52. void Refresh();
  53. void SetSubItem(long lSubitemInx, long lVal, CDC *pDC);
  54. void OnSizeChanged(int cx, int cy);
  55. void DrawItem(CDC* pDC = NULL);
  56. void DrawSubItem(CDC* pDC, long lSubitemInx);
  57. COLORREF m_clrBackground; // Control background color
  58. CBitmap m_bmp;
  59. const CSize m_size;
  60. long m_lGridCountV;
  61. long m_lGridCountH;
  62. long m_lBeginInx;
  63. long m_lLineCount;
  64. vector<long> m_vItems;
  65. vector<long> m_vGrids;
  66. CFileDBItem* m_pFileDBItem;
  67. CMonitorWnd* m_pMonitorWnd;
  68. class CMemDC : public CDC {
  69. private:    
  70.     CBitmap  m_bitmap;       // Offscreen bitmap
  71.     CBitmap* m_oldBitmap;    // bitmap originally found in CMemDC
  72.     CDC*     m_pDC;          // Saves CDC passed in constructor
  73.     CRect    m_rect;         // Rectangle of drawing area.
  74.     BOOL     m_bMemDC;       // TRUE if CDC really is a Memory DC.
  75. public:
  76.     
  77.     CMemDC(CDC* pDC, const CRect* pRect = NULL) : CDC()
  78.     {
  79.         ASSERT(pDC != NULL); 
  80.         // Some initialization
  81.         m_pDC = pDC;
  82.         m_oldBitmap = NULL;
  83.         m_bMemDC = !pDC->IsPrinting();
  84.         // Get the rectangle to draw
  85.         if (pRect == NULL) {
  86.             pDC->GetClipBox(&m_rect);
  87.         } else {
  88.             m_rect = *pRect;
  89.         }
  90.         
  91.         if (m_bMemDC) {
  92.             // Create a Memory DC
  93.             CreateCompatibleDC(pDC);
  94.             pDC->LPtoDP(&m_rect);
  95.             m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
  96.             m_oldBitmap = SelectObject(&m_bitmap);
  97.             
  98.             SetMapMode(pDC->GetMapMode());
  99.             pDC->DPtoLP(&m_rect);
  100.             SetWindowOrg(m_rect.left, m_rect.top);
  101.         } else {
  102.             // Make a copy of the relevent parts of the current DC for printing
  103.             m_bPrinting = pDC->m_bPrinting;
  104.             m_hDC       = pDC->m_hDC;
  105.             m_hAttribDC = pDC->m_hAttribDC;
  106.         }
  107.         // Fill background 
  108.         FillSolidRect(m_rect, pDC->GetBkColor());
  109.     }
  110.     
  111.     ~CMemDC()    
  112.     {        
  113.         if (m_bMemDC) {
  114.             // Copy the offscreen bitmap onto the screen.
  115.             m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
  116.                 this, m_rect.left, m_rect.top, SRCCOPY);            
  117.             
  118.             //Swap back the original bitmap.
  119.             SelectObject(m_oldBitmap);        
  120.         } else {
  121.             // All we need to do is replace the DC with an illegal value,
  122.             // this keeps us from accidently deleting the handles associated with
  123.             // the CDC that was passed to the constructor.            
  124.             m_hDC = m_hAttribDC = NULL;
  125.         }    
  126.     }
  127.     
  128.     // Allow usage as a pointer    
  129.     CMemDC* operator->() 
  130.     {
  131.         return this;
  132.     }    
  133.     // Allow usage as a pointer    
  134.     operator CMemDC*() 
  135.     {
  136.         return this;
  137.     }
  138. };
  139. };
  140. /////////////////////////////////////////////////////////////////////////////
  141. //{{AFX_INSERT_LOCATION}}
  142. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  143. #endif // !defined(AFX_GRAPHWND_H__F0ED8D7D_618F_4CB4_8DD9_FF9A6C5563C2__INCLUDED_)