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

图形图象

开发平台:

Visual C++

  1. //*******************************************************************************
  2. // COPYRIGHT NOTES
  3. // ---------------
  4. // You may use this source code, compile or redistribute it as part of your application 
  5. // for free. You cannot redistribute it as a part of a software development 
  6. // library without the agreement of the author. If the sources are 
  7. // distributed along with the application, you should leave the original 
  8. // copyright notes in the source code without any changes.
  9. // This code can be used WITHOUT ANY WARRANTIES at your own risk.
  10. // 
  11. // For the latest updates to this code, check this site:
  12. // http://www.masmex.com 
  13. // after Sept 2000
  14. // 
  15. // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
  16. //*******************************************************************************
  17. #include "stdafx.h"
  18. #include "UIDragImage.h"
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CDragDropImage
  26. IMPLEMENT_DYNCREATE(CDragDropImage, CCmdTarget)
  27. CDragDropImage::CDragDropImage()
  28. {
  29. }
  30. CDragDropImage::CDragDropImage(int nSelected,int nType) : 
  31. m_nSelected(nSelected),m_nType(nType)
  32. {
  33. }
  34. CDragDropImage::~CDragDropImage()
  35. {
  36. while (!m_itemList.IsEmpty())
  37. {
  38. CDragDropItem *pItem = m_itemList.RemoveHead();
  39. delete pItem;
  40. }
  41. }
  42. void CDragDropImage::AddItem(LPCRECT prcItem,LPCRECT prcIcon)
  43. {
  44. CDragDropItem *pItem = new CDragDropItem(prcItem,prcIcon);
  45. m_itemList.AddHead(pItem);
  46. }
  47. BEGIN_MESSAGE_MAP(CDragDropImage, CCmdTarget)
  48.     //{{AFX_MSG_MAP(CDragDropImage)
  49.         // NOTE - the ClassWizard will add and remove mapping macros here.
  50.     //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CDragDropImage message handlers
  54. void CDragDropImage::DrawDragImage(CDC *pDC, POINT point, POINT ActionPoint)
  55. {
  56. point.x -= ActionPoint.x;
  57. point.y -= ActionPoint.y;
  58. for(POSITION pos=m_itemList.GetTailPosition();pos != NULL;)
  59. {
  60. CDragDropItem *pItem = m_itemList.GetPrev(pos);
  61. DrawItemImage(pDC,point,pItem->m_rcItem,pItem->m_rcIcon);
  62. }
  63. }
  64. // rcItem contains the bounding text
  65. // of an item in thge list control
  66. void CDragDropImage::DrawItemImage(CDC *pDC,POINT point,const CRect &rcItem,const CRect &rcIcon)
  67. {
  68. // Make it the inverse of the screen color.
  69.     int nOldMode = pDC->SetROP2 (R2_NOT); 
  70. // just the outline
  71.     CBrush* pOldBrush = (CBrush*) pDC->SelectStockObject (NULL_BRUSH);
  72. // draw it icon size
  73. pDC->Rectangle (point.x+rcIcon.left, point.y+rcIcon.top, point.x+rcIcon.left + rcIcon.Width(),point.y+rcIcon.top + rcIcon.Height());
  74. pDC->SelectObject (pOldBrush);
  75. // the outline of the text item
  76. CPen pen(PS_DASH,1,GetSysColor(COLOR_BTNTEXT));
  77. CPen *pOldPen = pDC->SelectObject(&pen);
  78. // only in report or list mode
  79. if (m_nType != LVS_ICON && m_nType != LVS_SMALLICON)
  80. {
  81. // draw the line halfway down the icon rectangle
  82. pDC->MoveTo(point.x+rcIcon.left+rcIcon.Width(), point.y+rcIcon.top+(rcIcon.Height()/2));
  83. pDC->LineTo(point.x+rcIcon.left+rcItem.Width(), point.y+rcIcon.top+(rcIcon.Height()/2));
  84. }
  85.     pDC->SelectObject (pOldPen);
  86.     pDC->SetROP2 (nOldMode);
  87. }