📄 custombutton.cpp
字号:
// CustomButton.cpp : implementation file
//
#include "stdafx.h"
#include "Practical.h"
#include "CustomButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCustomButton
CCustomButton::CCustomButton()
{
m_IsPressed = FALSE;
}
CCustomButton::~CCustomButton()
{
}
BEGIN_MESSAGE_MAP(CCustomButton, CButton)
//{{AFX_MSG_MAP(CCustomButton)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCustomButton message handlers
void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CRect rect;
GetClientRect(rect);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
//设置背景透明
dc.SetBkMode(TRANSPARENT);
//创建一个位图画刷
CBrush m_Brush; //声明画刷对象
m_Brush.CreateStockObject(NULL_BRUSH); //创建画刷
dc.SelectObject(&m_Brush);
if(m_IsPressed)
{
CPen pen(PS_SOLID,2,RGB(255,100,0));
dc.SelectObject(&pen);
//根据位图大小设置按钮显示区域
HRGN h_rgn = CreateRoundRectRgn(0,0,rect.right,rect.bottom,
rect.Width()/2,rect.Height());
SetWindowRgn(h_rgn,true);
dc.RoundRect(0,0,rect.right,rect.bottom,rect.Width()/2,rect.Height());
dc.SetTextColor(RGB(255,100,0));
}
else
{
CPen pen(PS_SOLID,2,RGB(198,198,198));
dc.SelectObject(&pen);
//根据位图大小设置按钮显示区域
HRGN h_rgn = CreateRoundRectRgn(0,0,rect.right,rect.bottom,
rect.Width()/2,rect.Height());
SetWindowRgn(h_rgn,true);
dc.RoundRect(0,0,rect.right,rect.bottom,rect.Width()/2,rect.Height());
dc.SetTextColor(RGB(0,0,0));
}
//绘制按钮文本
CString str;
GetWindowText(str);
dc.DrawText(str,CRect(0,0,rect.right,rect.bottom),
DT_CENTER|DT_VCENTER|DT_SINGLELINE);
dc.DeleteDC();
}
void CCustomButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_IsPressed = TRUE;
CButton::OnLButtonDown(nFlags, point);
}
void CCustomButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_IsPressed = FALSE;
CButton::OnLButtonUp(nFlags, point);
}
BOOL CCustomButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return true;//CButton::OnEraseBkgnd(pDC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -