BmpButton.cpp
上传用户:guangzhiyw
上传日期:2007-01-09
资源大小:495k
文件大小:2k
源码类别:

ICQ/即时通讯

开发平台:

Visual C++

  1. // BmpButton.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "BmpButton.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CBmpButton
  12. CBmpButton::CBmpButton()
  13. {
  14. }
  15. CBmpButton::~CBmpButton()
  16. {
  17. }
  18. BEGIN_MESSAGE_MAP(CBmpButton, CButton)
  19. //{{AFX_MSG_MAP(CBmpButton)
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CBmpButton message handlers
  24. void CBmpButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
  25. {
  26. if(m_bitmap.GetObject==NULL)
  27. return;
  28. UINT    nOffset=0; 
  29. UINT nFrameStyle=0;
  30. BOOL bDRAWFOCUSONLY = FALSE;
  31. int nState=lpDrawItemStruct->itemState;
  32. UINT nNewAction = lpDrawItemStruct->itemAction;
  33. if ( nState & ODS_SELECTED)
  34. {
  35. nFrameStyle = DFCS_PUSHED;
  36. nOffset += 1;
  37. }
  38. nState=DSS_NORMAL;
  39. if (nNewAction == ODA_FOCUS )
  40. bDRAWFOCUSONLY = TRUE;
  41. CRect rt;
  42. GetClientRect(&rt);
  43. if(!bDRAWFOCUSONLY)
  44. {
  45. CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  46. CRect rtControl( lpDrawItemStruct->rcItem );
  47. CPoint pt(rtControl.left,rtControl.top);
  48. CSize sizeDraw;
  49. sizeDraw.cx=rt.Width();
  50. sizeDraw.cy=rt.Height();
  51. pt.Offset(nOffset,nOffset);
  52. pDC->Rectangle( &lpDrawItemStruct->rcItem );
  53. pDC->DrawFrameControl(&rtControl, DFC_BUTTON, DFCS_BUTTONPUSH | nFrameStyle);
  54. pDC->DrawState(pt,sizeDraw,m_bitmap,DST_BITMAP|nState);
  55. }
  56. }
  57. void CBmpButton::SetBitmap(CBitmap *pBit)
  58. {
  59. CRect rt;
  60. GetClientRect(&rt);
  61. m_bitmap.DeleteObject();
  62. HBITMAP hb=(HBITMAP)::CopyImage(pBit->GetSafeHandle(),IMAGE_BITMAP,rt.Width(),rt.Height(),LR_CREATEDIBSECTION);
  63. m_bitmap.Attach(hb);
  64. Invalidate();
  65. }