16,371
社区成员




void CImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CRect rcClient;
GetClientRect(&rcClient);
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
if( lpDrawItemStruct->itemState & ODS_DISABLED )
{
m_nState = DISABLE;
}
BITMAP bmpInfo;
m_bmpNormal.GetBitmap( &bmpInfo );
CClientDC clDC(GetParent());
CRect rcWindow;
GetWindowRect(rcWindow);
CDC dcParent;
CBitmap *pOldBitmap;
dcParent.CreateCompatibleDC(&clDC);
if(m_nState == DISABLE)
pOldBitmap = dcParent.SelectObject(&m_bmpDisable);
else
pOldBitmap = dcParent.SelectObject(&m_bmpNormal);
pOldBitmap->DeleteObject();
if(m_nState == DOWN)
pDC->DrawFrameControl(rcClient,DFC_BUTTON,DFCS_BUTTONPUSH|DFCS_PUSHED);
else if(m_nState == HOVER)
pDC->DrawFrameControl(rcClient,DFC_BUTTON,DFCS_BUTTONPUSH|DFCS_HOT);
else if(m_nState == DISABLE)
pDC->DrawFrameControl(rcClient,DFC_BUTTON,DFCS_BUTTONPUSH|DFCS_INACTIVE);
else
pDC->DrawFrameControl(rcClient,DFC_BUTTON,DFCS_BUTTONPUSH);
if(m_nState == DISABLE)
pDC->TransparentBlt((rcClient.Width() - bmpInfo.bmWidth)/2, (rcClient.Height() - bmpInfo.bmHeight)/2, bmpInfo.bmWidth, bmpInfo.bmHeight,
&dcParent, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, TRANSPARENTCOLOR);
else
pDC->TransparentBlt((rcClient.Width() - bmpInfo.bmWidth)/2, (rcClient.Height() - bmpInfo.bmHeight)/2, bmpInfo.bmWidth, bmpInfo.bmHeight,
&dcParent, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, TRANSPARENTCOLOR);
}
void CImageButton::OnMouseMove(UINT nFlags, CPoint point)
{
if( !m_bHovering )
{
m_bHovering = true;
m_nState = HOVER;
Invalidate(FALSE);
TRACKMOUSEEVENT TrackMouseEvent;
TrackMouseEvent.cbSize=sizeof(TrackMouseEvent);
TrackMouseEvent.dwFlags=TME_HOVER|TME_LEAVE;
TrackMouseEvent.hwndTrack=m_hWnd;
_TrackMouseEvent(&TrackMouseEvent);
}
CButton::OnMouseMove(nFlags, point);
}
.....
Invalidate();
UpdateWindow();
试试