MyImage.cpp
上传用户:hbytqc8
上传日期:2014-07-31
资源大小:527k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. // MyImage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NetMap.h"
  5. #include "MyImage.h"
  6. #include "MainFrm.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CMyImage
  14. CMyImage::CMyImage()
  15. {
  16. port=false;
  17. move=false;
  18. init_x=0;
  19. init_y=0;
  20. MyPos.x=0;
  21. MyPos.y=0;
  22. HSelf=NULL;
  23. ArrayIndex=0;
  24. }
  25. CMyImage::~CMyImage()
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CMyImage, CStatic)
  29. //{{AFX_MSG_MAP(CMyImage)
  30. ON_WM_CONTEXTMENU()
  31. ON_WM_LBUTTONDOWN()
  32. ON_WM_LBUTTONUP()
  33. ON_WM_MOUSEMOVE()
  34. ON_WM_PAINT()
  35. //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CMyImage message handlers
  39. void CMyImage::OnContextMenu(CWnd* pWnd, CPoint point) 
  40. CMenu pop;
  41. pop.LoadMenu(IDR_MENU1);
  42. CMenu * popup=pop.GetSubMenu(0);
  43. if (port==true) 
  44. popup=pop.GetSubMenu(1);
  45. CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
  46. popup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,pMain);
  47. pMain->HSelect=HSelf;
  48. if (port==true)
  49. pMain->SeletedIndex=ArrayIndex;
  50. }
  51. void CMyImage::OnLButtonDown(UINT nFlags, CPoint point) 
  52. {
  53. // TODO: Add your message handler code here and/or call default
  54. if (port==false)
  55. {
  56. move=true;
  57. init_x=point.x;
  58. init_y=point.y;
  59. }
  60. CStatic::OnLButtonDown(nFlags, point);
  61. }
  62. void CMyImage::OnLButtonUp(UINT nFlags, CPoint point) 
  63. {
  64. // TODO: Add your message handler code here and/or call default
  65. if (port==false)
  66. {  
  67. if (move==true)
  68. {
  69. move=false;
  70. GetParent()->RedrawWindow();
  71. }
  72. }
  73. CStatic::OnLButtonUp(nFlags, point);
  74. }
  75. void CMyImage::OnMouseMove(UINT nFlags, CPoint point) 
  76. {
  77. // TODO: Add your message handler code here and/or call default
  78. if (port==false)
  79. {
  80. if (move)
  81. {
  82. int x1,y1;
  83. CRect cr; 
  84. GetWindowRect(cr);
  85. CRect c(cr);
  86. GetParent()->ScreenToClient(c);
  87. x1=c.left;
  88. y1=c.top;
  89. MoveWindow(x1+(point.x-init_x),y1+(point.y-init_y),55,35);
  90. }
  91. }
  92. CStatic::OnMouseMove(nFlags, point);
  93. }
  94. void CMyImage::OnPaint() 
  95. {
  96.    if (port==true)
  97. {
  98. CStatic::OnPaint();
  99. }
  100. HBITMAP l_hbmpBitmap = GetBitmap() ;
  101. if( l_hbmpBitmap == NULL )
  102. {
  103. Default() ;
  104. return ;
  105. }
  106. CPaintDC l_PaintDC( this ) ;
  107. ////////////////////////////////////////////////////////////////////////////
  108. // Prepare everything for drawing
  109. ////////////////////////////////////////////////////////////////////////////
  110. CRect l_rcClient ;
  111. GetClientRect( &l_rcClient ) ;
  112. CDC  l_BufferDC ;
  113.  l_BufferDC.CreateCompatibleDC( &l_PaintDC ) ;
  114. CBitmap  l_BufferBitmap ;
  115.  l_BufferBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
  116. CBitmap* l_pOldBufferBitmap = l_BufferDC.SelectObject( &l_BufferBitmap ) ;
  117. CDC  l_MaskDC ;
  118.  l_MaskDC.CreateCompatibleDC( &l_PaintDC ) ;
  119. CBitmap  l_MaskBitmap ;
  120.  l_MaskBitmap.CreateBitmap( l_rcClient.Width(), l_rcClient.Height(), 1, 1, NULL ) ;
  121. CBitmap* l_pOldMaskBitmap = l_MaskDC.SelectObject( &l_MaskBitmap ) ;
  122. #define ROP4_TRANSPARENTBLIT 0xCCAA0020
  123. #define SRCMASK 0x00220326
  124. ////////////////////////////////////////////////////////////////////////////
  125. // Fill with transparent color
  126. ////////////////////////////////////////////////////////////////////////////
  127. l_BufferDC.FillSolidRect( &l_rcClient, RGB( 255, 0, 255 ) ) ;
  128. ////////////////////////////////////////////////////////////////////////////
  129. // Blit the bitmap to the buffer
  130. ////////////////////////////////////////////////////////////////////////////
  131. CDC  l_MemoryDC ;
  132.  l_MemoryDC.CreateCompatibleDC( &l_PaintDC ) ;
  133. CBitmap* l_pOldMemoryBitmap = l_MemoryDC.SelectObject( CBitmap::FromHandle( l_hbmpBitmap ) ) ;
  134. l_BufferDC.BitBlt( 0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_MemoryDC, 0, 0, SRCCOPY ) ;
  135. l_MemoryDC.SelectObject( l_pOldMemoryBitmap ) ;
  136. ////////////////////////////////////////////////////////////////////////////
  137. // Create the mask.
  138. ////////////////////////////////////////////////////////////////////////////
  139. COLORREF l_crOldBack = l_BufferDC.SetBkColor( RGB( 255, 0, 255 ) ) ;
  140. l_MaskDC.BitBlt( 0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC, 0, 0, SRCCOPY ) ;
  141. l_BufferDC.SetBkColor( l_crOldBack ) ;
  142. ////////////////////////////////////////////////////////////////////////////
  143. // Draw the bitmap transparently now, since not all devices support this
  144. // and Windows 98 does not (duh?), if this fails, we do it the long way.
  145. ////////////////////////////////////////////////////////////////////////////
  146. if( ! l_PaintDC.MaskBlt( 0, 
  147.  0, 
  148.      l_rcClient.Width(),
  149.      l_rcClient.Height(),
  150.      &l_BufferDC,
  151.      0,
  152.      0,
  153.      l_MaskBitmap,
  154.      0,
  155.      0,
  156.      ROP4_TRANSPARENTBLIT ) )
  157. {
  158. CDC  l_CopyDC ;
  159.  l_CopyDC.CreateCompatibleDC( &l_PaintDC ) ;
  160. CBitmap  l_CopyBitmap ;
  161.  l_CopyBitmap.CreateCompatibleBitmap( &l_PaintDC, l_rcClient.Width(), l_rcClient.Height() ) ;
  162. CBitmap* l_pOldCopyBitmap = l_CopyDC.SelectObject( &l_CopyBitmap ) ;
  163. l_CopyDC.BitBlt(   0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_PaintDC,  0, 0, SRCCOPY  ) ;
  164. l_CopyDC.BitBlt(   0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,   0, 0, SRCAND   ) ;
  165. l_BufferDC.BitBlt( 0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_MaskDC,   0, 0, SRCMASK  ) ;
  166. l_CopyDC.BitBlt(   0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_BufferDC, 0, 0, SRCPAINT ) ;
  167. l_PaintDC.BitBlt(  0, 0, l_rcClient.Width(), l_rcClient.Height(), &l_CopyDC,   0, 0, SRCCOPY  ) ;
  168. l_CopyDC.SelectObject( l_pOldCopyBitmap ) ;
  169. }
  170. ////////////////////////////////////////////////////////////////////////////
  171. // Clean up.
  172. ////////////////////////////////////////////////////////////////////////////
  173. l_MaskDC.SelectObject( l_pOldMaskBitmap ) ;
  174. l_BufferDC.SelectObject( l_pOldBufferBitmap ) ;
  175.    
  176. }