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