|  | 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. | 
|  |  |