The system redraws the cursor with the windows class cursor every time the mouse moves. Handle the WM_SETCURSOR message to use the hand cursor when appropriate.
And a general observation - you can load the hand cursor once and save the handle in a member variable. You don't need to load it multiple times in the OnMouseMove handler. Use a different flag to determine when the hand cursor should be shown.