PreView.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:4k
源码类别:

图形图象

开发平台:

Visual C++

  1. // PreView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "flt_mass.h"
  5. #include "PreView.h"
  6. #include "Resource.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CPreView
  14. CPreView::CPreView()
  15. {
  16. CPreView::RegisterWndClass(AfxGetInstanceHandle());
  17. pItem=NULL;
  18. }
  19. CPreView::~CPreView()
  20. {
  21. int nCount = m_items.GetSize();
  22. for (int i = 0; i < nCount; i++)
  23. delete m_items.GetAt(i);
  24. m_items.RemoveAll();
  25. }
  26. BEGIN_MESSAGE_MAP(CPreView, CStatic)
  27. //{{AFX_MSG_MAP(CPreView)
  28. ON_WM_PAINT()
  29. ON_WM_MOUSEMOVE()
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CPreView message handlers
  34. BOOL CPreView::RegisterWndClass(HINSTANCE hInstance)
  35. {
  36. WNDCLASS wc;
  37. wc.lpszClassName = "PREVIEW_CTRL"; // matches class name in client
  38. wc.hInstance = hInstance;
  39. wc.lpfnWndProc = ::DefWindowProc;
  40. wc.hCursor = ::LoadCursor(NULL, MAKEINTRESOURCE(IDC_MOVE_UP));
  41. wc.hIcon = 0;
  42. wc.lpszMenuName = NULL;
  43. wc.hbrBackground = (HBRUSH) ::GetStockObject(LTGRAY_BRUSH);
  44. wc.style = CS_GLOBALCLASS; // To be modified
  45. wc.cbClsExtra = 0;
  46. wc.cbWndExtra = 0;//WS_BORDER | SS_OWNERDRAW;
  47. return (::RegisterClass(&wc) != 0);
  48. }
  49. BOOL CPreView::InitControl(int width, int height)
  50. {
  51. pItem = new CPreViewObj;
  52. pItem->m_nPosX =0;
  53. pItem->m_nPosY =0;
  54. try 
  55. {
  56. m_items.Add(pItem);
  57. this->SetWindowPos(this,0,0,width,height,SWP_NOMOVE|SWP_NOZORDER|
  58. SWP_SHOWWINDOW|SWP_NOACTIVATE);
  59. InvalidateCtrl();
  60. return TRUE;
  61. }
  62. catch (CMemoryException* e)
  63. {
  64. if (pItem !=NULL) 
  65. delete pItem;
  66. e->Delete();
  67. return FALSE;
  68. }
  69. }
  70. int CPreView::GetPos_X()
  71. {
  72. return pItem->m_nPosX;
  73. }
  74. int CPreView::GetPos_Y()
  75. {
  76. return pItem->m_nPosY;
  77. }
  78. void CPreView::InvalidateCtrl()
  79. {
  80. CClientDC dc(this);
  81. CRect rcClient;
  82. pItem = m_items.GetAt(0);
  83. GetClientRect(rcClient);
  84. if (m_MemDC.GetSafeHdc() == NULL)
  85. {
  86. m_MemDC.CreateCompatibleDC(&dc);
  87. m_Bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
  88. m_MemDC.SelectObject(m_Bitmap);
  89. // draw scale
  90. m_MemDC.SetBkColor(RGB(255,255,255));
  91. CBrush bkBrush;
  92. bkBrush.CreateSysColorBrush(COLOR_ACTIVEBORDER);
  93. m_MemDC.FillRect(rcClient,&bkBrush);
  94. }
  95. InvalidateRect(rcClient, FALSE);
  96. }
  97. void CPreView::OnPaint() 
  98. {
  99. CPaintDC dc(this); // device context for painting
  100. // TODO: Add your message handler code here
  101. CRect rcClient;
  102. GetClientRect(rcClient);
  103. // draw scale
  104. if (m_MemDC.GetSafeHdc() != NULL)
  105. dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &m_MemDC, 0, 0, SRCCOPY);
  106. // Do not call CStatic::OnPaint() for painting messages
  107. }
  108. void CPreView::OnMouseMove(UINT nFlags, CPoint point) 
  109. {
  110. // TODO: Add your message handler code here and/or call default
  111. /* CRect rcClient;
  112. GetClientRect(rcClient);
  113. pItem->m_nPosX =point.x-rcClient.left;
  114. pItem->m_nPosY =point.y-rcClient.top;
  115. static HANDLE hCursor;
  116. hCursor=GetCursor();
  117. if(nFlags==MK_LBUTTON)
  118. {
  119. SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_MOVE_DOWN)));
  120. }
  121. else
  122. {
  123. SetCursor((HICON)hCursor);
  124. }
  125. */
  126. CStatic::OnMouseMove(nFlags, point);
  127. }
  128. /////////////////////////////////////////////////////////////////////////////
  129. // CPreView
  130. CPreView::CPreView()
  131. {
  132. }
  133. CPreView::~CPreView()
  134. {
  135. }
  136. BEGIN_MESSAGE_MAP(CPreView, CStatic)
  137. //{{AFX_MSG_MAP(CPreView)
  138. // NOTE - the ClassWizard will add and remove mapping macros here.
  139. //}}AFX_MSG_MAP
  140. END_MESSAGE_MAP()
  141. /////////////////////////////////////////////////////////////////////////////
  142. // CPreView message handlers