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

📄 yctbitmapbutton2.cpp

📁 简易的日期控件
💻 CPP
字号:
// yctBitmapButton2.cpp : implementation file
//

#include "stdafx.h"
#include "MyButtonDlg.h"
#include "yctBitmapButton2.h"

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

/////////////////////////////////////////////////////////////////////////////
// CyctBitmapButton2

CyctBitmapButton2::CyctBitmapButton2(): m_fIsInit(FALSE)
{
}

CyctBitmapButton2::~CyctBitmapButton2()
{
}


BEGIN_MESSAGE_MAP(CyctBitmapButton2, CButton)
	//{{AFX_MSG_MAP(CyctBitmapButton2)
	ON_WM_DESTROY()
	ON_WM_CREATE()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)//手工添加
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CyctBitmapButton2 message handlers

int CyctBitmapButton2::Init()
{
//(窗口建立后的)初始化

	m_hIn      = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_IN));
	m_hOut     = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_OUT));
	m_hDown    = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_DOWN));
	m_hIn_Focus      = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_IN_FOCUS));
	m_hOut_Focus     = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_OUT_FOCUS));
	m_hDown_Focus    = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP_DOWN_FOCUS));

	ASSERT(m_hIn != NULL);
	ASSERT(m_hOut != NULL);
	ASSERT(m_hDown != NULL);
	ASSERT(m_hIn_Focus != NULL);
	ASSERT(m_hOut_Focus != NULL);
	ASSERT(m_hDown_Focus != NULL);
	
	//SetButtonStyle( BS_BITMAP | GetButtonStyle() );
	ModifyStyle(0,BS_BITMAP);//增加BS_BITMAP风格

	if(this == GetFocus())//判断自己是否有焦点
		SetBitmap(m_hOut_Focus);		
	else
		SetBitmap(m_hOut);

	return 0;
}

void CyctBitmapButton2::OnDestroy() 
{
	CButton::OnDestroy();
	
	//卸载Bitmap资源
#ifdef _DEBUG
	ASSERT(0 != DeleteObject(m_hIn));
	ASSERT(0 != DeleteObject(m_hOut));
	ASSERT(0 != DeleteObject(m_hDown));
	ASSERT(0 != DeleteObject(m_hIn_Focus));
	ASSERT(0 != DeleteObject(m_hOut_Focus));
	ASSERT(0 != DeleteObject(m_hDown_Focus));
#else
	DeleteObject(m_hIn);
	DeleteObject(m_hOut);
	DeleteObject(m_hPutdown);
	DeleteObject(m_hIn_Focus);
	DeleteObject(m_hOut_Focus);
	DeleteObject(m_hPutdown_Focus);
#endif		
}

void CyctBitmapButton2::PreSubclassWindow() 
{
	//初始化
	if(!m_fIsInit)
	{
		//AfxMessageBox(_T("CyctBitmapButton2::PreSubclassWindow"));
		Init();
		m_fIsInit = TRUE;
	}	
	CButton::PreSubclassWindow();
}

int CyctBitmapButton2::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CButton::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	//初始化
	if(!m_fIsInit)
	{
		Init();
		m_fIsInit = TRUE;
	}
	
	return 0;
}

void CyctBitmapButton2::OnMouseMove(UINT nFlags, CPoint point) 
{
	if(m_MouseState.GetCurState() == _mouse_out
		|| m_MouseState.GetCurState() == _mouse_out_focus)
	{
		if(this == GetFocus())//判断自己是否有焦点	
			SetBitmap(m_hIn_Focus);		
		else		
			SetBitmap(m_hIn);		
		return;
	}

	//当鼠标离开时触发WM_MOUSELEAVE事件
	TRACKMOUSEEVENT   tme;   
    tme.cbSize = sizeof(tme);   
    tme.dwFlags = TME_LEAVE;   
    tme.hwndTrack = m_hWnd;   
    tme.dwHoverTime = HOVER_DEFAULT;
    ::TrackMouseEvent(&tme);
	
	CButton::OnMouseMove(nFlags, point);
}

HBITMAP CyctBitmapButton2::SetBitmap(HBITMAP hBitmap)
{
//设置按钮的位图

	ASSERT(m_hIn == hBitmap || m_hOut == hBitmap || m_hDown == hBitmap
		|| m_hIn_Focus == hBitmap || m_hOut_Focus == hBitmap || m_hDown_Focus == hBitmap);
	if(m_hIn == hBitmap)
		m_MouseState.SetCurState( _mouse_in );
	else if(m_hOut == hBitmap)
		m_MouseState.SetCurState(_mouse_out );
	else if(m_hDown == hBitmap)
		m_MouseState.SetCurState( _mouse_down );
	else if(m_hIn_Focus == hBitmap)
		m_MouseState.SetCurState( _mouse_in_focus );
	else if(m_hOut_Focus == hBitmap)
		m_MouseState.SetCurState(_mouse_out_focus );
	else if(m_hDown_Focus == hBitmap)
		m_MouseState.SetCurState( _mouse_down_focus );

	return CButton::SetBitmap(hBitmap);
}

void CyctBitmapButton2::OnLButtonDown(UINT nFlags, CPoint point) 
{
	SetBitmap(m_hDown_Focus);
	
	CButton::OnLButtonDown(nFlags, point);
}

void CyctBitmapButton2::OnLButtonUp(UINT nFlags, CPoint point) 
{
	SetBitmap(m_hIn_Focus);
	
	CButton::OnLButtonUp(nFlags, point);
}

LRESULT CyctBitmapButton2::OnMouseLeave(WPARAM wParam, LPARAM lParam)   
{ 
	//AfxMessageBox(_T("CyctBitmapButton2::OnMouseLeave"));
	if(this == GetFocus())//判断自己是否有焦点
		SetBitmap(m_hOut_Focus);		
	else
		SetBitmap(m_hOut);

	return 0;   
}  

void CyctBitmapButton2::OnSetFocus(CWnd* pOldWnd) 
{
//使函数体为空,去掉了虚框

	//CButton::OnSetFocus(pOldWnd);
	
	// TODO: Add your message handler code here
	
}

void CyctBitmapButton2::OnKillFocus(CWnd* pNewWnd) 
{
	CButton::OnKillFocus(pNewWnd);
	
	SetBitmap(m_hOut);
	
}

⌨️ 快捷键说明

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