Twgui is bitmap-oriented, and relies on the allegro library for its drawing operations. In twgui, a window defines the framework of graphics and buttons. The window is defined by a bitmap. Buttons and Areas are defined by smaller bitmaps, which are drawn onto the window or can be sub-bitmaps of the window bitmap.
Buttons are usually small and simple and are used for catching simple user clicks.
Areas usually have larger bitmaps and can cover the better part of a window (it's possible to cover the whole window, but then the use of a window becomes meaningless). This allows one to draw game content directly onto one (or more) of the Area bitmaps. In this way, twgui defines a fairly complete and straightforward framework for displaying game content.
Downside of the use of static bitmaps is, that twgui does not support a dynamic pull-down menu structure, such as is found in many windows applications. However, don't fret; this limitation forces the game designer to create simple (ie not too much information at once), intuitive layouts for your game. Also, relatively complex behaviour can still be generated by the use of different popup windows, e.g. for a file browser. As such, I think twgui is quite suitable for games.
Codewise, twgui is object-oriented and all objects in the menu are derived from two classes: the TWindow class, and the ButtonBase class. TWindow manages a list of buttons associated to the window and determines where they are drawn; the buttons check user i/o. It is relatively easy to create a new object with slightly different behaviour for use in a specific part of the game. Each button has a boolean flag value, through which one can inspect their state. More advanced button/area objects have additional ways of accessing their state. It is also possible to tie button behaviour to your Game::functions, through use of a template.It is possible to store the window in video memory, which takes less time to render.
Note that the more detail one adds to the menu layout, the less efficient it will be to draw them onto the video screen, because the drawing operation will make use of a more efficient, encoded bitmap (which is created at runtime).
All buttons must have different bitmaps. If some are identical, it will not be possible to auto locate those buttons.
It is possible to override auto location in your program. This can be useful if you want to create an array of buttons for some purpose.
No pull-down menus.
Supports only true color modes.