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

📄 mdfbutton.cpp

📁 MDF监控源码2
💻 CPP
字号:
// MDFButton.cpp : implementation file
//

#include "stdafx.h"
#include "MDF.h"
#include "MDFButton.h"
#include "MDFDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMDFButton

//##ModelId=465286A102AF
CMDFButton::CMDFButton()
{
	m_bEnable = TRUE ; //按钮是否可用。
	m_bFocus = FALSE ;
	m_uiType = 0 ;
}

//##ModelId=465286A102F2
CMDFButton::~CMDFButton()
{
}


BEGIN_MESSAGE_MAP(CMDFButton, CWnd)
	//{{AFX_MSG_MAP(CMDFButton)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMDFButton message handlers

//##ModelId=465286A102CE
void CMDFButton::Create(UINT id,UINT Type,CWnd *pParentWnd,int x,int y,int Width,int Height,CString pic,UINT Msg)
{
	m_pWnd = pParentWnd ;
	m_uiID = id ;
	m_uiBNMsg = Msg ;
	m_uiType = Type ;
	CRect rc ;
	rc.left = x ;
	rc.top = y ;
	rc.right = x + Width ;
	rc.bottom = y + Height ;
	this->CreateEx(NULL,::AfxRegisterWndClass(CS_VREDRAW|CS_HREDRAW,::LoadCursor(NULL,MAKEINTRESOURCE(32649))),NULL,WS_CHILD|WS_TABSTOP|WS_VISIBLE,rc,pParentWnd,NULL) ;
	m_Bmp.bmpImage.Attach((HBITMAP)::LoadImage(AfxGetInstanceHandle(),pic,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE) );
	m_Bmp.bmpImage.GetBitmap(&m_Bmp.bmpInfo) ;
	m_Bmp.BNWidth = m_Bmp.bmpInfo.bmWidth/4 ;
}

//##ModelId=465286A102FE
void CMDFButton::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	if(m_bEnable) ShowBN(0,&dc) ;
	else ShowBN(3,&dc) ;
	
	// Do not call CWnd::OnPaint() for painting messages
}

//##ModelId=465286A10300
void CMDFButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	// 鼠标在按钮上移动将获得焦点
	if( !m_bFocus && m_bEnable == TRUE )
	{
		TakeFocus() ;
		::SendMessage(m_pWnd->m_hWnd , m_uiBNMsg , m_uiID, BN_MOUSEON) ; 

	}

	CWnd::OnMouseMove(nFlags, point);
}

//##ModelId=465286A102C3
void CMDFButton::LoseFocus()
{
	m_bFocus = FALSE ;
	CDC *pDC = this->GetDC() ;
	ShowBN( 0 , pDC ) ;
}

//##ModelId=465286A102C0
void CMDFButton::ShowBN(int n , CDC* pDC)
{
	//按钮状态:0--正常;1--获得焦点 ;2--按下按钮;3--按钮不能用
	CDC memDC ;
	CRect rc ;
	CBitmap* pOld ;

	memDC.CreateCompatibleDC(pDC) ;
	pOld = memDC.SelectObject(&m_Bmp.bmpImage) ;
	GetWindowRect(&rc) ;
	ScreenToClient(&rc) ;

	pDC->StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&memDC,n*m_Bmp.BNWidth,0,m_Bmp.bmpInfo.bmWidth/4,m_Bmp.bmpInfo.bmHeight,SRCCOPY) ;	
	memDC.SelectObject(pOld) ;
	memDC.DeleteDC() ;
}

//##ModelId=465286A1030E
void CMDFButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	if(m_bEnable)
	{
		::SendMessage(m_pWnd->m_hWnd , m_uiBNMsg , m_uiID, BN_MOUSEDOWN) ; 
		ShowBN( 2 , this->GetDC() ) ;
	}
	//m_bEnable = FALSE ;

	CWnd::OnLButtonDown(nFlags, point);
}

//##ModelId=465286A102BF
void CMDFButton::TakeFocus()
{
	m_bFocus = TRUE ;
	ShowBN( 1 , this->GetDC() ) ; // 1 -- 鼠标移到按钮上的显示
}

//##ModelId=465286A1031E
void CMDFButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// 普通按钮的点击鼠标显示
	if( m_uiType == TYPE_NORMAL)
	{
		ShowBN(1,this->GetDC()) ;
		::SendMessage(m_pWnd->m_hWnd , m_uiBNMsg , m_uiID, BN_MOUSEUP) ; 
	}
	CWnd::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

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