www.pudn.com > Jx_KClustering.rar > PicButton.cpp


// PicButton.cpp : 实现文件 
// 
 
#include "stdafx.h" 
#include "PicButton.h" 
 
 
// PicButton 
 
IMPLEMENT_DYNAMIC(PicButton, CButton) 
PicButton::PicButton() 
{ 
	m_bOver = m_bSelected = m_bTracking = FALSE; 
} 
 
PicButton::~PicButton() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(PicButton, CButton) 
	ON_WM_MOUSEMOVE() 
	ON_WM_ERASEBKGND() 
	ON_WM_LBUTTONDOWN() 
	ON_WM_LBUTTONUP() 
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave) 
	ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover) 
	ON_WM_LBUTTONDBLCLK() 
END_MESSAGE_MAP() 
 
 
 
// PicButton 消息处理程序 
 
void PicButton::LoadImages(UINT nIDnormal, UINT nIDover, UINT nIDseleted) 
{ 
	m_imgNormal.LoadBitmap(nIDnormal); 
	m_imgOver.LoadBitmap(nIDover); 
	m_imgSelected.LoadBitmap(nIDseleted); 
} 
void PicButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{ 
	//从lpDrawItemStruct获取控件的相关信息 
	CRect rect =  lpDrawItemStruct->rcItem; 
	CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); 
	int nSaveDC = pDC->SaveDC(); 
	UINT state = lpDrawItemStruct->itemState; 
 
	//获取按钮的状态 
	if ( state & ODS_SELECTED ) 
		m_bSelected = TRUE; 
	else 
		m_bSelected = FALSE; 
 
	CBitmap* pOldBitmap; 
	CDC MemDC; 
 
	// 建立与显示设备兼容的内存设备场境 
	MemDC.CreateCompatibleDC(pDC); 
 
	if ( m_bOver ) 
	{ 
		if ( m_bSelected ) 
		{ 
			pOldBitmap = MemDC.SelectObject(&m_imgSelected); 
		} 
		else 
			pOldBitmap = MemDC.SelectObject(&m_imgOver); 
	} 
	else 
	{ 
		pOldBitmap = MemDC.SelectObject(&m_imgNormal); 
	} 
 
	// 显示它 
	pDC->BitBlt(rect.top, rect.left, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);  
	MemDC.SelectObject(pOldBitmap); 
 
	pDC->RestoreDC(nSaveDC); 
} 
 
void PicButton::OnMouseMove(UINT nFlags, CPoint point) 
{ 
	// TODO: Add your message handler code here and/or call default 
	if (!m_bTracking) 
	{ 
		TRACKMOUSEEVENT tme; 
		tme.cbSize = sizeof(tme); 
		tme.hwndTrack = m_hWnd; 
		tme.dwFlags = TME_LEAVE | TME_HOVER; 
		tme.dwHoverTime = 1; 
		m_bTracking = _TrackMouseEvent(&tme); 
	} 
	CButton::OnMouseMove(nFlags, point); 
} 
 
BOOL PicButton::OnEraseBkgnd(CDC* pDC) 
{ 
	return TRUE; 
} 
 
void PicButton::PreSubclassWindow() 
{ 
	// 设置为自绘 
	ModifyStyle(0, BS_OWNERDRAW); 
	CButton::PreSubclassWindow(); 
} 
void PicButton::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
	CButton::OnLButtonDown(nFlags, point); 
} 
 
void PicButton::OnLButtonUp(UINT nFlags, CPoint point) 
{ 
	CButton::OnLButtonUp(nFlags, point); 
} 
LRESULT PicButton::OnMouseLeave(WPARAM wParam, LPARAM lParam) 
{ 
	m_bOver = FALSE; 
	m_bTracking = FALSE; 
	m_bSelected = FALSE; 
	InvalidateRect(NULL, FALSE); 
	return 0; 
} 
 
LRESULT PicButton::OnMouseHover(WPARAM wParam, LPARAM lParam) 
{ 
	m_bOver = TRUE; 
	InvalidateRect(NULL); 
	return 0; 
} 
 
 
void PicButton::OnLButtonDblClk(UINT nFlags, CPoint point) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
	// CButton::OnLButtonDown(nFlags, point); 
	CButton::OnLButtonDblClk(nFlags, point); 
}