#include "stdafx.h"
#include "CrossDrawer.h"
#include "crossdatas.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern HRESULT DrawThemesPart(HDC hDC, int iPartId, int iStateId, LPCSTR uiPartNameID, LPRECT prcRcBx);
extern BOOL IsThemeActiveXP();
#define DELETE_OBJECT(_obj_) do { if( (_obj_) ) ::DeleteObject((_obj_)); } while(0)
CCrossDrawer::CCrossDrawer()
{
}
CCrossDrawer::~CCrossDrawer()
{
DELETE_OBJECT(m_hbmpNormal);
DELETE_OBJECT(m_hbmpHot);
DELETE_OBJECT(m_hbmpPressed);
}
BOOL CCrossDrawer::Init()
{
m_hbmpNormal = ::CreateBitmap(bmCrossNormal.bmWidth, bmCrossNormal.bmHeight,
bmCrossNormal.bmPlanes, bmCrossNormal.bmBitsPixel, bCrossNormal);
if( m_hbmpNormal == NULL )
return FALSE;
m_hbmpHot = ::CreateBitmap(bmCrossHot.bmWidth, bmCrossHot.bmHeight,
bmCrossHot.bmPlanes, bmCrossHot.bmBitsPixel, bCrossHot);
if( m_hbmpHot == NULL )
return FALSE;
m_hbmpPressed = ::CreateBitmap(bmCrossPressed.bmWidth, bmCrossPressed.bmHeight,
bmCrossPressed.bmPlanes, bmCrossPressed.bmBitsPixel, bCrossPressed);
if( m_hbmpPressed == NULL )
return FALSE;
return TRUE;
}
BOOL CCrossDrawer::Draw(CDC* pDC, const CRect& rcArea, int iStatus)
{
CDC dcMem;
HBITMAP hBitmapT;
dcMem.CreateCompatibleDC(pDC);
if( iStatus == EStatus::eNormal )
hBitmapT = (HBITMAP)dcMem.SelectObject(m_hbmpNormal);
else if( iStatus == EStatus::eHot )
hBitmapT = (HBITMAP)dcMem.SelectObject(m_hbmpHot);
else if( iStatus == EStatus::ePressed )
hBitmapT = (HBITMAP)dcMem.SelectObject(m_hbmpPressed);
else
{
dcMem.DeleteDC();
return FALSE;
}
pDC->BitBlt(rcArea.left, rcArea.top, rcArea.Width(), rcArea.Height(),
&dcMem, 0, 0, SRCCOPY);
dcMem.SelectObject(hBitmapT);
dcMem.DeleteDC();
return TRUE;
}
BOOL CCrossDrawer::GetBitmapSize(CSize& size)
{
size.cx = bmCrossNormal.bmWidth;
size.cy = bmCrossNormal.bmHeight;
return TRUE;
}
BOOL CCrossDrawer::GetBitmapSize(int iStatus, CSize& size)
{
if( iStatus == EStatus::eNormal )
{
size.cx = bmCrossNormal.bmWidth;
size.cy = bmCrossNormal.bmHeight;
}
else if( iStatus == EStatus::eHot )
{
size.cx = bmCrossHot.bmWidth;
size.cy = bmCrossHot.bmHeight;
}
else if( iStatus == EStatus::ePressed )
{
size.cx = bmCrossPressed.bmWidth;
size.cy = bmCrossPressed.bmHeight;
}
else
return FALSE;
return TRUE;
}