// MyCell - version 1.0
// Written by Yanxueming <yanxm2003@hotmail.com>
// Copyright (C) 2006-2007
// All rights reserved.
//
// The code and information is provided "as-is" without
// warranty of any kind, either expressed or implied.
#pragma once
#include <atltheme.h>
//#include "theme.h"
#include "CellRange.h"
#include "CellSymbolBase.h"
namespace mycell{
class Workbook;
namespace symbol{
/*
template<class T>
class CellSymbolBase: public CComObjectRootEx<CComSingleThreadModel>
,public ICellSymbol
{
//protected:
// CCellRange mergeCells_;
public:
BEGIN_COM_MAP(T)
COM_INTERFACE_ENTRY(ICellSymbol)
END_COM_MAP()
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI)//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign)
{
return E_NOTIMPL;
}
//STDMETHOD(SetMergeInfo)(int leftCol,int topRow,int rightCol,int bottomRow)
//{
// mergeCells_.SetTopLeft(topRow,leftCol);
// mergeCells_.SetRightBottom(bottomRow,rightCol);
// return S_OK;
//}
STDMETHOD(OnThemeChanged)(HWND hWnd)
{
return S_OK;
}
};
*/
class SimpleFillSymbol : public CellSymbolBase<SimpleFillSymbol>
{
public:
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI)
{
CDCHandle dc(hDC);
dc.FillSolidRect(&pDCI->rcCell,pDCI->clrBkgnd);
//if(row%2)
//else{
// COLORREF clr=pDCI->clrBkgnd^RGB(0x0,0x222,0);
// dc.FillSolidRect(pDCI->lprcCell,clr);
//}
return S_OK;
}
};
class HeaderSymbol : public CellSymbolBase<HeaderSymbol>
{
public:
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign);
};
//class ColHeaderSymbol : public CellSymbolBase<ColHeaderSymbol>
//{
//public:
// STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign);
//};
class TextSymbol : public CellSymbolBase<TextSymbol>
{
public:
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign);
};
class ThemeCheckBoxSymbol : public CellSymbolBase<ThemeCheckBoxSymbol>
{
//uxtheme theme_;
CTheme theme_;
public:
HRESULT OpenThemeData(HWND hWnd)
{
HTHEME hTheme=theme_.OpenThemeData(hWnd,L"Button");
return NULL==hTheme?S_FALSE:S_OK;
}
STDMETHOD(OnThemeChanged)(HWND hWnd)
{
theme_.CloseThemeData();
return OpenThemeData(hWnd);//theme_.OpenThemeData(hWnd,L"Button");
}
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);
//{
// LPCRECT lprc=pDCI->lprcCell;
// LPCTSTR lpText=(LPCTSTR)pDCI->pdata;
// int nCount=pDCI->nDataLen;
// UINT uFlag=DFCS_BUTTONCHECK|DFCS_FLAT;
// if(nCount>0 && 0!=(_tcsncmp(lpText,_T("0"),nCount)))
// uFlag|=DFCS_CHECKED;
// CRect rc=*lprc;
// CPoint _pt=rc.CenterPoint();
// int const cx=CHECKBOX_HALF_WIDTH;
// rc.SetRect(_pt.x-cx,_pt.y-cx,_pt.x+cx,_pt.y+cx);
// if(theme_.m_hTheme){
// theme_.DrawThemeBackground(hDC, 3/*BP_CHECKBOX*/,
// (DFCS_CHECKED&uFlag)?5/*CBS_CHECKEDNORMAL*/:1/*CBS_UNCHECKEDNORMAL*/,
// &rc);
// }else{
// DrawFrameControl(hDC,&rc,DFC_BUTTON,uFlag);
// }
// return S_OK;
//}
};
//class CheckBoxSymbol : public CellSymbolBase<CheckBoxSymbol>
//{
//// CTheme theme_;
////public:
//// void OpenThemeData(HWND hWnd)
//// {
//// theme_.OpenThemeData(hWnd,L"Button");
//// }
//// ~CheckBoxSymbol()
//// {
//// theme_.CloseThemeData();
//// }
//public:
// STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign);
//};
class ColorSymbol : public CellSymbolBase<ColorSymbol>
{
public:
STDMETHOD(Draw)(HDC hDC, int row,int col,const DrawCellInfo* pDCI);//VARIANT_BOOL bMerge, RECT *rcCell,BYTE* data,int nDataLen,EXlHAlign hAlign,EXlVAlign vAlign);
};
}//namespace symbol
}//namespace mycell