Resize your child controls in WM_SIZE and leave those other messages alone (letting them go to DefWindowProc).
There's a user-setting that controls whether windows are updated as they're sized. If you try to do what you're doing, you'll be overriding that setting, which is a rude thing to do to your users.
If the setting is enabled (which it is by default on modern version of Windows), your top-level window will receive WM_SIZE messages and WM_PAINT during the resize operation.