A Screen is represented in the code by an object derived from the parent Screens abstract class. The main game loop gets messages and passes the ones the active Screen wants to the active Screens object. The only thing the Screens derived object must do is have a constructor and destructor and pass a CDXScreen object to the Screen member. If you have no clue what I'm talking about it's because you don't know C++, so just skip this part. The Screens object has total control of the game until it makes another screen active. This is how we'll be designing the User Interface. Also the screens can use dialogs, and windows controls if they like, they just have to stay away from windows menus because they slow the game way down.