16,471
社区成员
发帖
与我相关
我的任务
分享
// CMyButton
IMPLEMENT_DYNAMIC(CMyButton, CButton)
CMyButton::CMyButton()
{
iX=0;
bMouseHover=false;
}
CMyButton::~CMyButton()
{
}
BEGIN_MESSAGE_MAP(CMyButton, CButton)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
END_MESSAGE_MAP()
// CMyButton 消息处理程序
void CMyButton::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0,BS_OWNERDRAW);
CButton::PreSubclassWindow();
}
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
}
void CMyButton::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CButton::OnPaint()
CRect rcClient;
GetClientRect(rcClient);
CDC CompatibleDC;
CBitmap bitmap;
CBitmap *OldBitmap;
BITMAP bit;
CompatibleDC.CreateCompatibleDC(&dc);
bitmap.LoadBitmap(m_nBitmapID);
bitmap.GetBitmap(&bit);
OldBitmap=(CBitmap *)CompatibleDC.SelectObject(&bitmap);
if(m_bState)
TransparentBlt(dc.m_hDC,0,0,rcClient.Width(),rcClient.Height(),CompatibleDC.m_hDC,bit.bmWidth/2,bit.bmHeight/5*m_nItem,bit.bmWidth/2-1,bit.bmHeight/5,RGB(255,255,255));
else
TransparentBlt(dc.m_hDC,0,0,rcClient.Width(),rcClient.Height(),CompatibleDC.m_hDC,bit.bmWidth/2*iX,bit.bmHeight/5*m_nItem,bit.bmWidth/2-1,bit.bmHeight/5,RGB(255,255,255));
CompatibleDC.SelectObject(OldBitmap);
bitmap.DeleteObject();
}
ON_WM_CTLCOLOR_REFLECT()
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
HBRUSH CDateTimeEidt::CtlColor(CDC* pDC, UINT nCtlColor)
{
int nIndex = m_bEnable ? COLOR_WINDOW : COLOR_BTNFACE;
HBRUSH hbr = ::GetSysColorBrush(nIndex);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}