1,650
社区成员
发帖
与我相关
我的任务
分享
#pragma once
// CCustomButton
class CCustomButton : public CButton
{
DECLARE_DYNAMIC(CCustomButton)
public:
CCustomButton();
virtual ~CCustomButton();
protected:
DECLARE_MESSAGE_MAP()
public:
// afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
public:
BOOL m_IsPressed;//鼠标是否按下
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
CBrush m_Brush;
virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/);
};
CCustomButton::CCustomButton()
{
m_IsPressed = FALSE;
}
void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
CRect rect;
//GetClientRect(&rect);
//得到原先按扭区域
rect = lpDrawItemStruct->rcItem;
CDC dc;
//连接到设备环境,(我喜欢称设备上下文为设备环境)
dc.Attach(lpDrawItemStruct->hDC);
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(255,100,0));
}
CString str;
GetWindowText(str);
//写上文本
dc.DrawText(str,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
删除设备环境
dc.DeleteDC();
}
void CCustomButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_IsPressed = FALSE;
CButton::OnLButtonUp(nFlags, point);
}
BOOL CCustomButton::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return CButton::OnEraseBkgnd(pDC);
}