头文件
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事件,防止控件错乱相应外部事件,造成奇怪的效果
}
}