// CrossDrawer.cpp: implementation of the CCrossDrawer class.
//
//////////////////////////////////////////////////////////////////////

#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();

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


#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;
}