While working with the CGUIManager::PushPage function in D1684, it was proposed to move code into the SGUIPage constructor.
Trying to move the LoadPage call into the ctor revealed that GetPreDefinedColor access the predefined colors (such as black or white) from the topmost page, rather than the current page.
This is a defect, because the different pages might want to load different or less files.
(The Load call still can't be moved to the ctor as it messes up the stack order, for example for the lobby login page, but that's offtopic).
There are more occurrences where top() is called instead of all GUI pages or the current GUI page, so there will be more refactoring to come.
That GUIObjects can't be constructed without knowing about the UI is already manifest in the header:
// An object can't function stand alone CGUI *m_pGUI;
and there are some tangential calls removed where SetGUI was called to cover up this defect (late init instead of ctor init).