| xfa/fwl is a Widget Library for XFA Forms. | 
 |  | 
 | CFWL_Widget is the base class that widget classes extend. The derived widget | 
 | classes are both controllers and renderers for each widget. The hierarchy is: | 
 |  | 
 | * CFWL_Widget | 
 |     * CFWL_Form | 
 |     * CFWL_Caret | 
 |     * CFWL_CheckBox | 
 |     * CFWL_ComboBox | 
 |     * CFWL_DateTimePicker | 
 |     * CFWL_Edit | 
 |         * CFWL_Barcode | 
 |         * CFWL_ComboEdit | 
 |         * CFWL_DateTimeEdit | 
 |     * CFWL_ListBox | 
 |         * CFWL_ComboList | 
 |     * CFWL_MonthCalendar | 
 |     * CFWL_PictureBox | 
 |     * CFWL_PushButton | 
 |     * CFWL_ScrollBar | 
 |     * CFWL_SpinButton | 
 |  | 
 | These CFWL widgets are instantiated by and closely related to the CXFA classes | 
 | in the xfa/fxfa directory. See xfa/fxfa/README.md. | 
 |  | 
 | CFWL_Widget implements IFWL_WidgetDelegate through which it receives messages, | 
 | events and draw calls. | 
 |  | 
 | Messages consist of user input for a widget to handle. Each type of message is | 
 | identified by an enum value in Message::Type and has its own class derived from | 
 | the base CFWL_Message. | 
 |  | 
 | * CFWL_Message | 
 |     * CFWL_MessageKey | 
 |     * CFWL_MessageKillFocus | 
 |     * CFWL_MessageMouse | 
 |     * CFWL_MessageMouseWheel | 
 |     * CFWL_MessageSetFocus | 
 |  | 
 | Events are originated in the widgets and are then handled by other CFWL_Widget | 
 | and CXFA classes. | 
 |  | 
 | * CFWL_Event | 
 |     * CFWL_EventCheckWord | 
 |     * CFWL_EventMouse | 
 |     * CFWL_EventScroll | 
 |     * CFWL_EventSelectChanged | 
 |     * CFWL_EventTextWillChange | 
 |     * CFWL_EventValidate | 
 |  | 
 | The widgets use IFWL_ThemeProvider for rendering everything, calling | 
 | DrawBackground() and DrawText() and passing many options in their parameters, | 
 | respectively of types CFWL_ThemeBackground and CFWL_ThemeText. See | 
 | xfa/fwl/theme/README.md. | 
 |  |