This is basically the same thing as The dangers of playing focus games when handling a WM_KILLFOCUS message, just with activation in place of focus. One developer discovered the hard way that if you mess with activation inside your WM_ACTIVATE handler, things get weird. The author noted that if he posted a message and did the work from the posted message, then everything came out okay.
A follow-up to the original message noted that passing the
SWP_NOACTIVATE flag to the
SetWindowPos function solves the problem. Do you understand why?