我在自绘Button类中:
void CShade3dButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( !m_bOver )
{
SetCapture();
this->Invalidate(FALSE);
}
else
{
ASSERT(GetCapture() == this);
CRect rect;
GetClientRect(&rect); if ( !rect.PtInRect( point))
{
m_bOver = FALSE;
Invalidate(FALSE);
ReleaseCapture(); }
}
CButton::OnMouseMove(nFlags, point);
}如果仅仅是鼠标移动,没有单击按钮,则可以检测到over,out。
但是一旦我单击了按钮,则不能检测到over,out事件。并且当加入了
ASSERT(GetCapture() == this);
后,发现居然出现断言失败。疑问:
SetCapture()设置后,如果又有一个窗口也做了这个设置,那此时到底是谁在capure?
为什么会出现断言失败?
void CShade3dButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( !m_bOver )
{
SetCapture();
this->Invalidate(FALSE);
}
else
{
ASSERT(GetCapture() == this);
CRect rect;
GetClientRect(&rect); if ( !rect.PtInRect( point))
{
m_bOver = FALSE;
Invalidate(FALSE);
ReleaseCapture(); }
}
CButton::OnMouseMove(nFlags, point);
}如果仅仅是鼠标移动,没有单击按钮,则可以检测到over,out。
但是一旦我单击了按钮,则不能检测到over,out事件。并且当加入了
ASSERT(GetCapture() == this);
后,发现居然出现断言失败。疑问:
SetCapture()设置后,如果又有一个窗口也做了这个设置,那此时到底是谁在capure?
为什么会出现断言失败?
SetCapture()后加上:
m_bOver = TRUE ;
CShade3dButton::CShade3dButton()
{
m_bOver = FALSE;
}void CShade3dButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( !m_bOver )
{
SetCapture();
m_bOver = TRUE;
this->Invalidate(FALSE);
}
else
{
ASSERT(GetCapture() == this);
CRect rect;
GetClientRect(&rect); if ( !rect.PtInRect( point))
{
m_bOver = FALSE;
Invalidate(FALSE);
ReleaseCapture(); }
}
CButton::OnMouseMove(nFlags, point);
}
{ CWnd *pWnd = GetCapture() ; CRect rect;
GetClientRect(&rect); if ( !rect.PtInRect( point))
{
if( m_bOver )
Invalidate(FALSE);
m_bOver = FALSE;
if( pWnd == this )
ReleaseCapture();
}
else
{
if( !pWnd )
SetCapture();
if( !m_bOver )
Invalidate(FALSE);
m_bOver = TRUE;
}
CButton::OnMouseMove(nFlags, point);
}