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

📄 skinbutton.cpp

📁 If you are not using these features and wish to reduce the size
💻 CPP
字号:
// SkinButton.cpp : implementation file
//

#include "stdafx.h"
#include "dialog.h"
#include "SkinButton.h"
#include "EnBitmap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CToolTipCtrl g_ToolTip;
/////////////////////////////////////////////////////////////////////////////
// CSkinButton

CSkinButton::CSkinButton()
{
	m_bMouseIn = m_bDown = FALSE;
	m_nStyle=STYLE_BITMAP;
}

CSkinButton::~CSkinButton()
{
}


BEGIN_MESSAGE_MAP(CSkinButton, CButton)
	//{{AFX_MSG_MAP(CSkinButton)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_ERASEBKGND()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSkinButton message handlers

void CSkinButton::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	m_bFocus = GetFocus()->GetSafeHwnd() == m_hWnd;
	m_bEnable = !(GetWindowLong(m_hWnd,GWL_STYLE) & WS_DISABLED);
	CEnBitmap bmp;

	if (m_nStyle & STYLE_BITMAP)
	{
		if ( !m_bEnable )
		{
			//disable
			m_bmpButton.DrawImage(bmp,4,1,4,1);	
		}
		else
		if ( m_bMouseIn &&m_bDown )
		{
			//down
			m_bmpButton.DrawImage(bmp,3,1,4,1);	
		}
		else if ( m_bMouseIn )
		{
			//hover
			m_bmpButton.DrawImage(bmp,2,1,4,1);		
		}
		else if ( m_bFocus )
		{
			//normal with focus
			m_bmpButton.DrawImage(bmp,1,1,4,1);	
		}
		else
		{
			//normal
			m_bmpButton.DrawImage(bmp,1,1,4,1);	
		}
		//设置区域
		SetWindowRgn(bmp.BitmapToRegion(RGB(255,0,255)), TRUE );	
		HRGN hRgn = CreateRectRgn( 0, 0, 0, 0);
		GetWindowRgn(hRgn);	
		//选入位图绘画区域
		::SelectClipRgn(dc.GetSafeHdc(), hRgn);
		bmp.Draw( &dc, CRect(0,0,bmp.GetWidth(),bmp.GetHeight()));	
		dc.SelectClipRgn(NULL);
		DeleteObject(hRgn);

		DrawText( &dc ,bmp.GetRect() ,RGB(0,0,0));
	}
	else if (m_nStyle & STYLE_TOOLBAR)
	{
		CRect rcButton;
		GetClientRect(&rcButton);
		CRect rcImage,rcText;
		rcImage=m_bmpButton.GetRect(); 
		int nMaigin=(rcButton.Height()- rcImage.Height())/2; 
		rcImage.OffsetRect(nMaigin,nMaigin); 
		rcText=rcButton;
		rcText.left =rcImage.right ;
		//先更新背景
		CRect rc=rcButton;		
		ClientToScreen(&rcButton);
		GetParent()->ScreenToClient(&rcButton); 
		GetParent()->RedrawWindow(&rcButton,NULL,RDW_ERASE|RDW_UPDATENOW |RDW_INVALIDATE|RDW_NOCHILDREN   );		
		rc.DeflateRect(1,1); 		
		if ( !m_bEnable )
		{
			//disable	
		}
		else
		if ( m_bMouseIn &&m_bDown )
		{
			//down
			dc.Draw3dRect(&rc,GetSysColor(COLOR_3DDKSHADOW),GetSysColor(COLOR_3DHILIGHT));	
		}
		else if ( m_bMouseIn )
		{
			dc.Draw3dRect(&rc,GetSysColor(COLOR_3DHILIGHT),GetSysColor(COLOR_3DDKSHADOW));		
		}
		else if ( m_bFocus )
		{
		}
		else
		{
		}

		m_bmpButton.TransparentBlt(dc, &rcImage,RGB(255,0,255));	
		DrawText( &dc ,rcText,m_crText);
	}
}

void CSkinButton::LoadBitmap(LPCTSTR szImagePath)
{
	m_bmpButton.LoadImage(szImagePath); 
}

BOOL CSkinButton::LoadBitmap(UINT uIDRes,COLORREF crBack)
{
	return m_bmpButton.LoadBitmap(uIDRes);
}

void CSkinButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_bDown = TRUE;
	m_bMouseIn = TRUE;
	Invalidate();
	UpdateWindow();
	SetFocus();	
}

void CSkinButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	ReleaseCapture();	
	m_bDown = FALSE;
	if ( m_bMouseIn )
	{
		m_bMouseIn = FALSE;
		//GetRegion();
		Invalidate();
		UpdateWindow();
		GetParent()->SendMessage( WM_COMMAND, GetDlgCtrlID(), (LPARAM)m_hWnd );
	}
	else
	{
		//GetRegion();
		Invalidate();
		UpdateWindow();

	}	
}

BOOL CSkinButton::OnEraseBkgnd(CDC* pDC) 
{
	return TRUE;	
}

void CSkinButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if (m_nStyle & STYLE_BITMAP)
	{
		HRGN hRgn = CreateRectRgn(0, 0, 0, 0);
		GetWindowRgn(hRgn);		

		if ( PtInRegion( hRgn, point.x, point.y ))
		{
			::SetCursor(AfxGetApp()->LoadCursor(IDC_HAND ));
			if ( !m_bMouseIn)
			{
				m_bMouseIn = TRUE;
				Invalidate();
				UpdateWindow();
				SetCapture();
			}
		}
		else
		{
			if ( m_bMouseIn)
			{
				m_bMouseIn = FALSE;
				//GetRegion();
				Invalidate();
				UpdateWindow();
				if ( !m_bDown )
					ReleaseCapture();
			}

		}
		DeleteObject(hRgn);
	}
	else if (m_nStyle & STYLE_TOOLBAR)
	{
		CRect rc;
		GetClientRect(&rc);
		if ( rc.PtInRect( point ))
		{
			//移入
			if ( !m_bMouseIn)
			{
				m_bMouseIn = TRUE;

				Invalidate();
				UpdateWindow();
				SetCapture();
			}
		}
		else
		{
			//移出
			if ( m_bMouseIn)
			{
				m_bMouseIn = FALSE;
				//GetRegion();
				Invalidate();
				UpdateWindow();
				if ( !m_bDown )
					ReleaseCapture();
			}

		}
	}
}

void CSkinButton::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
}

void CSkinButton::OnSetFocus(CWnd* pOldWnd) 
{
	
}

void CSkinButton::OnKillFocus(CWnd* pNewWnd) 
{
	
}

BOOL CSkinButton::DrawText(CDC *pDC,CRect rc ,COLORREF crText)
{
	CRect r;
	CString str;
	CRect rcButton;
	CString strText;
	UINT nId=GetDlgCtrlID( ) ;
	if (strText.LoadString(nId))
	{
		CFont *ofont;
		ofont = pDC->SelectObject( GetParent()->GetFont() );


		pDC->SetTextColor(crText);
		pDC->SetBkMode(TRANSPARENT);
		pDC->DrawText( strText, rc, DT_CENTER | DT_SINGLELINE | DT_VCENTER );

		pDC->SelectObject(ofont);
	}

	return TRUE;
}

HBITMAP CSkinButton::SetBitmap(HBITMAP hBitmap)
{ 
	return m_bmpButton.SetBitmap(hBitmap) ;	
}



CSkinButton::SetTextColor(COLORREF cr)
{
	m_crText=cr;
}

⌨️ 快捷键说明

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