マウスがクライアント領域に入った/外れたを判別する

通常、クライアント領域から離れてしまえば、マウス関連のメッセージが飛んでこなくなるので、SetCapture()で捕まえておいて、外れるときにReleaseCapture()で解放する。


例:

void CHogeButton::OnMouseMove(UINT nFlags, CPoint point)
{
  CRect rect;
  GetClientRect(rect);

  if(PtInRect(rect, point)){
    if(NULL == GetCapture()){
      SetCapture(); <--①
      m_bHover = true;
      RedrawWindow();
    }
  }
  else{
    if(NULL != GetCapture() ){
      ReleaseCapture(); <--②
      m_bHover = false;
      RedrawWindow();
    }
  }

  CButton::OnMouseMove(nFlags, point);
}

ネタ元