So far so good but this is where it all falls apart. When the parent window is moved, the SDL window does not move with it. You get an effect where the clipping rectangle moves but the contents of the window stay put.

This took me days to figure out. It tried messsing about with WM_MOVE handlers and using offsets on my SDL_UpdateRect() coordinates and all kinds of crazy stuff but in the end I found two important facts:

The SDL window does not receive WM_MOVE noftifications from its parent

Using MoveWindow to set the position of the SDL window does not work if the new coordinates are the same as the current coordinates (that was the tough one to work out)

Since I am using SDL to play video, I am constantly updating the window all the time. This means I can use a test in my update function to check if the window has moved. If so, I need to use two calls to MoveWindow to fool SDL into moving. If you are not doing animation, perhaps you could use a timer call or something to achieve the same result. Anyway, here is the code: