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