⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picbutton.cpp

📁 K-均值聚类算法 vc++图形演示程序
💻 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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -