通常、クライアント領域から離れてしまえば、マウス関連のメッセージが飛んでこなくなるので、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);
}ネタ元