控件响应鼠标操作事件中,判断IsIdle()作用

本文介绍了一个名为CxxBtn的类如何通过枚举状态管理鼠标事件,包括鼠标按下、移动和释放等操作,并展示了如何确保组件在不同状态间的正确转换。

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

头文件

enum E_STATUS

{
E_UNINIT = 1,
E_MOVE,

};

E_STATUS m_status;

cpp文件

m_status = E_UNINIT;


void CxxBtn::OnLButtonDown(UINT nFlags, POINT point)
{
switch (m_status)
{
case E_UNINIT:
{
SetCapture();

m_status = E_MOVE;
}
break;
case E_MOVE:
break;
default:
ASSERT(FALSE);
break;
}
}


void CxxBtn::OnMouseMove(UINT nFlags, POINT point)
{
switch(m_status)
{
case E_UNINIT:
break;
case E_MOVE:
{

}
break;
default:
break;
}
}


void CxxBtn::OnLButtonUp(UINT nFlags, POINT point)
{
switch(m_status)
{
case E_UNINIT:
break;
case E_MOVE:
{
ReleaseCapture();
m_status = E_UNINIT;
}
break;
default:
ASSERT(FALSE);
break;
}
}

//此处不能遗漏

void CxxBtn::OnLoseCapture()
{
switch(m_status)
{
case E_UNINIT:
break;
case E_MOVE:
{
m_status = E_UNINIT;
}
break;
default:
ASSERT(FALSE);
break;
}
}

//最后根据m_nState,判断是否是IsIdle()

BOOL CxxBtn::IsIdle() const
{
return ( STATE_NORMAL == m_nState);
}


//应用

oid CxxBtn::Click(BOOL bAni /* = TRUE */)
{
if (!IsIdle())
{
return;    //不是idle状态,不能相应Click事件,防止控件错乱相应外部事件,造成奇怪的效果
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值