TColumnBitmap.cpp
上传用户:maicowu
上传日期:2007-01-02
资源大小:87k
文件大小:5k
源码类别:

TreeView控件

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon 
  4.   Revised on 5/21/98 1:51:04 PM
  5.   Comments: TColumnBitmap.cpp: implementation of the CTColumnBitmap class.
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "TColumnBitmap.h"
  9. #include <wingdi.h>
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char THIS_FILE[]=__FILE__;
  13. #define new DEBUG_NEW
  14. #endif
  15. //////////////////////////////////////////////////////////////////////
  16. // Construction/Destruction
  17. //////////////////////////////////////////////////////////////////////
  18. COLORREF CTColumnBitmap::m_crMaskedColor = RGB(0,255,0);
  19. // Function name : CTColumnBitmap::Init
  20. // Description     : Initialize bitmap size and index
  21. // Return type : void 
  22. // Argument         : int nImageWidth ; bitmap width
  23. // Argument         : int nImageHeight ; bitmap height
  24. // Argument         : int nRowImage ; bitmap index
  25. void CTColumnBitmap::Init(int nImageWidth, int nImageHeight, int nRowImage)
  26. {
  27. m_nImageWidth = nImageWidth;
  28. m_nImageHeight = nImageHeight;
  29. m_nRowImage = nRowImage;
  30. }
  31. // Function name : CTColumnBitmap::CTColumnBitmap
  32. // Description     : constructor
  33. // Return type : -
  34. CTColumnBitmap::CTColumnBitmap()
  35. {
  36. Init(0,0,0);
  37. m_bLoad = false;
  38. ASSERT(false);
  39. }
  40. // Function name : CTColumnBitmap::CTColumnBitmap
  41. // Description     : constructor
  42. // Return type : -
  43. // Argument         : UINT nIDResource ; resource identifier
  44. // Argument         : int nImageWidth ; bitmap width
  45. // Argument         : int nImageHeight ; bitmap height
  46. // Argument         : int nRowImage ; bitmap index
  47. CTColumnBitmap::CTColumnBitmap(UINT nIDResource, int nImageWidth , int nImageHeight , int nRowImage )
  48. {
  49. if (m_bLoad = m_bitmap.LoadBitmap(nIDResource))
  50. Init(nImageWidth, nImageHeight, nRowImage);
  51. }
  52. // Function name : CTColumnBitmap::~CTColumnBitmap
  53. // Description     : destructor
  54. // Return type : -
  55. CTColumnBitmap::~CTColumnBitmap()
  56. {
  57. if (m_bLoad)
  58. m_bitmap.DeleteObject();
  59. }
  60. // Function name : CTColumnBitmap::GetRectImage
  61. // Description     : get bitmap rect
  62. // Return type : CRect ; bimap rect
  63. // Argument         : int nColumn ; column to get bitmap from
  64. CRect CTColumnBitmap::GetRectImage(int nColumn)
  65. {
  66. return CRect(CPoint(nColumn * m_nImageWidth, m_nRowImage * m_nImageHeight), CSize(m_nImageWidth, m_nImageHeight));
  67. }
  68. // Function name : CTColumnBitmap::IsLoad
  69. // Description     : tells if is any bitmap loaded
  70. // Return type : BOOL ; TRUE if so
  71. BOOL CTColumnBitmap::IsLoad() const
  72. {
  73. return m_bLoad;
  74. }
  75. // Function name : CTColumnBitmap::GetBitmap
  76. // Description     : get bitmap address
  77. // Return type : CBitmap* ; in fact the address of m_bitmap member
  78. CBitmap* CTColumnBitmap::GetBitmap() 
  79. {
  80. return &m_bitmap;
  81. }
  82. // Function name : CTColumnBitmap::Put
  83. // Description     : put a bitmap into a client DC
  84. // Return type : void 
  85. // Argument         : int nColumn ; bitmap column
  86. // Argument         : CDC * pDC ; client DC
  87. // Argument         : int x ; x position
  88. // Argument         : int y ; y position
  89. // Argument         : int dxMax ; x size?
  90. void CTColumnBitmap::Put(int nColumn, CDC * pDC, int x, int y, int dxMax)
  91. {
  92. CDC memDC, maskDC, tempDC;
  93. if (maskDC.CreateCompatibleDC(pDC))
  94. if (memDC.CreateCompatibleDC(pDC))
  95. if (tempDC.CreateCompatibleDC(pDC))
  96. {
  97. CRect rect = GetRectImage(nColumn);
  98. int nHeight = rect.Height();
  99. int nWidth = min(rect.Width(),dxMax);
  100. int xImage = rect.left;
  101. int yImage = rect.top;
  102. // Create a compatible bitmap with pDC in memDC, for copy image from bitmap source
  103. CBitmap bmpImage, maskBitmap;
  104. bmpImage.CreateCompatibleBitmap( pDC, nWidth, nHeight );
  105. CBitmap* pOldBitmapMem = memDC.SelectObject( &bmpImage );
  106. CBitmap* pOldBitmapTemp = tempDC.SelectObject(GetBitmap());
  107. memDC.BitBlt( 0,0, nWidth, nHeight, &tempDC, xImage, yImage , SRCCOPY );
  108. COLORREF f= memDC.GetPixel(27,30);
  109. // memDC contain image of bitmap which must be view in pDC.
  110. // Create monochrome bitmap for the mask
  111. maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL );
  112. CBitmap*  pOldBitmapMask = maskDC.SelectObject( &maskBitmap );
  113. memDC.SetBkColor( m_crMaskedColor );
  114. // Create the mask from the memDC
  115. maskDC.BitBlt( 0, 0, nWidth, nHeight, &memDC, 0, 0, SRCCOPY );
  116. // Set the background in memDC to black. Using SRCPAINT with black 
  117. // and any other color results in the other color, thus making 
  118. // black the transparent color
  119. memDC.SetBkColor(RGB(0,0,0));
  120. memDC.SetTextColor(RGB(255,255,255));
  121. memDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
  122. // Set the foreground to black. See comment above.
  123. COLORREF oldBkColor = pDC->SetBkColor(RGB(255,255,255));
  124. COLORREF oldFgColor = pDC->SetTextColor(RGB(0,0,0));
  125. pDC->BitBlt(x, y, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
  126. pDC->BitBlt(x, y, nWidth, nHeight, &memDC, 0, 0, SRCPAINT);
  127. pDC->SetBkColor(oldBkColor);
  128. pDC->SetTextColor(oldFgColor);
  129. maskDC.SelectObject( pOldBitmapMask );
  130. tempDC.SelectObject( pOldBitmapTemp );
  131. memDC.SelectObject( pOldBitmapMem );
  132. }
  133. }
  134. // Function name : CTColumnBitmap::GetWidth
  135. // Description     : Return the width of image
  136. // Return type : int 
  137. int CTColumnBitmap::GetWidth()
  138. {
  139. return m_nImageWidth;
  140. }