给CButton 置灰但图片显示

本文详细介绍了C++中CButtonEx类的实现,该类扩展了CButton,提供了在按钮启用状态下,对键盘快捷键和鼠标双击事件的拦截与处理。通过预处理消息函数,可以根据按钮是否启用状态来决定是否响应用户的输入操作,有效提高了用户界面的交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//CButtonEx.h


class CButtonEx : public CButton

{
DECLARE_DYNAMIC(CButtonEx)

public:
CButtonEx();
virtual ~CButtonEx();

protected:
DECLARE_MESSAGE_MAP()
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);

public:
void SetButtonEnable(BOOL bEnable = TRUE);

private:
BOOL m_bEnable;

};


//CButtonEx.cpp

#include "ButtonEx.h"

IMPLEMENT_DYNAMIC(CButtonEx, CButton)

CButtonEx::CButtonEx()
: m_bEnable(TRUE)
{

}

CButtonEx::~CButtonEx()
{
}


BEGIN_MESSAGE_MAP(CButtonEx, CButton)
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()



// CButtonEx message handlers



BOOL CButtonEx::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN
|| pMsg->message == WM_KEYUP)
{
if (!m_bEnable && (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE))
{
return TRUE;
}
}

return CButton::PreTranslateMessage(pMsg);
}

void CButtonEx::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CButton::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CButtonEx::OnLButtonDown(UINT nFlags, CPoint point)
{
if(!m_bEnable)
{
return;
}

CButton::OnLButtonDown(nFlags, point);
}

void CButtonEx::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if(!m_bEnable)
{
return;
}

CButton::OnLButtonDblClk(nFlags, point);
}

void CButtonEx::SetButtonEnable(BOOL bEnable)
{
m_bEnable = bEnable;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值