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

ActiveX/DCOM/ATL

开发平台:

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. }
  39. // Function name : CTColumnBitmap::CTColumnBitmap
  40. // Description     : constructor
  41. // Return type : -
  42. // Argument         : UINT nIDResource ; resource identifier
  43. // Argument         : int nImageWidth ; bitmap width
  44. // Argument         : int nImageHeight ; bitmap height
  45. // Argument         : int nRowImage ; bitmap index
  46. CTColumnBitmap::CTColumnBitmap(UINT nIDResource, int nImageWidth , int nImageHeight , int nRowImage )
  47. {
  48. if (m_bLoad = m_bitmap.LoadBitmap(nIDResource))
  49. Init(nImageWidth, nImageHeight, nRowImage);
  50. }
  51. // Function name : CTColumnBitmap::~CTColumnBitmap
  52. // Description     : destructor
  53. // Return type : -
  54. CTColumnBitmap::~CTColumnBitmap()
  55. {
  56. if (m_bLoad)
  57. m_bitmap.DeleteObject();
  58. }
  59. // Function name : CTColumnBitmap::GetRectImage
  60. // Description     : get bitmap rect
  61. // Return type : CRect ; bimap rect
  62. // Argument         : int nColumn ; column to get bitmap from
  63. CRect CTColumnBitmap::GetRectImage(int nColumn)
  64. {
  65. return CRect(CPoint(nColumn * m_nImageWidth, m_nRowImage * m_nImageHeight), CSize(m_nImageWidth, m_nImageHeight));
  66. }
  67. // Function name : CTColumnBitmap::IsLoad
  68. // Description     : tells if is any bitmap loaded
  69. // Return type : BOOL ; TRUE if so
  70. BOOL CTColumnBitmap::IsLoad() const
  71. {
  72. return m_bLoad;
  73. }
  74. // Function name : CTColumnBitmap::GetBitmap
  75. // Description     : get bitmap address
  76. // Return type : CBitmap* ; in fact the address of m_bitmap member
  77. CBitmap* CTColumnBitmap::GetBitmap() 
  78. {
  79. return &m_bitmap;
  80. }
  81. // Function name : CTColumnBitmap::Put
  82. // Description     : put a bitmap into a client DC
  83. // Return type : void 
  84. // Argument         : int nColumn ; bitmap column
  85. // Argument         : CDC * pDC ; client DC
  86. // Argument         : int x ; x position
  87. // Argument         : int y ; y position
  88. // Argument         : int dxMax ; x size?
  89. void CTColumnBitmap::Put(int nColumn, CDC * pDC, int x, int y, int dxMax)
  90. {
  91. CDC memDC, maskDC, tempDC;
  92. if (maskDC.CreateCompatibleDC(pDC))
  93. if (memDC.CreateCompatibleDC(pDC))
  94. if (tempDC.CreateCompatibleDC(pDC))
  95. {
  96. CRect rect = GetRectImage(nColumn);
  97. int nHeight = rect.Height();
  98. int nWidth = min(rect.Width(),dxMax);
  99. int xImage = rect.left;
  100. int yImage = rect.top;
  101. // Create a compatible bitmap with pDC in memDC, for copy image from bitmap source
  102. CBitmap bmpImage, maskBitmap;
  103. bmpImage.CreateCompatibleBitmap( pDC, nWidth, nHeight );
  104. CBitmap* pOldBitmapMem = memDC.SelectObject( &bmpImage );
  105. CBitmap* pOldBitmapTemp = tempDC.SelectObject(GetBitmap());
  106. memDC.BitBlt( 0,0, nWidth, nHeight, &tempDC, xImage, yImage , SRCCOPY );
  107. COLORREF f= memDC.GetPixel(27,30);
  108. // memDC contain image of bitmap which must be view in pDC.
  109. // Create monochrome bitmap for the mask
  110. maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL );
  111. CBitmap*  pOldBitmapMask = maskDC.SelectObject( &maskBitmap );
  112. memDC.SetBkColor( m_crMaskedColor );
  113. // Create the mask from the memDC
  114. maskDC.BitBlt( 0, 0, nWidth, nHeight, &memDC, 0, 0, SRCCOPY );
  115. // Set the background in memDC to black. Using SRCPAINT with black 
  116. // and any other color results in the other color, thus making 
  117. // black the transparent color
  118. memDC.SetBkColor(RGB(0,0,0));
  119. memDC.SetTextColor(RGB(255,255,255));
  120. memDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
  121. // Set the foreground to black. See comment above.
  122. COLORREF oldBkColor = pDC->SetBkColor(RGB(255,255,255));
  123. COLORREF oldFgColor = pDC->SetTextColor(RGB(0,0,0));
  124. pDC->BitBlt(x, y, nWidth, nHeight, &maskDC, 0, 0, SRCAND);
  125. pDC->BitBlt(x, y, nWidth, nHeight, &memDC, 0, 0, SRCPAINT);
  126. pDC->SetBkColor(oldBkColor);
  127. pDC->SetTextColor(oldFgColor);
  128. maskDC.SelectObject( pOldBitmapMask );
  129. tempDC.SelectObject( pOldBitmapTemp );
  130. memDC.SelectObject( pOldBitmapMem );
  131. }
  132. }
  133. // Function name : CTColumnBitmap::GetWidth
  134. // Description     : Return the width of image
  135. // Return type : int 
  136. int CTColumnBitmap::GetWidth()
  137. {
  138. return m_nImageWidth;
  139. }
  140. // Function name : CTColumnBitmap::GetHeight
  141. // Description     : Return the height of image
  142. // Return type : int 
  143. int CTColumnBitmap::GetHeight()
  144. {
  145. return m_nImageHeight;
  146. }
  147. // Function name : CTCellIcon::CTCellIcon
  148. // Description     : Constructor
  149. // Return type : 
  150. // Argument         : HICON hIcon
  151. // Argument         : BOOL bBigIcon
  152. CTCellIcon::CTCellIcon(HICON hIcon, BOOL bBigIcon)
  153. {
  154. m_hIcon = hIcon;
  155. m_bBigIcon = bBigIcon;
  156. m_nImageWidth = 16 * ((int)m_bBigIcon + 1);
  157. m_nImageHeight = m_nImageWidth;
  158. }
  159. // Function name : CTCellIcon::~CTCellIcon
  160. // Description     : Destructor
  161. // Return type : 
  162. CTCellIcon::~CTCellIcon()
  163. {
  164. }
  165. // Function name : CTCellIcon::Put
  166. // Description     : 
  167. // Return type : void 
  168. // Argument         : int nColumn
  169. // Argument         : CDC * pDC
  170. // Argument         : int x
  171. // Argument         : int y
  172. // Argument         : int dxMax
  173. void CTCellIcon::Put(int nColumn, CDC * pDC, int x, int y, int dxMax)
  174. {
  175. CDC dc;
  176. if (dc.CreateCompatibleDC(pDC))
  177. {
  178. CBitmap bitmap, *pOldBitmap; 
  179. CRect rect(0,0,32,32);
  180. if (bitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height()))
  181. {
  182. pOldBitmap = dc.SelectObject(&bitmap);
  183. CBrush backBrush(RGB(255,255,255));
  184. CBrush* pOldBrush = dc.SelectObject(&backBrush);
  185. dc.PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
  186. dc.SelectObject(pOldBrush);
  187. dc.DrawIcon(0,0, m_hIcon);
  188. pDC->StretchBlt(x,y,GetWidth(),GetHeight(), &dc, rect.left,rect.top, rect.Width(),rect.Height(), SRCCOPY);
  189. dc.SelectObject(pOldBitmap);
  190. }
  191. }
  192. }