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

📄 stylebutton.cpp

📁 动态鼠标
💻 CPP
字号:
// stylebutton.cpp : implementation file
//

#include "stdafx.h"
#include "KSComDlg.h"
#include "stylebutton.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CStyleButton

CStyleButton::CStyleButton()
{
	m_bCursorOn=false;
	m_hIcon_Active=0;
	m_hIcon_Enable=0;
	m_IconSize=CSize(0,0);
	m_nTColor_Active=RGB(255,0,0);
	m_nTColor_Enable=RGB(0,0,0);
	m_nBColor_Active=GetSysColor(COLOR_3DFACE)+RGB(10,10,20);
	m_nBColor_Enable=GetSysColor(COLOR_3DFACE);
}

CStyleButton::~CStyleButton()
{

}


BEGIN_MESSAGE_MAP(CStyleButton, CButton)
	//{{AFX_MSG_MAP(CStyleButton)
	ON_WM_SETCURSOR()
	ON_WM_MOUSEMOVE()
	ON_WM_CAPTURECHANGED()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStyleButton message handlers

BOOL CStyleButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	if(m_hCursor)
	{
		::SetCursor(m_hCursor);
		return true;
	}
	
	return CButton::OnSetCursor(pWnd, nHitTest, message);
}

void CStyleButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	if(m_bCursorOn)
	{
		CRect rect;
		GetWindowRect(&rect);
		rect.right-=rect.left;
		rect.bottom-=rect.top;
		rect.left=0;
		rect.top=0;
		if(!rect.PtInRect(point))
		{
			m_bCursorOn=false;
			::ReleaseCapture();
			this->Invalidate();
		}
	}
	else
	{
		m_bCursorOn=true;
		this->SetCapture();
		this->Invalidate();
	}
	
	CButton::OnMouseMove(nFlags, point);
}

void CStyleButton::OnCaptureChanged(CWnd *pWnd) 
{
	m_bCursorOn=false;
	::ReleaseCapture();
	this->Invalidate();
	
	CButton::OnCaptureChanged(pWnd);
}

void CStyleButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    CString Title;
	GetWindowText(Title);

	CRect rect(lpDrawItemStruct->rcItem);

	CDC DC;
	DC.Attach(lpDrawItemStruct->hDC);
	DC.SetBkMode(TRANSPARENT);

	CPoint pt;
	if(Title.IsEmpty())
	{
		pt.x=(rect.right-rect.left-m_IconSize.cx)/2;
	}
	else
	{
		pt.x=m_IconSize.cx/2;
	}
	pt.y=(rect.top+rect.bottom-m_IconSize.cy)/2;
	
	if(lpDrawItemStruct->itemState&ODS_DISABLED)
	{	//如果是Disable状态
		DC.DrawState(pt,m_IconSize,m_hIcon_Enable,DSS_DISABLED,(CBrush*)NULL);
		rect.left=m_IconSize.cx*3/2;
		rect.left+=2;
		rect.top+=2;
		DC.SetTextColor(GetSysColor(COLOR_3DHILIGHT));
		DC.DrawText(Title,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
		rect.left-=2;
		rect.top-=2;
		DC.SetTextColor(GetSysColor(COLOR_3DSHADOW));
		DC.DrawText(Title,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);		
	}
	else if(m_bCursorOn)
	{//如果鼠标在按纽上
		CBrush Brush;
		Brush.CreateSolidBrush(m_nBColor_Active);
		DC.FillRect(&rect,&Brush);		
		if(lpDrawItemStruct->itemState&ODS_SELECTED)
		{//且按下按纽
			rect.left+=2;
			rect.top+=2;
			pt.x+=2;
			pt.y+=2;
			DC.Draw3dRect(rect,GetSysColor(COLOR_3DSHADOW),GetSysColor(COLOR_3DHILIGHT));
			DC.DrawState(pt,m_IconSize,m_hIcon_Active,DSS_NORMAL,(CBrush*)NULL);
			rect.left=m_IconSize.cx*3/2+2;
		}
		else
		{//且没有按下
			DC.Draw3dRect(rect,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_3DSHADOW));
			DC.DrawState(pt,m_IconSize,m_hIcon_Active,DSS_NORMAL,(CBrush*)NULL);
			rect.left=m_IconSize.cx*3/2;
		}						
		DC.SetTextColor(m_nTColor_Active);
		DC.DrawText(Title,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);		
	}
	else
	{//如果鼠标不在按纽上
		DC.DrawState(pt,m_IconSize,m_hIcon_Enable,DSS_NORMAL,(CBrush*)NULL);
		rect.left=m_IconSize.cx*3/2;
		DC.SetTextColor(m_nTColor_Enable);
		DC.DrawText(Title,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	}
	
}

⌨️ 快捷键说明

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