Here is our window wrapper from before with a few adjustments. We want to be able to grab focus and we want to tell if
the window is shown so we add functions to do that.

Each window is going to have their own renderer so we add a member variable for that. We also keep track of the window ID to tell which events belong to which window and we also
added a flag to keep track of whether the window is shown.

Here is our window and renderer creation code. It is pretty much the same as we have always done it, only now it's happening inside our wrapper class. We do have to make sure to grab
the window ID after creating the window as we'll need the ID for event handling.

When you have multiple windows, Xing out the window doesn't necessarily mean we're quitting the program. What we're going to do instead is have each window hide when Xed out. So
we'll need keep track of when the window is hidden/shown by checking for SDL_WINDOWEVENT_SHOWN/SDL_WINDOWEVENT_HIDDEN events.

Here is our function for grabbing focus to a window. First we check if our window is even being shown and then show it with
SDL_ShowWindow if it isn't being shown. Next we call
SDL_RaiseWindow to focus the window.

Next we render all the windows and then go through all the windows to check if any of them are shown. If all of them have been closed out we set the quit flag to true to end the
program.

Now in this demo we did not actually render anything inside of the windows. This would involve having to manage renderers and windows and having them share resources. There is no
right way to do this and the best way depends entirely on what type of application you're building. I recommend reading through the SDL documentation to understand how renderers work
and then experimenting to figure out the best way for you to manage your resources.