/*
EmWindow is the cross-platform object representing the window that
displays the emulation. It is not the actual thing that appears on
the monitor as a window, but merely deals with cross-platform
aspects of handling it, such as updating its contents, changing
skins, etc.
EmWindow handles all the cross-platform issues. It can deal with
the upper-level parts of updating the LCD area, wiggling the window
if the vibrator is going, changing skins, etc.
EmWindow manages most of the platform-specific aspects by defining
HostFoo methods, which are then defined differently on each
platform. These HostFoo methods are implemented in
EmWindow<Host>.cpp.
EmWindow<Host> is also defined in EmWindow<Host>.cpp, and holds any
platform-specific data (such as the HWND on Windows, etc.). It
declares and implements any support functions needed on that
particular platform, but which can't be declared in EmWindow because
either not all platforms need those functions, or they involve
platform-specific types.
One creates a window by calling "window = new EmWindow<Host>;"
followed by "window->WindowInit();". Cross-platform code can then
call high-level functions in EmWindow such as HandleUpdate and
HandlePen. Platform-specific code can perform platform-specific
operations. When it's time to close the window, call
"window->WindowDispose();" followed by "delete window;"
*/