How to make an SDL window the child of another window in Win32
How to make an SDL window the child of another window in Win32This had me beating my head against the wall for days. Now as you know, It is fairly straightforward to open an SDL surface in a window:
The SDL_NOFRAME option removes the window borders so the window is now ready to become a child window. Next we need to obtain the SDL window’s HWND
Now we can parent it to our window:
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:
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:
|
还没有评论,来说两句吧...