@node Part IV Introduction
@chapter Introduction

Earlier chapters discussed ways to build user interfaces by combining
suitable objects from the Forms Library, defining a few object
callbacks and using Xlib functions. However, there is always a
possibility that the built-in objects of the Forms Library might not
be enough. Although free objects in principle provide all the
flexibility a programmer needs, there can be situations where it is
beneficial to create new types of objects, for example switches or
joysticks or other types of sliders, etc. In these cases, a programmer
can use the architecture defined by the Forms Library to create a
new object class that will work smoothly with the built-in or
user-created object classes.

Creating such new object classes and adding them to the library is
simpler than it sounds. In fact it is almost the same as making a free
object. This part gives you all the details of how to add new classes.
In chapter 24 a global architectural overview is given of how the
Forms Library works and how it communicates with the different object
classes by means of events (messages). Chapter 25 describes in detail
what type of events objects can receive and how they should react to
them. Chapter 26 describes in detail the structure of the type
@code{FL_OBJECT} which plays a crucial role, a role equivalent to a
superclass (thus all other object classes have @code{FL_OBJECT} as
their parent class) in object-oriented programming.

One of the important aspects of an object is how to draw it on the
screen. Chapter 27 gives all the details on drawing objects. The Forms
Library contains a large number of routines that help you draw
objects. In this chapter an overview is given of all of them. Chapter
28 gives an example illustrating on how to create a new object class.
Due to the importance of button classes, special routines are provided
by the Forms Library to facilitate the creation of this particular
class of objects. Chapter 29 illustrates by two examples the
procedures of creating new button classes using the special services.
One of the examples is taken from the Forms Library itself and the
other offers actual usability.

Sometimes it might be desirable to alter the behavior of a built-in
class slightly. Obviously a full-blown (re)implementation from scratch
of the original object class is not warranted. Chapter 30.1 discusses
the possibilities of using the pre-emptive handler of an object to
implement derived objects.
