📄 mdfbutton.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 + -