📄 xbutton.cpp
字号:
// XButton.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "XButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CXButton
HWND CXButton::m_hWndToolTip = NULL;
CXButton::CXButton()
{
m_bDown = FALSE;
m_bUp = FALSE;
m_hMemDC = NULL;
}
CXButton::~CXButton()
{
if (m_hMemDC != NULL) DeleteDC(m_hMemDC);
}
BEGIN_MESSAGE_MAP(CXButton, CStatic)
//{{AFX_MSG_MAP(CXButton)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CXButton message handlers
void CXButton::OnPaint()
{
CPaintDC dc(this); // device context for painting
ModifyStyle(0,SS_NOTIFY);
CRect rect;
GetClientRect(&rect);
if(m_hMemDC == NULL)
m_hMemDC = CreateCompatibleDC(dc.m_hDC);
UINT nID = m_bDown?m_nImageDown:m_nImageUp;
if(!IsWindowEnabled())
{
nID = m_nImageDisabled;
if(m_bDown)
{
ReleaseCapture();
m_bDown = FALSE;
}
}
HBITMAP hBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(nID));
HBITMAP hOldBMP = (HBITMAP)SelectObject(m_hMemDC,hBitmap);
BitBlt(dc.m_hDC,rect.left,rect.top,rect.Width(),rect.Height(),m_hMemDC,0,0,SRCCOPY);
SelectObject(m_hMemDC,hOldBMP);
DeleteObject(hBitmap);
}
BOOL CXButton::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CXButton::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SendMessage(WM_LBUTTONDOWN,nFlags,MAKELPARAM(point.x,point.y));
}
void CXButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_bDown = TRUE;
Invalidate();
//sparrow.shi
if(!IsWindowEnabled())
{
m_bDown = FALSE;
return;
}
//sparrow.shi
SetCapture();
SetFocus();
m_bUp = FALSE;
// Default();
}
void CXButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bDown)
{
m_bDown = FALSE;
Invalidate();
ReleaseCapture();
CRect rect;
GetClientRect(&rect);
//if(::PtInRect(&rect,point) && m_bDown)
if(::PtInRect(&rect,point))
{
m_bUp = TRUE;
m_bDown = FALSE;
int nID = GetDlgCtrlID();
GetParent()->SendMessage(WM_COMMAND ,MAKEWPARAM(nID,0),(LPARAM)m_hWnd);
}
}
CStatic::OnLButtonUp(nFlags, point);
}
void CXButton::LoadBitmaps(UINT nUP, UINT nDown,UINT nDisabled)
{
m_nImageUp = nUP;
m_nImageDown = nDown;
m_nImageDisabled = nDisabled;
Invalidate();
}
void CXButton::Show()
{
ShowWindow(SW_SHOW);
}
void CXButton::Hide()
{
ShowWindow(SW_HIDE);
}
void CXButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(GetCapture() != this)
{
m_bDown = FALSE;
ReleaseCapture();
}
Invalidate();
CStatic::OnMouseMove(nFlags, point);
}
BOOL CXButton::isUp()
{
return m_bUp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -