// SkinButton.cpp : 实现文件
//
#include "stdafx.h"
#include "SkinButton.h"
IMPLEMENT_DYNAMIC(CSkinButton, CButton)
extern HMODULE SkinhInstance;
CSkinButton::CSkinButton()
{
m_state = NORMAL;
m_pFont=new CFont();
m_pFont->CreatePointFont(90,_T("Arial"));
m_fg = RGB(0, 0, 0);
m_bg = RGB(255, 255, 255);
m_bMouseOver = false;
m_bEnabled = true;
m_bDCStored = false;
m_textPos = CPoint(0,0);
m_iconRect = CRect(0,0,16,16);
}
CSkinButton::~CSkinButton()
{
delete m_pFont;
m_memDC.DeleteDC();
}
BEGIN_MESSAGE_MAP(CSkinButton, CButton)
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
ON_WM_ERASEBKGND()
ON_WM_SETCURSOR()
ON_WM_ENABLE()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
void CSkinButton::SetMyAllname(CString allname)
{
Myallname=allname;
}
CString CSkinButton::GetMyAllname(void)
{
return Myallname;
}
void CSkinButton::SetMyNumber(int MyNumber)
{
n_MyNumber=MyNumber;
}
int CSkinButton::GetMyNumber()
{
return n_MyNumber;
}
void CSkinButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
//// TODO: 添加您的代码以绘制指定项
//CDC* pDC = CDC::FromHandle(lpDIS->hDC);
UINT state = lpDIS->itemState;
//CRect rect;
//rect.CopyRect(&lpDIS->rcItem);
m_state = NORMAL;
if (state & ODS_FOCUS)
{
if (state & ODS_SELECTED)
{
m_state = DOWN;
}
else
{
if(m_bMouseOver)
m_state = HOVER;
}
}
else
{
m_state = NORMAL;
}
if (state & ODS_DISABLED)
{
m_state = DISABLE;
m_bEnabled = false;
}
DrawButton();
}
void CSkinButton::DrawButton()
{
CClientDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap Screen;
Screen.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
memDC.SelectObject(&Screen);
Screen.DeleteObject();
//画背景
memDC.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &m_memDC, 0, 0, SRCCOPY);
CString str;
GetWindowText(str);
memDC.SetBkMode(TRANSPARENT);
memDC.SelectObject(m_pFont);
switch(m_state)
{
case NORMAL:
if(!m_imgNormal.IsNull())
{
m_imgNormal.TransparentBlt(memDC, rect.left, rect.top,
m_imgNormal.GetWidth(), m_imgNormal.GetHeight(), RGB(255,0,255));
}
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
if(!m_hMouseOutIcon.IsNull())
{
m_hMouseOutIcon.TransparentBlt(memDC, m_iconRect.left,m_iconRect.top,
m_iconRect.Width(), m_iconRect.Height(), RGB(0,0,0));
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
}
if(!m_imgIconNormal.IsNull())
{
m_imgIconNormal.TransparentBlt(memDC, rect.left,rect.top,
m_imgIconNormal.GetWidth(), m_imgIconNormal.GetHeight(), RGB(255,0,255));
}
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
break;
case HOVER:
if(!m_imgHover.IsNull())
{
m_imgHover.TransparentBlt(memDC, rect.left, rect.top,
m_imgHover.GetWidth(), m_imgHover.GetHeight(), RGB(255,0,255));
}
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
if(!m_hMouseInIcon.IsNull())
{
m_hMouseInIcon.TransparentBlt(memDC, m_iconRect.left,m_iconRect.top,
m_iconRect.Width(), m_iconRect.Height(), RGB(0,0,0));
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
}
if(!m_imgIconHover.IsNull())
{
m_imgIconHover.TransparentBlt(memDC, rect.left,rect.top,
m_imgIconHover.GetWidth(), m_imgIconNormal.GetHeight(), RGB(255,0,255));
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
}
break;
case DOWN:
if(!m_imgDown.IsNull())
{
m_imgDown.TransparentBlt(memDC, rect.left, rect.top,
m_imgDown.GetWidth(), m_imgHover.GetHeight(), RGB(255,0,255));
}
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x+1,m_textPos.y+1,str);
if(!m_hMouseOutIcon.IsNull())
{
m_hMouseOutIcon.TransparentBlt(memDC, m_iconRect.left+1,m_iconRect.top+1,
m_iconRect.Width(), m_iconRect.Height(), RGB(0,0,0));
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x+1,m_textPos.y+1,str);
}
if(!m_imgIconDown.IsNull())
{
m_imgIconDown.TransparentBlt(memDC, rect.left+1,rect.top+1,
m_imgIconDown.GetWidth(), m_imgIconNormal.GetHeight(), RGB(255,0,255));
memDC.SetTextColor(GetBGColor());
memDC.TextOut(m_textPos.x+1,m_textPos.y+1,str);
}
break;
case DISABLE:
if(!m_imgDisable.IsNull())
{
m_imgDisable.TransparentBlt(memDC, rect.left, rect.top,
m_imgDisable.GetWidth(), m_imgHover.GetHeight(), RGB(255,0,255));
}
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
if(!m_hMouseOutIcon.IsNull())
{
m_hMouseOutIcon.TransparentBlt(memDC, m_iconRect.left,m_iconRect.top,
m_iconRect.Width(), m_iconRect.Height(), RGB(0,0,0));
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
}
if(!m_imgIconDisable.IsNull())
{
m_imgIconDisable.TransparentBlt(memDC, rect.left,rect.top,
m_imgIconDisable.GetWidth(), m_imgIconNormal.GetHeight(), RGB(255,0,255));
memDC.SetTextColor(GetFGColor());
memDC.TextOut(m_textPos.x,m_textPos.y,str);
}
break;
default:
break;
}
dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
memDC.DeleteDC();
}