Let me explain you how I am doing this. It will be a skin-based library, where each control has its textures and a parameter XML file. To build a window dialog for example, you can do it programmaticaly, or store it on a XML file.
Currently, there will be no caching, every control will be redrawn every frame, even if it didn't change a bit. I did it this way to save memory resources.
Class hierarchy:
Control|-- Button|-- TextBox|-- ControlContainer |-- Window |-- GUI
I don't know if it is the best way to set up things, but I think it could work. Currently, there is only buttons and textboxes but I plan to add listboxes, dropdowns, checkboxes and radio buttons. Also, there will be a couple of custom controls specifics to the soccer game.
Right now, I am working on the Focusing stuff (click on a window and it gets to the front, click a textbox to write text on it, etc). I will keep you updated!
Cheers,
Leandro