Make code compile with clang_use_chrome_plugin (part VI)

This change mainly contains files in xfa/fwl directory.
This is part of the efforts to make PDFium code compilable
by Clang chromium style plugins.

The changes are mainly the following:
-- move inline constructor/destructor of complex class/struct out-of-line;
-- add constructor/destructor of complex class/struct if not
 explicitly defined;
-- add explicit out-of-line copy constructor when needed;
-- move inline virtual functions out-of-line;
-- Properly mark virtual functions with 'override';
-- some minor cleanups;

BUG=pdfium:469

Review-Url: https://codereview.chromium.org/2070583003
diff --git a/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp b/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
index 6df6fb3..bf534a7 100644
--- a/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
+++ b/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
@@ -1181,3 +1181,30 @@
   rtInvalidate.Inflate(2, 2);
   m_pOwner->Repaint(&rtInvalidate);
 }
+
+CFWL_DateTimePickerImp::CFWL_MonthCalendarImpDP::CFWL_MonthCalendarImpDP() {
+  m_iCurYear = 2010;
+  m_iCurMonth = 3;
+  m_iCurDay = 29;
+}
+
+FWL_Error CFWL_DateTimePickerImp::CFWL_MonthCalendarImpDP::GetCaption(
+    IFWL_Widget* pWidget,
+    CFX_WideString& wsCaption) {
+  return FWL_Error::Succeeded;
+}
+
+int32_t CFWL_DateTimePickerImp::CFWL_MonthCalendarImpDP::GetCurDay(
+    IFWL_Widget* pWidget) {
+  return m_iCurDay;
+}
+
+int32_t CFWL_DateTimePickerImp::CFWL_MonthCalendarImpDP::GetCurMonth(
+    IFWL_Widget* pWidget) {
+  return m_iCurMonth;
+}
+
+int32_t CFWL_DateTimePickerImp::CFWL_MonthCalendarImpDP::GetCurYear(
+    IFWL_Widget* pWidget) {
+  return m_iCurYear;
+}
diff --git a/xfa/fwl/basewidget/fwl_datetimepickerimp.h b/xfa/fwl/basewidget/fwl_datetimepickerimp.h
index 8490324..5ec22c1 100644
--- a/xfa/fwl/basewidget/fwl_datetimepickerimp.h
+++ b/xfa/fwl/basewidget/fwl_datetimepickerimp.h
@@ -58,33 +58,40 @@
  public:
   CFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties,
                     IFWL_Widget* pOuter);
-  virtual FWL_Error Initialize();
-  virtual FWL_Error Finalize();
+
+  // CFWL_EditImp
+  FWL_Error Initialize() override;
+  FWL_Error Finalize() override;
 
  protected:
   friend class CFWL_DateTimeEditImpDelegate;
 };
+
 class CFWL_DateTimeEditImpDelegate : public CFWL_EditImpDelegate {
  public:
   CFWL_DateTimeEditImpDelegate(CFWL_DateTimeEdit* pOwner);
   void OnProcessMessage(CFWL_Message* pMessage) override;
 
- private:
-  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
-
  protected:
   CFWL_DateTimeEdit* m_pOwner;
+
+ private:
+  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
 };
+
 class CFWL_DateTimeCalendar : public CFWL_MonthCalendarImp {
  public:
   CFWL_DateTimeCalendar(const CFWL_WidgetImpProperties& properties,
                         IFWL_Widget* pOuter);
-  virtual FWL_Error Initialize();
-  virtual FWL_Error Finalize();
+
+  // CFWL_MonthCalendarImp
+  FWL_Error Initialize() override;
+  FWL_Error Finalize() override;
 
  protected:
   friend class CFWL_DateTimeCalendarImpDelegate;
 };
+
 class CFWL_DateTimeCalendarImpDelegate : public CFWL_MonthCalendarImpDelegate {
  public:
   CFWL_DateTimeCalendarImpDelegate(CFWL_DateTimeCalendar* pOwner);
@@ -94,14 +101,15 @@
   void OnLButtonUpEx(CFWL_MsgMouse* pMsg);
   void OnMouseMoveEx(CFWL_MsgMouse* pMsg);
 
- private:
-  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
-  void DisForm_OnLButtonUpEx(CFWL_MsgMouse* pMsg);
-
  protected:
   CFWL_DateTimeCalendar* m_pOwner;
   FX_BOOL m_bFlag;
+
+ private:
+  void DisForm_OnProcessMessage(CFWL_Message* pMessage);
+  void DisForm_OnLButtonUpEx(CFWL_MsgMouse* pMsg);
 };
+
 class CFWL_DateTimePickerImp : public CFWL_WidgetImp {
  public:
   CFWL_DateTimePickerImp(const CFWL_WidgetImpProperties& properties,
@@ -127,7 +135,6 @@
                         int32_t nStart = 0,
                         int32_t nCount = -1) const;
 
- public:
   FX_BOOL CanUndo();
   FX_BOOL CanRedo();
   FX_BOOL Undo();
@@ -145,11 +152,32 @@
   FWL_Error SetEditLimit(int32_t nLimit);
   FWL_Error ModifyEditStylesEx(uint32_t dwStylesExAdded,
                                uint32_t dwStylesExRemoved);
-
- public:
   IFWL_DateTimeEdit* GetDataTimeEdit();
 
  protected:
+  friend class CFWL_DateTimeEditImpDelegate;
+  friend class CFWL_DateTimeCalendar;
+  friend class CFWL_DateTimeCalendarImpDelegate;
+  friend class CFWL_DateTimePickerImpDelegate;
+
+  class CFWL_MonthCalendarImpDP : public IFWL_MonthCalendarDP {
+   public:
+    CFWL_MonthCalendarImpDP();
+
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
+
+    // IFWL_MonthCalendarDP
+    int32_t GetCurDay(IFWL_Widget* pWidget) override;
+    int32_t GetCurMonth(IFWL_Widget* pWidget) override;
+    int32_t GetCurYear(IFWL_Widget* pWidget) override;
+
+    int32_t m_iCurDay;
+    int32_t m_iCurYear;
+    int32_t m_iCurMonth;
+  };
+
   void DrawDropDownButton(CFX_Graphics* pGraphics,
                           IFWL_ThemeProvider* pTheme,
                           const CFX_Matrix* pMatrix);
@@ -163,6 +191,19 @@
   void InitProxyForm();
   void ProcessSelChanged(int32_t iYear, int32_t iMonth, int32_t iDay);
 
+  CFX_RectF m_rtBtn;
+  CFX_RectF m_rtClient;
+  int32_t m_iBtnState;
+  int32_t m_iYear;
+  int32_t m_iMonth;
+  int32_t m_iDay;
+  FX_BOOL m_bLBtnDown;
+  std::unique_ptr<IFWL_DateTimeEdit> m_pEdit;
+  std::unique_ptr<IFWL_DateTimeCalender> m_pMonthCal;
+  std::unique_ptr<IFWL_DateTimeForm> m_pForm;
+  FX_FLOAT m_fBtn;
+  CFWL_MonthCalendarImpDP m_MonthCalendarDP;
+
  private:
   FWL_Error DisForm_Initialize();
   void DisForm_InitDateTimeCalendar();
@@ -176,47 +217,13 @@
   FWL_Error DisForm_GetBBox(CFX_RectF& rect);
   FWL_Error DisForm_DrawWidget(CFX_Graphics* pGraphics,
                                const CFX_Matrix* pMatrix = NULL);
-
- protected:
-  CFX_RectF m_rtBtn;
-  CFX_RectF m_rtClient;
-  int32_t m_iBtnState;
-  int32_t m_iYear;
-  int32_t m_iMonth;
-  int32_t m_iDay;
-  FX_BOOL m_bLBtnDown;
-  std::unique_ptr<IFWL_DateTimeEdit> m_pEdit;
-  std::unique_ptr<IFWL_DateTimeCalender> m_pMonthCal;
-  std::unique_ptr<IFWL_DateTimeForm> m_pForm;
-  FX_FLOAT m_fBtn;
-  class CFWL_MonthCalendarImpDP : public IFWL_MonthCalendarDP {
-   public:
-    CFWL_MonthCalendarImpDP() {
-      m_iCurYear = 2010;
-      m_iCurMonth = 3;
-      m_iCurDay = 29;
-    }
-    virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                                 CFX_WideString& wsCaption) {
-      return FWL_Error::Succeeded;
-    }
-    virtual int32_t GetCurDay(IFWL_Widget* pWidget) { return m_iCurDay; }
-    virtual int32_t GetCurMonth(IFWL_Widget* pWidget) { return m_iCurMonth; }
-    virtual int32_t GetCurYear(IFWL_Widget* pWidget) { return m_iCurYear; }
-    int32_t m_iCurDay;
-    int32_t m_iCurYear;
-    int32_t m_iCurMonth;
-  };
-
-  CFWL_MonthCalendarImpDP m_MonthCalendarDP;
-  friend class CFWL_DateTimeEditImpDelegate;
-  friend class CFWL_DateTimeCalendar;
-  friend class CFWL_DateTimeCalendarImpDelegate;
-  friend class CFWL_DateTimePickerImpDelegate;
 };
+
 class CFWL_DateTimePickerImpDelegate : public CFWL_WidgetImpDelegate {
  public:
   CFWL_DateTimePickerImpDelegate(CFWL_DateTimePickerImp* pOwner);
+
+  // CFWL_WidgetImpDelegate
   void OnProcessMessage(CFWL_Message* pMessage) override;
   void OnDrawWidget(CFX_Graphics* pGraphics,
                     const CFX_Matrix* pMatrix = NULL) override;
diff --git a/xfa/fwl/basewidget/fwl_editimp.cpp b/xfa/fwl/basewidget/fwl_editimp.cpp
index bf1d19f..3fdd999 100644
--- a/xfa/fwl/basewidget/fwl_editimp.cpp
+++ b/xfa/fwl/basewidget/fwl_editimp.cpp
@@ -20,7 +20,6 @@
 #include "xfa/fwl/basewidget/fwl_comboboximp.h"
 #include "xfa/fwl/basewidget/fwl_scrollbarimp.h"
 #include "xfa/fwl/basewidget/ifwl_caret.h"
-#include "xfa/fwl/basewidget/ifwl_datetimepicker.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
diff --git a/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp b/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
index ae5e717..209a857 100644
--- a/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
+++ b/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
@@ -1197,3 +1197,16 @@
     }
   }
 }
+
+FWL_DATEINFO::FWL_DATEINFO(int32_t day,
+                           int32_t dayofweek,
+                           uint32_t dwSt,
+                           CFX_RectF rc,
+                           CFX_WideString& wsday)
+    : iDay(day),
+      iDayOfWeek(dayofweek),
+      dwStates(dwSt),
+      rect(rc),
+      wsDay(wsday) {}
+
+FWL_DATEINFO::~FWL_DATEINFO() {}
diff --git a/xfa/fwl/basewidget/fwl_monthcalendarimp.h b/xfa/fwl/basewidget/fwl_monthcalendarimp.h
index e44a17a..a3a8f45 100644
--- a/xfa/fwl/basewidget/fwl_monthcalendarimp.h
+++ b/xfa/fwl/basewidget/fwl_monthcalendarimp.h
@@ -216,12 +216,9 @@
                int32_t dayofweek,
                uint32_t dwSt,
                CFX_RectF rc,
-               CFX_WideString& wsday)
-      : iDay(day),
-        iDayOfWeek(dayofweek),
-        dwStates(dwSt),
-        rect(rc),
-        wsDay(wsday) {}
+               CFX_WideString& wsday);
+  ~FWL_DATEINFO();
+
   int32_t iDay;
   int32_t iDayOfWeek;
   uint32_t dwStates;
diff --git a/xfa/fwl/basewidget/ifwl_checkbox.h b/xfa/fwl/basewidget/ifwl_checkbox.h
index 26b8244..2316ada 100644
--- a/xfa/fwl/basewidget/ifwl_checkbox.h
+++ b/xfa/fwl/basewidget/ifwl_checkbox.h
@@ -44,9 +44,7 @@
 #define FWL_STATE_CKB_Neutral (2 << (FWL_WGTSTATE_MAX + 2))
 #define FWL_STATE_CKB_CheckMask (3L << (FWL_WGTSTATE_MAX + 2))
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCkbCheckStateChanged,
-                    CFWL_EventType::CheckStateChanged)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCkbCheckStateChanged, CFWL_EventType::CheckStateChanged)
 
 class IFWL_CheckBoxDP : public IFWL_DataProvider {
  public:
diff --git a/xfa/fwl/basewidget/ifwl_combobox.h b/xfa/fwl/basewidget/ifwl_combobox.h
index 2d9c907..5165ef2 100644
--- a/xfa/fwl/basewidget/ifwl_combobox.h
+++ b/xfa/fwl/basewidget/ifwl_combobox.h
@@ -39,36 +39,33 @@
 #define FWL_STYLEEXT_CMB_ListItemIconText (1L << 12)
 #define FWL_STYLEEXT_CMB_ReadOnly (1L << 13)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPreDropDown, CFWL_EventType::PreDropDown)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbPreDropDown, CFWL_EventType::PreDropDown)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPostDropDown, CFWL_EventType::PostDropDown)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbPostDropDown, CFWL_EventType::PostDropDown)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbCloseUp, CFWL_EventType::CloseUp)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbCloseUp, CFWL_EventType::CloseUp)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbEditChanged, CFWL_EventType::EditChanged)
-int32_t nChangeType;
-CFX_WideString wsInsert;
-CFX_WideString wsDelete;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbEditChanged,
+              CFWL_EventType::EditChanged,
+              int32_t nChangeType;
+              CFX_WideString wsInsert;
+              CFX_WideString wsDelete;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbSelChanged, CFWL_EventType::SelectChanged)
-CFX_Int32Array iArraySels;
-FX_BOOL bLButtonUp;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbSelChanged,
+              CFWL_EventType::SelectChanged,
+              CFX_Int32Array iArraySels;
+              FX_BOOL bLButtonUp;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbHoverChanged, CFWL_EventType::HoverChanged)
-int32_t m_iCurHover;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbHoverChanged,
+              CFWL_EventType::HoverChanged,
+              int32_t m_iCurHover;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbDrawItem, CFWL_EventType::DrawItem)
-CFX_Graphics* m_pGraphics;
-CFX_Matrix m_matrix;
-int32_t m_index;
-CFX_RectF m_rtItem;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtCmbDrawItem,
+              CFWL_EventType::DrawItem,
+              CFX_Graphics* m_pGraphics;
+              CFX_Matrix m_matrix;
+              int32_t m_index;
+              CFX_RectF m_rtItem;)
 
 class IFWL_ComboBoxDP : public IFWL_ListBoxDP {
  public:
diff --git a/xfa/fwl/basewidget/ifwl_datetimepicker.h b/xfa/fwl/basewidget/ifwl_datetimepicker.h
index 7aba68b..f592fc1 100644
--- a/xfa/fwl/basewidget/ifwl_datetimepicker.h
+++ b/xfa/fwl/basewidget/ifwl_datetimepicker.h
@@ -30,25 +30,23 @@
 #define FWL_STYLEEXT_DTP_EditVAlignMask (3L << 6)
 #define FWL_STYLEEXT_DTP_EditHAlignModeMask (3L << 8)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpDropDown, CFWL_EventType::DropDown)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_DtpDropDown, CFWL_EventType::DropDown)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpCloseUp, CFWL_EventType::CloseUp)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_DtpCloseUp, CFWL_EventType::CloseUp)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpEditChanged, CFWL_EventType::EditChanged)
-CFX_WideString m_wsText;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_DtpEditChanged,
+              CFWL_EventType::EditChanged,
+              CFX_WideString m_wsText;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpHoverChanged, CFWL_EventType::HoverChanged)
-int32_t hoverday;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_DtpHoverChanged,
+              CFWL_EventType::HoverChanged,
+              int32_t hoverday;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpSelectChanged, CFWL_EventType::SelectChanged)
-int32_t iYear;
-int32_t iMonth;
-int32_t iDay;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_DtpSelectChanged,
+              CFWL_EventType::SelectChanged,
+              int32_t iYear;
+              int32_t iMonth;
+              int32_t iDay;)
 
 class IFWL_DateTimePickerDP : public IFWL_DataProvider {
  public:
diff --git a/xfa/fwl/basewidget/ifwl_edit.h b/xfa/fwl/basewidget/ifwl_edit.h
index 531323e..ac2ca31 100644
--- a/xfa/fwl/basewidget/ifwl_edit.h
+++ b/xfa/fwl/basewidget/ifwl_edit.h
@@ -54,39 +54,37 @@
   FWL_EDT_TEXTCHANGED_Replace,
 };
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtTextChanged, CFWL_EventType::TextChanged)
-int32_t nChangeType;
-CFX_WideString wsInsert;
-CFX_WideString wsDelete;
-CFX_WideString wsPrevText;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtTextChanged,
+              CFWL_EventType::TextChanged,
+              int32_t nChangeType;
+              CFX_WideString wsInsert;
+              CFX_WideString wsDelete;
+              CFX_WideString wsPrevText;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtTextFull, CFWL_EventType::TextFull)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtTextFull, CFWL_EventType::TextFull)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtPreSelfAdaption, CFWL_EventType::PreSelfAdaption)
-FX_BOOL bHSelfAdaption;
-FX_BOOL bVSelfAdaption;
-CFX_RectF rtAfterChange;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtPreSelfAdaption,
+              CFWL_EventType::PreSelfAdaption,
+              FX_BOOL bHSelfAdaption;
+              FX_BOOL bVSelfAdaption;
+              CFX_RectF rtAfterChange;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtValidate, CFWL_EventType::Validate)
-IFWL_Widget* pDstWidget;
-CFX_WideString wsInsert;
-FX_BOOL bValidate;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtValidate,
+              CFWL_EventType::Validate,
+              IFWL_Widget* pDstWidget;
+              CFX_WideString wsInsert;
+              FX_BOOL bValidate;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtCheckWord, CFWL_EventType::CheckWord)
-CFX_ByteString bsWord;
-FX_BOOL bCheckWord;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtCheckWord,
+              CFWL_EventType::CheckWord,
+              CFX_ByteString bsWord;
+              FX_BOOL bCheckWord;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtGetSuggestWords,
-                    CFWL_EventType::GetSuggestedWords)
-FX_BOOL bSuggestWords;
-CFX_ByteString bsWord;
-std::vector<CFX_ByteString> bsArraySuggestWords;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtEdtGetSuggestWords,
+              CFWL_EventType::GetSuggestedWords,
+              FX_BOOL bSuggestWords;
+              CFX_ByteString bsWord;
+              std::vector<CFX_ByteString> bsArraySuggestWords;)
 
 class CFWL_WidgetImpProperties;
 class IFDE_TxtEdtDoRecord;
@@ -115,7 +113,6 @@
   int32_t GetLimit();
   FWL_Error SetLimit(int32_t nLimit);
   FWL_Error SetAliasChar(FX_WCHAR wAlias);
-  FWL_Error SetFormatString(const CFX_WideString& wsFormat);
   FWL_Error Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLen);
   FWL_Error DeleteSelections();
   FWL_Error DeleteRange(int32_t nStart, int32_t nCount = -1);
diff --git a/xfa/fwl/basewidget/ifwl_listbox.h b/xfa/fwl/basewidget/ifwl_listbox.h
index c531cea..010a82f 100644
--- a/xfa/fwl/basewidget/ifwl_listbox.h
+++ b/xfa/fwl/basewidget/ifwl_listbox.h
@@ -31,16 +31,16 @@
 
 class CFX_DIBitmap;
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbSelChanged, CFWL_EventType::SelectChanged)
-CFX_Int32Array iarraySels;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtLtbSelChanged,
+              CFWL_EventType::SelectChanged,
+              CFX_Int32Array iarraySels;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbDrawItem, CFWL_EventType::DrawItem)
-CFX_Graphics* m_pGraphics;
-CFX_Matrix m_matrix;
-int32_t m_index;
-CFX_RectF m_rect;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtLtbDrawItem,
+              CFWL_EventType::DrawItem,
+              CFX_Graphics* m_pGraphics;
+              CFX_Matrix m_matrix;
+              int32_t m_index;
+              CFX_RectF m_rect;)
 
 class IFWL_ListItem {};
 
diff --git a/xfa/fwl/basewidget/ifwl_monthcalendar.h b/xfa/fwl/basewidget/ifwl_monthcalendar.h
index 027d25b..40ea8cb 100644
--- a/xfa/fwl/basewidget/ifwl_monthcalendar.h
+++ b/xfa/fwl/basewidget/ifwl_monthcalendar.h
@@ -22,17 +22,17 @@
 #define FWL_ITEMSTATE_MCD_Selected (1L << 1)
 #define FWL_ITEMSTATE_MCD_Focused (1L << 2)
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_McdDateSelected, CFWL_EventType::DataSelected)
-int32_t m_iStartDay;
-int32_t m_iEndDay;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_Event_McdDateSelected,
+              CFWL_EventType::DataSelected,
+              int32_t m_iStartDay;
+              int32_t m_iEndDay;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EventMcdDateChanged, CFWL_EventType::DateChanged)
-int32_t m_iOldYear;
-int32_t m_iOldMonth;
-int32_t m_iStartDay;
-int32_t m_iEndDay;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EventMcdDateChanged,
+              CFWL_EventType::DateChanged,
+              int32_t m_iOldYear;
+              int32_t m_iOldMonth;
+              int32_t m_iStartDay;
+              int32_t m_iEndDay;)
 
 class IFWL_MonthCalendarDP : public IFWL_DataProvider {
  public:
diff --git a/xfa/fwl/basewidget/ifwl_spinbutton.h b/xfa/fwl/basewidget/ifwl_spinbutton.h
index 2e81aeb..6080f0c 100644
--- a/xfa/fwl/basewidget/ifwl_spinbutton.h
+++ b/xfa/fwl/basewidget/ifwl_spinbutton.h
@@ -7,14 +7,13 @@
 #ifndef XFA_FWL_BASEWIDGET_IFWL_SPINBUTTON_H_
 #define XFA_FWL_BASEWIDGET_IFWL_SPINBUTTON_H_
 
+#include "xfa/fwl/core/cfwl_event.h"
 #include "xfa/fxfa/include/cxfa_eventparam.h"
 
 #define FWL_CLASS_SpinButton L"FWL_SPINBUTTON"
 #define FWL_STYLEEXE_SPB_Vert (1L << 0)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSpbClick, CFWL_EventType::Click)
-FX_BOOL m_bUp;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtSpbClick, CFWL_EventType::Click, FX_BOOL m_bUp;)
 
 class IFWL_SpinButton : public IFWL_Widget {
  public:
diff --git a/xfa/fwl/basewidget/ifwl_tooltip.h b/xfa/fwl/basewidget/ifwl_tooltip.h
index 5b8dff1..db048d3 100644
--- a/xfa/fwl/basewidget/ifwl_tooltip.h
+++ b/xfa/fwl/basewidget/ifwl_tooltip.h
@@ -21,8 +21,10 @@
 
 class IFWL_ToolTipDP : public IFWL_DataProvider {
  public:
-  virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                               CFX_WideString& wsCaption) = 0;
+  // IFWL_DataProvider
+  FWL_Error GetCaption(IFWL_Widget* pWidget,
+                       CFX_WideString& wsCaption) override = 0;
+
   virtual int32_t GetInitialDelay(IFWL_Widget* pWidget) = 0;
   virtual int32_t GetAutoPopDelay(IFWL_Widget* pWidget) = 0;
   virtual CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget) = 0;
diff --git a/xfa/fwl/core/cfwl_event.h b/xfa/fwl/core/cfwl_event.h
index d9decac..4d208d0 100644
--- a/xfa/fwl/core/cfwl_event.h
+++ b/xfa/fwl/core/cfwl_event.h
@@ -66,22 +66,13 @@
 
 class CFWL_Event {
  public:
-  CFWL_Event()
-      : m_pSrcTarget(nullptr), m_pDstTarget(nullptr), m_dwRefCount(1) {}
-  virtual ~CFWL_Event() {}
+  CFWL_Event();
+  virtual ~CFWL_Event();
 
-  virtual FWL_Error GetClassName(CFX_WideString& wsClass) const {
-    return FWL_Error::Succeeded;
-  }
-  virtual CFWL_EventType GetClassID() const { return CFWL_EventType::None; }
+  virtual FWL_Error GetClassName(CFX_WideString& wsClass) const;
+  virtual CFWL_EventType GetClassID() const;
 
-  uint32_t Release() {
-    m_dwRefCount--;
-    uint32_t dwRefCount = m_dwRefCount;
-    if (!m_dwRefCount)
-      delete this;
-    return dwRefCount;
-  }
+  uint32_t Release();
 
   IFWL_Widget* m_pSrcTarget;
   IFWL_Widget* m_pDstTarget;
@@ -90,84 +81,95 @@
   uint32_t m_dwRefCount;
 };
 
-#define BEGIN_FWL_EVENT_DEF(classname, eventType)                   \
-  class classname : public CFWL_Event {                             \
-   public:                                                          \
-    classname() : CFWL_Event() {}                                   \
-    virtual FWL_Error GetClassName(CFX_WideString& wsClass) const { \
-      wsClass = L## #classname;                                     \
-      return FWL_Error::Succeeded;                                  \
-    }                                                               \
-    virtual CFWL_EventType GetClassID() const { return eventType; }
+inline CFWL_Event::CFWL_Event()
+    : m_pSrcTarget(nullptr), m_pDstTarget(nullptr), m_dwRefCount(1) {}
 
-#define END_FWL_EVENT_DEF \
-  }                       \
-  ;  // NOLINT
+inline CFWL_Event::~CFWL_Event() {}
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMouse, CFWL_EventType::Mouse)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-uint32_t m_dwFlags;
-FWL_MouseCommand m_dwCmd;
-END_FWL_EVENT_DEF
+inline FWL_Error CFWL_Event::GetClassName(CFX_WideString& wsClass) const {
+  return FWL_Error::Succeeded;
+}
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMouseWheel, CFWL_EventType::MouseWheel)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-FX_FLOAT m_fDeltaX;
-FX_FLOAT m_fDeltaY;
-uint32_t m_dwFlags;
-END_FWL_EVENT_DEF
+inline CFWL_EventType CFWL_Event::GetClassID() const {
+  return CFWL_EventType::None;
+}
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtKey, CFWL_EventType::Key)
-uint32_t m_dwKeyCode;
-uint32_t m_dwFlags;
-FWL_KeyCommand m_dwCmd;
-END_FWL_EVENT_DEF
+inline uint32_t CFWL_Event::Release() {
+  m_dwRefCount--;
+  uint32_t dwRefCount = m_dwRefCount;
+  if (!m_dwRefCount)
+    delete this;
+  return dwRefCount;
+}
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSetFocus, CFWL_EventType::SetFocus)
-IFWL_Widget* m_pSetFocus;
-END_FWL_EVENT_DEF
+#define FWL_EVENT_DEF(classname, eventType, ...)                            \
+  class classname : public CFWL_Event {                                     \
+   public:                                                                  \
+    classname();                                                            \
+    ~classname() override;                                                  \
+    FWL_Error GetClassName(CFX_WideString& wsClass) const override;         \
+    CFWL_EventType GetClassID() const override;                             \
+    __VA_ARGS__                                                             \
+  };                                                                        \
+  inline classname::classname() {}                                          \
+  inline classname::~classname() {}                                         \
+  inline FWL_Error classname::GetClassName(CFX_WideString& wsClass) const { \
+    wsClass = L## #classname;                                               \
+    return FWL_Error::Succeeded;                                            \
+  }                                                                         \
+  inline CFWL_EventType classname::GetClassID() const { return eventType; }
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtKillFocus, CFWL_EventType::KillFocus)
-IFWL_Widget* m_pKillFocus;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtMouse, CFWL_EventType::Mouse, FX_FLOAT m_fx;
+              FX_FLOAT m_fy;
+              uint32_t m_dwFlags;
+              FWL_MouseCommand m_dwCmd;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtDraw, CFWL_EventType::Draw)
-CFX_Graphics* m_pGraphics;
-IFWL_Widget* m_pWidget;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtMouseWheel, CFWL_EventType::MouseWheel, FX_FLOAT m_fx;
+              FX_FLOAT m_fy;
+              FX_FLOAT m_fDeltaX;
+              FX_FLOAT m_fDeltaY;
+              uint32_t m_dwFlags;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtClick, CFWL_EventType::Click)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtKey, CFWL_EventType::Key, uint32_t m_dwKeyCode;
+              uint32_t m_dwFlags;
+              FWL_KeyCommand m_dwCmd;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtScroll, CFWL_EventType::Scroll)
-uint32_t m_iScrollCode;
-FX_FLOAT m_fPos;
-FX_BOOL* m_pRet;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtSetFocus,
+              CFWL_EventType::SetFocus,
+              IFWL_Widget* m_pSetFocus;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtClose, CFWL_EventType::Close)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtKillFocus,
+              CFWL_EventType::KillFocus,
+              IFWL_Widget* m_pKillFocus;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtContextMenu, CFWL_EventType::ContextMenu)
-FX_FLOAT m_fPosX;
-FX_FLOAT m_fPosY;
-IFWL_Widget* m_pOwner;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtDraw, CFWL_EventType::Draw, CFX_Graphics* m_pGraphics;
+              IFWL_Widget * m_pWidget;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMenuCommand, CFWL_EventType::MenuCommand)
-int32_t m_iCommand;
-void* m_pData;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtClick, CFWL_EventType::Click)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSizeChanged, CFWL_EventType::SizeChanged)
-IFWL_Widget* m_pWidget;
-CFX_RectF m_rtOld;
-CFX_RectF m_rtNew;
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtScroll, CFWL_EventType::Scroll, uint32_t m_iScrollCode;
+              FX_FLOAT m_fPos;
+              FX_BOOL * m_pRet;)
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtIdle, CFWL_EventType::Idle)
-END_FWL_EVENT_DEF
+FWL_EVENT_DEF(CFWL_EvtClose, CFWL_EventType::Close)
+
+FWL_EVENT_DEF(CFWL_EvtContextMenu,
+              CFWL_EventType::ContextMenu,
+              FX_FLOAT m_fPosX;
+              FX_FLOAT m_fPosY;
+              IFWL_Widget * m_pOwner;)
+
+FWL_EVENT_DEF(CFWL_EvtMenuCommand,
+              CFWL_EventType::MenuCommand,
+              int32_t m_iCommand;
+              void* m_pData;)
+
+FWL_EVENT_DEF(CFWL_EvtSizeChanged,
+              CFWL_EventType::SizeChanged,
+              IFWL_Widget* m_pWidget;
+              CFX_RectF m_rtOld;
+              CFX_RectF m_rtNew;)
+
+FWL_EVENT_DEF(CFWL_EvtIdle, CFWL_EventType::Idle)
 
 #endif  // XFA_FWL_CORE_CFWL_EVENT_H_
diff --git a/xfa/fwl/core/cfwl_message.h b/xfa/fwl/core/cfwl_message.h
index 74401c3..db434fc 100644
--- a/xfa/fwl/core/cfwl_message.h
+++ b/xfa/fwl/core/cfwl_message.h
@@ -53,31 +53,15 @@
 
 class CFWL_Message {
  public:
-  CFWL_Message()
-      : m_pSrcTarget(nullptr),
-        m_pDstTarget(nullptr),
-        m_dwExtend(0),
-        m_dwRefCount(1) {}
-  virtual ~CFWL_Message() {}
+  CFWL_Message();
+  virtual ~CFWL_Message();
 
-  virtual CFWL_Message* Clone() { return nullptr; }
-  virtual FWL_Error GetClassName(CFX_WideString& wsClass) const {
-    return FWL_Error::Succeeded;
-  }
-  virtual CFWL_MessageType GetClassID() const { return CFWL_MessageType::None; }
+  virtual CFWL_Message* Clone();
+  virtual FWL_Error GetClassName(CFX_WideString& wsClass) const;
+  virtual CFWL_MessageType GetClassID() const;
 
-  uint32_t Release() {
-    m_dwRefCount--;
-    uint32_t dwRefCount = m_dwRefCount;
-    if (!m_dwRefCount)
-      delete this;
-    return dwRefCount;
-  }
-
-  CFWL_Message* Retain() {
-    m_dwRefCount++;
-    return this;
-  }
+  uint32_t Release();
+  CFWL_Message* Retain();
 
   IFWL_Widget* m_pSrcTarget;
   IFWL_Widget* m_pDstTarget;
@@ -87,91 +71,124 @@
   uint32_t m_dwRefCount;
 };
 
-#define BEGIN_FWL_MESSAGE_DEF(classname, msgType)                    \
-  class classname : public CFWL_Message {                            \
-   public:                                                           \
-    classname() : CFWL_Message() {}                                  \
-    CFWL_Message* Clone() override { return new classname(*this); }  \
-    FWL_Error GetClassName(CFX_WideString& wsClass) const override { \
-      wsClass = L## #classname;                                      \
-      return FWL_Error::Succeeded;                                   \
-    }                                                                \
-    CFWL_MessageType GetClassID() const override { return msgType; }
+inline CFWL_Message::CFWL_Message()
+    : m_pSrcTarget(nullptr),
+      m_pDstTarget(nullptr),
+      m_dwExtend(0),
+      m_dwRefCount(1) {}
 
-#define END_FWL_MESSAGE_DEF \
-  }                         \
-  ;  // NOLINT
+inline CFWL_Message::~CFWL_Message() {}
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate)
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate)
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-uint32_t m_dwFlags;
-FWL_MouseCommand m_dwCmd;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-FX_FLOAT m_fDeltaX;
-FX_FLOAT m_fDeltaY;
-uint32_t m_dwFlags;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSetFocus, CFWL_MessageType::SetFocus)
-IFWL_Widget* m_pKillFocus;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKillFocus, CFWL_MessageType::KillFocus)
-IFWL_Widget* m_pSetFocus;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key)
-uint32_t m_dwKeyCode;
-uint32_t m_dwFlags;
-FWL_KeyCommand m_dwCmd;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor)
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSize, CFWL_MessageType::Size)
-int32_t m_iWidth;
-int32_t m_iHeight;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowMove, CFWL_MessageType::WindowMove)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-END_FWL_MESSAGE_DEF
-
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDropFiles, CFWL_MessageType::DropFiles)
-CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy) {
-  m_pDstTarget = copy.m_pDstTarget;
-  m_pSrcTarget = copy.m_pSrcTarget;
-  m_fx = copy.m_fx;
-  m_fy = copy.m_fy;
-  m_files.Append(copy.m_files);
+inline CFWL_Message* CFWL_Message::Clone() {
+  return nullptr;
 }
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-CFX_WideStringArray m_files;
-END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgTaskClicked, CFWL_MessageType::TaskClicked)
-FX_FLOAT m_fx;
-FX_FLOAT m_fy;
-END_FWL_MESSAGE_DEF
+inline FWL_Error CFWL_Message::GetClassName(CFX_WideString& wsClass) const {
+  return FWL_Error::Succeeded;
+}
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgClose, CFWL_MessageType::Close)
-END_FWL_MESSAGE_DEF
+inline CFWL_MessageType CFWL_Message::GetClassID() const {
+  return CFWL_MessageType::None;
+}
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, CFWL_MessageType::WindowWillMove)
-END_FWL_MESSAGE_DEF
+inline uint32_t CFWL_Message::Release() {
+  m_dwRefCount--;
+  uint32_t dwRefCount = m_dwRefCount;
+  if (!m_dwRefCount)
+    delete this;
+  return dwRefCount;
+}
+
+inline CFWL_Message* CFWL_Message::Retain() {
+  m_dwRefCount++;
+  return this;
+}
+
+#define FWL_MESSAGE_CLASS_DEF(classname, msgType, ...)              \
+  class classname : public CFWL_Message {                           \
+   public:                                                          \
+    classname();                                                    \
+    ~classname() override;                                          \
+    CFWL_Message* Clone() override;                                 \
+    FWL_Error GetClassName(CFX_WideString& wsClass) const override; \
+    CFWL_MessageType GetClassID() const override;                   \
+    __VA_ARGS__                                                     \
+  };
+
+#define FWL_MESSAGE_FUNCTION_DEF(classname, msgType, ...)                   \
+  inline classname::classname() {}                                          \
+  inline classname::~classname() {}                                         \
+  inline CFWL_Message* classname::Clone() { return new classname(*this); }  \
+  inline FWL_Error classname::GetClassName(CFX_WideString& wsClass) const { \
+    wsClass = L## #classname;                                               \
+    return FWL_Error::Succeeded;                                            \
+  }                                                                         \
+  inline CFWL_MessageType classname::GetClassID() const { return msgType; } \
+  __VA_ARGS__
+
+#define FWL_MESSAGE_DEF(classname, msgType, ...)         \
+  FWL_MESSAGE_CLASS_DEF(classname, msgType, __VA_ARGS__) \
+  FWL_MESSAGE_FUNCTION_DEF(classname, msgType)
+
+FWL_MESSAGE_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate)
+
+FWL_MESSAGE_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate)
+
+FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse, FX_FLOAT m_fx;
+                FX_FLOAT m_fy;
+                uint32_t m_dwFlags;
+                FWL_MouseCommand m_dwCmd;)
+
+FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel, FX_FLOAT m_fx;
+                FX_FLOAT m_fy;
+                FX_FLOAT m_fDeltaX;
+                FX_FLOAT m_fDeltaY;
+                uint32_t m_dwFlags;)
+
+FWL_MESSAGE_DEF(CFWL_MsgSetFocus,
+                CFWL_MessageType::SetFocus,
+                IFWL_Widget* m_pKillFocus;)
+
+FWL_MESSAGE_DEF(CFWL_MsgKillFocus,
+                CFWL_MessageType::KillFocus,
+                IFWL_Widget* m_pSetFocus;)
+
+FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key, uint32_t m_dwKeyCode;
+                uint32_t m_dwFlags;
+                FWL_KeyCommand m_dwCmd;)
+
+FWL_MESSAGE_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor)
+
+FWL_MESSAGE_DEF(CFWL_MsgSize, CFWL_MessageType::Size, int32_t m_iWidth;
+                int32_t m_iHeight;)
+
+FWL_MESSAGE_DEF(CFWL_MsgWindowMove, CFWL_MessageType::WindowMove, FX_FLOAT m_fx;
+                FX_FLOAT m_fy;)
+
+FWL_MESSAGE_CLASS_DEF(CFWL_MsgDropFiles,
+                      CFWL_MessageType::DropFiles,
+                      CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy);
+                      FX_FLOAT m_fx;
+                      FX_FLOAT m_fy;
+                      CFX_WideStringArray m_files;)
+FWL_MESSAGE_FUNCTION_DEF(
+    CFWL_MsgDropFiles,
+    CFWL_MessageType::DropFiles,
+    inline CFWL_MsgDropFiles::CFWL_MsgDropFiles(const CFWL_MsgDropFiles& copy) {
+      m_pDstTarget = copy.m_pDstTarget;
+      m_pSrcTarget = copy.m_pSrcTarget;
+      m_fx = copy.m_fx;
+      m_fy = copy.m_fy;
+      m_files.Append(copy.m_files);
+    })
+
+FWL_MESSAGE_DEF(CFWL_MsgTaskClicked,
+                CFWL_MessageType::TaskClicked,
+                FX_FLOAT m_fx;
+                FX_FLOAT m_fy;)
+
+FWL_MESSAGE_DEF(CFWL_MsgClose, CFWL_MessageType::Close)
+
+FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, CFWL_MessageType::WindowWillMove)
 
 #endif  // XFA_FWL_CORE_CFWL_MESSAGE_H_
diff --git a/xfa/fwl/core/cfwl_themepart.h b/xfa/fwl/core/cfwl_themepart.h
index 5bdf153..c5e6cd7 100644
--- a/xfa/fwl/core/cfwl_themepart.h
+++ b/xfa/fwl/core/cfwl_themepart.h
@@ -81,16 +81,7 @@
 
 class CFWL_ThemePart {
  public:
-  CFWL_ThemePart()
-      : m_pWidget(nullptr),
-        m_iPart(CFWL_Part::None),
-        m_dwStates(CFWL_PartState_Normal),
-        m_bMaximize(false),
-        m_bStaticBackground(false),
-        m_pData(nullptr) {
-    m_rtPart.Reset();
-    m_matrix.SetIdentity();
-  }
+  CFWL_ThemePart();
 
   CFX_Matrix m_matrix;
   CFX_RectF m_rtPart;
@@ -102,4 +93,15 @@
   void* m_pData;
 };
 
+inline CFWL_ThemePart::CFWL_ThemePart()
+    : m_pWidget(nullptr),
+      m_iPart(CFWL_Part::None),
+      m_dwStates(CFWL_PartState_Normal),
+      m_bMaximize(false),
+      m_bStaticBackground(false),
+      m_pData(nullptr) {
+  m_rtPart.Reset();
+  m_matrix.SetIdentity();
+}
+
 #endif  // XFA_FWL_CORE_CFWL_THEMEPART_H_
diff --git a/xfa/fwl/core/cfwl_widgetimpproperties.h b/xfa/fwl/core/cfwl_widgetimpproperties.h
index 8b1cf86..71b0368 100644
--- a/xfa/fwl/core/cfwl_widgetimpproperties.h
+++ b/xfa/fwl/core/cfwl_widgetimpproperties.h
@@ -17,17 +17,9 @@
 
 class CFWL_WidgetImpProperties {
  public:
-  CFWL_WidgetImpProperties()
-      : m_dwStyles(FWL_WGTSTYLE_Child),
-        m_dwStyleExes(0),
-        m_dwStates(0),
-        m_pThemeProvider(nullptr),
-        m_pDataProvider(nullptr),
-        m_pParent(nullptr),
-        m_pOwner(nullptr) {
-    m_ctmOnParent.SetIdentity();
-    m_rtWidget.Set(0, 0, 0, 0);
-  }
+  CFWL_WidgetImpProperties();
+  ~CFWL_WidgetImpProperties();
+  CFWL_WidgetImpProperties(const CFWL_WidgetImpProperties& other);
 
   CFX_Matrix m_ctmOnParent;
   CFX_RectF m_rtWidget;
@@ -40,4 +32,21 @@
   IFWL_Widget* m_pOwner;
 };
 
+inline CFWL_WidgetImpProperties::CFWL_WidgetImpProperties()
+    : m_dwStyles(FWL_WGTSTYLE_Child),
+      m_dwStyleExes(0),
+      m_dwStates(0),
+      m_pThemeProvider(nullptr),
+      m_pDataProvider(nullptr),
+      m_pParent(nullptr),
+      m_pOwner(nullptr) {
+  m_ctmOnParent.SetIdentity();
+  m_rtWidget.Set(0, 0, 0, 0);
+}
+
+inline CFWL_WidgetImpProperties::~CFWL_WidgetImpProperties() {}
+
+inline CFWL_WidgetImpProperties::CFWL_WidgetImpProperties(
+    const CFWL_WidgetImpProperties& other) = default;
+
 #endif  // XFA_FWL_CORE_CFWL_WIDGETIMPPROPERTIES_H_
diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp
index 78d8206..d36ab77 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.cpp
+++ b/xfa/fwl/core/cfwl_widgetmgr.cpp
@@ -859,3 +859,22 @@
 
   return pItem->iRedrawCounter == 0;
 }
+
+CFWL_WidgetMgrItem::CFWL_WidgetMgrItem() : CFWL_WidgetMgrItem(nullptr) {}
+
+CFWL_WidgetMgrItem::CFWL_WidgetMgrItem(IFWL_Widget* widget)
+    : pParent(nullptr),
+      pOwner(nullptr),
+      pChild(nullptr),
+      pPrevious(nullptr),
+      pNext(nullptr),
+      pWidget(widget),
+      iRedrawCounter(0)
+#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
+      ,
+      bOutsideChanged(FALSE)
+#endif
+{
+}
+
+CFWL_WidgetMgrItem::~CFWL_WidgetMgrItem() {}
diff --git a/xfa/fwl/core/cfwl_widgetmgr.h b/xfa/fwl/core/cfwl_widgetmgr.h
index 957f6dc..1f0df3b 100644
--- a/xfa/fwl/core/cfwl_widgetmgr.h
+++ b/xfa/fwl/core/cfwl_widgetmgr.h
@@ -27,22 +27,9 @@
 
 class CFWL_WidgetMgrItem {
  public:
-  CFWL_WidgetMgrItem() : CFWL_WidgetMgrItem(nullptr) {}
-  explicit CFWL_WidgetMgrItem(IFWL_Widget* widget)
-      : pParent(nullptr),
-        pOwner(nullptr),
-        pChild(nullptr),
-        pPrevious(nullptr),
-        pNext(nullptr),
-        pWidget(widget),
-        iRedrawCounter(0)
-#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
-        ,
-        bOutsideChanged(FALSE)
-#endif
-  {
-  }
-  ~CFWL_WidgetMgrItem() {}
+  CFWL_WidgetMgrItem();
+  explicit CFWL_WidgetMgrItem(IFWL_Widget* widget);
+  ~CFWL_WidgetMgrItem();
 
   CFWL_WidgetMgrItem* pParent;
   CFWL_WidgetMgrItem* pOwner;
diff --git a/xfa/fwl/core/fwl_appimp.cpp b/xfa/fwl/core/fwl_appimp.cpp
index 089a6d3..2c4258c 100644
--- a/xfa/fwl/core/fwl_appimp.cpp
+++ b/xfa/fwl/core/fwl_appimp.cpp
@@ -18,6 +18,10 @@
   return pApp;
 }
 
+IFWL_App::IFWL_App() {}
+
+IFWL_App::~IFWL_App() {}
+
 void IFWL_App::Release() {}
 
 FWL_Error IFWL_App::Initialize() {
diff --git a/xfa/fwl/core/fwl_formimp.cpp b/xfa/fwl/core/fwl_formimp.cpp
index 1dcb310..8b4ef9f 100644
--- a/xfa/fwl/core/fwl_formimp.cpp
+++ b/xfa/fwl/core/fwl_formimp.cpp
@@ -64,6 +64,10 @@
   return static_cast<CFWL_FormImp*>(GetImpl())->SetBorderRegion(pPath);
 }
 
+RestoreResizeInfo::RestoreResizeInfo() {}
+
+RestoreResizeInfo::~RestoreResizeInfo() {}
+
 CFWL_FormImp::CFWL_FormImp(const CFWL_WidgetImpProperties& properties,
                            IFWL_Widget* pOuter)
     : CFWL_WidgetImp(properties, pOuter),
@@ -1128,3 +1132,41 @@
   eClose.m_pSrcTarget = m_pOwner->m_pInterface;
   m_pOwner->DispatchEvent(&eClose);
 }
+
+CFWL_SysBtn::CFWL_SysBtn() {
+  m_rtBtn.Set(0, 0, 0, 0);
+  m_dwState = 0;
+}
+
+bool CFWL_SysBtn::IsDisabled() const {
+  return !!(m_dwState & FWL_SYSBUTTONSTATE_Disabled);
+}
+
+void CFWL_SysBtn::SetNormal() {
+  m_dwState &= 0xFFF0;
+}
+
+void CFWL_SysBtn::SetPressed() {
+  SetNormal();
+  m_dwState |= FWL_SYSBUTTONSTATE_Pressed;
+}
+
+void CFWL_SysBtn::SetHover() {
+  SetNormal();
+  m_dwState |= FWL_SYSBUTTONSTATE_Hover;
+}
+
+void CFWL_SysBtn::SetDisabled(FX_BOOL bDisabled) {
+  bDisabled ? m_dwState |= FWL_SYSBUTTONSTATE_Disabled
+            : m_dwState &= ~FWL_SYSBUTTONSTATE_Disabled;
+}
+
+uint32_t CFWL_SysBtn::GetPartState() const {
+  if (IsDisabled())
+    return CFWL_PartState_Disabled;
+  if (m_dwState & FWL_SYSBUTTONSTATE_Pressed)
+    return CFWL_PartState_Pressed;
+  if (m_dwState & FWL_SYSBUTTONSTATE_Hover)
+    return CFWL_PartState_Hovered;
+  return CFWL_PartState_Normal;
+}
diff --git a/xfa/fwl/core/fwl_formimp.h b/xfa/fwl/core/fwl_formimp.h
index 1f2d695..7278afb 100644
--- a/xfa/fwl/core/fwl_formimp.h
+++ b/xfa/fwl/core/fwl_formimp.h
@@ -27,35 +27,15 @@
 
 class CFWL_SysBtn {
  public:
-  CFWL_SysBtn() {
-    m_rtBtn.Set(0, 0, 0, 0);
-    m_dwState = 0;
-  }
+  CFWL_SysBtn();
 
-  bool IsDisabled() { return !!(m_dwState & FWL_SYSBUTTONSTATE_Disabled); }
+  bool IsDisabled() const;
+  uint32_t GetPartState() const;
 
-  void SetNormal() { m_dwState &= 0xFFF0; }
-  void SetPressed() {
-    SetNormal();
-    m_dwState |= FWL_SYSBUTTONSTATE_Pressed;
-  }
-  void SetHover() {
-    SetNormal();
-    m_dwState |= FWL_SYSBUTTONSTATE_Hover;
-  }
-  void SetDisabled(FX_BOOL bDisabled) {
-    bDisabled ? m_dwState |= FWL_SYSBUTTONSTATE_Disabled
-              : m_dwState &= ~FWL_SYSBUTTONSTATE_Disabled;
-  }
-  uint32_t GetPartState() {
-    if (IsDisabled())
-      return CFWL_PartState_Disabled;
-    if (m_dwState & FWL_SYSBUTTONSTATE_Pressed)
-      return CFWL_PartState_Pressed;
-    if (m_dwState & FWL_SYSBUTTONSTATE_Hover)
-      return CFWL_PartState_Hovered;
-    return CFWL_PartState_Normal;
-  }
+  void SetNormal();
+  void SetPressed();
+  void SetHover();
+  void SetDisabled(FX_BOOL bDisabled);
 
   CFX_RectF m_rtBtn;
   uint32_t m_dwState;
@@ -67,6 +47,9 @@
 };
 
 typedef struct RestoreResizeInfo {
+  RestoreResizeInfo();
+  ~RestoreResizeInfo();
+
   CFX_PointF m_ptStart;
   CFX_SizeF m_szStart;
 } RestoreInfo;
diff --git a/xfa/fwl/core/fwl_noteimp.cpp b/xfa/fwl/core/fwl_noteimp.cpp
index 9518a08..b38592b 100644
--- a/xfa/fwl/core/fwl_noteimp.cpp
+++ b/xfa/fwl/core/fwl_noteimp.cpp
@@ -668,11 +668,14 @@
 
 class CFWL_CoreToolTipDP : public IFWL_ToolTipDP {
  public:
-  FWL_Error GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption);
-  int32_t GetInitialDelay(IFWL_Widget* pWidget);
-  int32_t GetAutoPopDelay(IFWL_Widget* pWidget);
-  CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget);
-  CFX_SizeF GetToolTipIconSize(IFWL_Widget* pWidget);
+  // IFWL_ToolTipDP
+  FWL_Error GetCaption(IFWL_Widget* pWidget,
+                       CFX_WideString& wsCaption) override;
+  int32_t GetInitialDelay(IFWL_Widget* pWidget) override;
+  int32_t GetAutoPopDelay(IFWL_Widget* pWidget) override;
+  CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget) override;
+  CFX_SizeF GetToolTipIconSize(IFWL_Widget* pWidget) override;
+
   CFX_RectF GetAnchor();
   CFWL_CoreToolTipDP();
 
@@ -681,34 +684,46 @@
   int32_t m_nAutoPopDelayTime;
   CFX_RectF m_fAnchor;
 };
+
 CFWL_CoreToolTipDP::CFWL_CoreToolTipDP() {
   m_nInitDelayTime = 500;
   m_nAutoPopDelayTime = 50000;
   m_fAnchor.Set(0.0, 0.0, 0.0, 0.0);
 }
+
 FWL_Error CFWL_CoreToolTipDP::GetCaption(IFWL_Widget* pWidget,
                                          CFX_WideString& wsCaption) {
   wsCaption = m_wsCaption;
   return FWL_Error::Succeeded;
 }
+
 int32_t CFWL_CoreToolTipDP::GetInitialDelay(IFWL_Widget* pWidget) {
   return m_nInitDelayTime;
 }
+
 int32_t CFWL_CoreToolTipDP::GetAutoPopDelay(IFWL_Widget* pWidget) {
   return m_nAutoPopDelayTime;
 }
+
 CFX_DIBitmap* CFWL_CoreToolTipDP::GetToolTipIcon(IFWL_Widget* pWidget) {
   return NULL;
 }
+
 CFX_SizeF CFWL_CoreToolTipDP::GetToolTipIconSize(IFWL_Widget* pWidget) {
   return CFX_SizeF();
 }
+
 CFX_RectF CFWL_CoreToolTipDP::GetAnchor() {
   return m_fAnchor;
 }
+
+CFWL_EventTarget::CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver,
+                                   IFWL_Widget* pListener)
+    : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {}
 CFWL_EventTarget::~CFWL_EventTarget() {
   m_eventSources.RemoveAll();
 }
+
 int32_t CFWL_EventTarget::SetEventSource(IFWL_Widget* pSource,
                                          uint32_t dwFilter) {
   if (pSource) {
diff --git a/xfa/fwl/core/fwl_noteimp.h b/xfa/fwl/core/fwl_noteimp.h
index 9116e31..eb922f9 100644
--- a/xfa/fwl/core/fwl_noteimp.h
+++ b/xfa/fwl/core/fwl_noteimp.h
@@ -121,9 +121,9 @@
 
 class CFWL_EventTarget {
  public:
-  CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, IFWL_Widget* pListener)
-      : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {}
+  CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, IFWL_Widget* pListener);
   ~CFWL_EventTarget();
+
   int32_t SetEventSource(IFWL_Widget* pSource,
                          uint32_t dwFilter = FWL_EVENT_ALL_MASK);
   FX_BOOL ProcessEvent(CFWL_Event* pEvent);
diff --git a/xfa/fwl/core/fwl_widgetimp.cpp b/xfa/fwl/core/fwl_widgetimp.cpp
index 27f8a44..d556499 100644
--- a/xfa/fwl/core/fwl_widgetimp.cpp
+++ b/xfa/fwl/core/fwl_widgetimp.cpp
@@ -10,7 +10,6 @@
 
 #include "xfa/fde/tto/fde_textout.h"
 #include "xfa/fwl/basewidget/ifwl_combobox.h"
-#include "xfa/fwl/basewidget/ifwl_datetimepicker.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
 #include "xfa/fwl/core/cfwl_themepart.h"
@@ -21,6 +20,7 @@
 #include "xfa/fwl/core/ifwl_app.h"
 #include "xfa/fwl/core/ifwl_form.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
+#include "xfa/fwl/core/ifwl_widget.h"
 #include "xfa/fxfa/include/xfa_ffapp.h"
 
 #define FWL_STYLEEXT_MNU_Vert (1L << 0)
diff --git a/xfa/fwl/core/ifwl_app.h b/xfa/fwl/core/ifwl_app.h
index 5fbac66..27c65c8 100644
--- a/xfa/fwl/core/ifwl_app.h
+++ b/xfa/fwl/core/ifwl_app.h
@@ -32,7 +32,7 @@
  public:
   static IFWL_App* Create(CXFA_FFApp* pAdapter);
 
-  virtual ~IFWL_App() {}
+  virtual ~IFWL_App();
 
   FWL_Error Initialize();
   FWL_Error Finalize();
@@ -53,7 +53,7 @@
   CFWL_NoteDriver* GetNoteDriver() const;
 
  private:
-  IFWL_App() {}
+  IFWL_App();
 
   std::unique_ptr<CFWL_AppImp> m_pImpl;
 };
diff --git a/xfa/fwl/core/ifwl_tooltiptarget.h b/xfa/fwl/core/ifwl_tooltiptarget.h
index 7489e73..c6a47d0 100644
--- a/xfa/fwl/core/ifwl_tooltiptarget.h
+++ b/xfa/fwl/core/ifwl_tooltiptarget.h
@@ -26,9 +26,11 @@
   virtual FX_BOOL UseDefaultTheme() = 0;
   virtual FWL_Error GetCaption(CFX_WideString& wsCaption) = 0;
   virtual FWL_Error GetToolTipSize(CFX_SizeF& sz) = 0;
-  virtual FWL_Error GetToolTipPos(CFX_PointF& pt) {
-    return FWL_Error::Indefinite;
-  }
+  virtual FWL_Error GetToolTipPos(CFX_PointF& pt);
 };
 
+inline FWL_Error GetToolTipPos(CFX_PointF& pt) {
+  return FWL_Error::Indefinite;
+}
+
 #endif  // XFA_FWL_CORE_IFWL_TOOLTIPTARGET_H_
diff --git a/xfa/fwl/lightwidget/cfwl_barcode.cpp b/xfa/fwl/lightwidget/cfwl_barcode.cpp
index 4b998d0..2e29d63 100644
--- a/xfa/fwl/lightwidget/cfwl_barcode.cpp
+++ b/xfa/fwl/lightwidget/cfwl_barcode.cpp
@@ -44,7 +44,67 @@
     return 0;
   return static_cast<IFWL_Barcode*>(m_pIface)->IsProtectedType();
 }
+
+CFWL_Barcode::CFWL_BarcodeDP::CFWL_BarcodeDP()
+    : m_dwAttributeMask(FWL_BCDATTRIBUTE_NONE) {}
+
 FWL_Error CFWL_Barcode::CFWL_BarcodeDP::GetCaption(IFWL_Widget* pWidget,
                                                    CFX_WideString& wsCaption) {
   return FWL_Error::Succeeded;
 }
+
+BC_CHAR_ENCODING CFWL_Barcode::CFWL_BarcodeDP::GetCharEncoding() {
+  return m_eCharEncoding;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetModuleHeight() {
+  return m_nModuleHeight;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetModuleWidth() {
+  return m_nModuleWidth;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetDataLength() {
+  return m_nDataLength;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetCalChecksum() {
+  return m_nCalChecksum;
+}
+
+FX_BOOL CFWL_Barcode::CFWL_BarcodeDP::GetPrintChecksum() {
+  return m_bPrintChecksum;
+}
+
+BC_TEXT_LOC CFWL_Barcode::CFWL_BarcodeDP::GetTextLocation() {
+  return m_eTextLocation;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetWideNarrowRatio() {
+  return m_nWideNarrowRatio;
+}
+
+FX_CHAR CFWL_Barcode::CFWL_BarcodeDP::GetStartChar() {
+  return m_cStartChar;
+}
+
+FX_CHAR CFWL_Barcode::CFWL_BarcodeDP::GetEndChar() {
+  return m_cEndChar;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetVersion() {
+  return m_nVersion;
+}
+
+int32_t CFWL_Barcode::CFWL_BarcodeDP::GetErrorCorrectionLevel() {
+  return m_nECLevel;
+}
+
+FX_BOOL CFWL_Barcode::CFWL_BarcodeDP::GetTruncated() {
+  return m_bTruncated;
+}
+
+uint32_t CFWL_Barcode::CFWL_BarcodeDP::GetBarcodeAttributeMask() {
+  return m_dwAttributeMask;
+}
diff --git a/xfa/fwl/lightwidget/cfwl_barcode.h b/xfa/fwl/lightwidget/cfwl_barcode.h
index 565ebb8..1a22064 100644
--- a/xfa/fwl/lightwidget/cfwl_barcode.h
+++ b/xfa/fwl/lightwidget/cfwl_barcode.h
@@ -80,28 +80,31 @@
 
  protected:
   CFWL_Barcode();
-  virtual ~CFWL_Barcode();
+  ~CFWL_Barcode() override;
 
   class CFWL_BarcodeDP : public IFWL_BarcodeDP {
    public:
-    CFWL_BarcodeDP() : m_dwAttributeMask(FWL_BCDATTRIBUTE_NONE) {}
+    CFWL_BarcodeDP();
 
+    // IFWL_DataProvider
     FWL_Error GetCaption(IFWL_Widget* pWidget,
                          CFX_WideString& wsCaption) override;
-    BC_CHAR_ENCODING GetCharEncoding() override { return m_eCharEncoding; }
-    int32_t GetModuleHeight() override { return m_nModuleHeight; }
-    int32_t GetModuleWidth() override { return m_nModuleWidth; }
-    int32_t GetDataLength() override { return m_nDataLength; }
-    int32_t GetCalChecksum() override { return m_nCalChecksum; }
-    FX_BOOL GetPrintChecksum() override { return m_bPrintChecksum; }
-    BC_TEXT_LOC GetTextLocation() override { return m_eTextLocation; }
-    int32_t GetWideNarrowRatio() override { return m_nWideNarrowRatio; }
-    FX_CHAR GetStartChar() override { return m_cStartChar; }
-    FX_CHAR GetEndChar() override { return m_cEndChar; }
-    int32_t GetVersion() override { return m_nVersion; }
-    int32_t GetErrorCorrectionLevel() override { return m_nECLevel; }
-    FX_BOOL GetTruncated() override { return m_bTruncated; }
-    uint32_t GetBarcodeAttributeMask() override { return m_dwAttributeMask; }
+
+    // IFWL_BarcodeDP
+    BC_CHAR_ENCODING GetCharEncoding() override;
+    int32_t GetModuleHeight() override;
+    int32_t GetModuleWidth() override;
+    int32_t GetDataLength() override;
+    int32_t GetCalChecksum() override;
+    FX_BOOL GetPrintChecksum() override;
+    BC_TEXT_LOC GetTextLocation() override;
+    int32_t GetWideNarrowRatio() override;
+    FX_CHAR GetStartChar() override;
+    FX_CHAR GetEndChar() override;
+    int32_t GetVersion() override;
+    int32_t GetErrorCorrectionLevel() override;
+    FX_BOOL GetTruncated() override;
+    uint32_t GetBarcodeAttributeMask() override;
 
     BC_CHAR_ENCODING m_eCharEncoding;
     int32_t m_nModuleHeight, m_nModuleWidth;
diff --git a/xfa/fwl/lightwidget/cfwl_checkbox.h b/xfa/fwl/lightwidget/cfwl_checkbox.h
index 061e46f..7fcd43a 100644
--- a/xfa/fwl/lightwidget/cfwl_checkbox.h
+++ b/xfa/fwl/lightwidget/cfwl_checkbox.h
@@ -12,27 +12,33 @@
 
 class CFWL_CheckBox : public CFWL_Widget {
  public:
+  CFWL_CheckBox();
+  ~CFWL_CheckBox() override;
+
   static CFWL_CheckBox* Create();
 
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
-  FWL_Error GetCaption(CFX_WideString& wsCaption);
   FWL_Error SetCaption(const CFX_WideStringC& wsCaption);
   FWL_Error SetBoxSize(FX_FLOAT fHeight);
   int32_t GetCheckState();
   FWL_Error SetCheckState(int32_t iCheck);
-  CFWL_CheckBox();
-  virtual ~CFWL_CheckBox();
 
  protected:
   class CFWL_CheckBoxDP : public IFWL_CheckBoxDP {
    public:
     CFWL_CheckBoxDP();
-    virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                                 CFX_WideString& wsCaption);
-    virtual FX_FLOAT GetBoxSize(IFWL_Widget* pWidget);
+
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
+
+    // IFWL_CheckBoxDP
+    FX_FLOAT GetBoxSize(IFWL_Widget* pWidget) override;
+
     FX_FLOAT m_fBoxHeight;
     CFX_WideString m_wsCaption;
   };
+
   CFWL_CheckBoxDP m_checkboxData;
 };
 
diff --git a/xfa/fwl/lightwidget/cfwl_combobox.cpp b/xfa/fwl/lightwidget/cfwl_combobox.cpp
index 934b0d8..9d20c97 100644
--- a/xfa/fwl/lightwidget/cfwl_combobox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_combobox.cpp
@@ -290,6 +290,12 @@
 
 CFWL_ComboBox::CFWL_ComboBoxDP::~CFWL_ComboBoxDP() {}
 
+FWL_Error CFWL_ComboBox::CFWL_ComboBoxDP::GetCaption(
+    IFWL_Widget* pWidget,
+    CFX_WideString& wsCaption) {
+  return FWL_Error::Succeeded;
+}
+
 int32_t CFWL_ComboBox::CFWL_ComboBoxDP::CountItems(IFWL_Widget* pWidget) {
   return m_ItemArray.size();
 }
@@ -427,3 +433,7 @@
 FX_FLOAT CFWL_ComboBox::CFWL_ComboBoxDP::GetListHeight(IFWL_Widget* pWidget) {
   return m_fMaxListHeight;
 }
+
+CFWL_ComboBoxItem::CFWL_ComboBoxItem() : m_pDIB(nullptr), m_pData(nullptr) {}
+
+CFWL_ComboBoxItem::~CFWL_ComboBoxItem() {}
diff --git a/xfa/fwl/lightwidget/cfwl_combobox.h b/xfa/fwl/lightwidget/cfwl_combobox.h
index a708589..ba5db16 100644
--- a/xfa/fwl/lightwidget/cfwl_combobox.h
+++ b/xfa/fwl/lightwidget/cfwl_combobox.h
@@ -20,6 +20,9 @@
 
 class CFWL_ComboBox : public CFWL_Widget {
  public:
+  CFWL_ComboBox();
+  ~CFWL_ComboBox() override;
+
   static CFWL_ComboBox* Create();
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   int32_t AddString(const CFX_WideStringC& wsText);
@@ -65,58 +68,59 @@
   FWL_Error GetBBox(CFX_RectF& rect);
   FWL_Error EditModifyStylesEx(uint32_t dwStylesExAdded,
                                uint32_t dwStylesExRemoved);
-  CFWL_ComboBox();
-  virtual ~CFWL_ComboBox();
 
  protected:
   class CFWL_ComboBoxDP : public IFWL_ComboBoxDP {
    public:
     CFWL_ComboBoxDP();
-    ~CFWL_ComboBoxDP();
-    virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                                 CFX_WideString& wsCaption) {
-      return FWL_Error::Succeeded;
-    }
+    ~CFWL_ComboBoxDP() override;
 
-    virtual int32_t CountItems(IFWL_Widget* pWidget);
-    virtual IFWL_ListItem* GetItem(IFWL_Widget* pWidget, int32_t nIndex);
-    virtual int32_t GetItemIndex(IFWL_Widget* pWidget, IFWL_ListItem* pItem);
-    virtual FX_BOOL SetItemIndex(IFWL_Widget* pWidget,
-                                 IFWL_ListItem* pItem,
-                                 int32_t nIndex);
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
 
-    virtual uint32_t GetItemStyles(IFWL_Widget* pWidget, IFWL_ListItem* pItem);
-    virtual FWL_Error GetItemText(IFWL_Widget* pWidget,
-                                  IFWL_ListItem* pItem,
-                                  CFX_WideString& wsText);
-    virtual FWL_Error GetItemRect(IFWL_Widget* pWidget,
-                                  IFWL_ListItem* pItem,
-                                  CFX_RectF& rtItem);
-    virtual void* GetItemData(IFWL_Widget* pWidget, IFWL_ListItem* pItem);
-    virtual FWL_Error SetItemStyles(IFWL_Widget* pWidget,
-                                    IFWL_ListItem* pItem,
-                                    uint32_t dwStyle);
-    virtual FWL_Error SetItemText(IFWL_Widget* pWidget,
-                                  IFWL_ListItem* pItem,
-                                  const FX_WCHAR* pszText);
-    virtual FWL_Error SetItemRect(IFWL_Widget* pWidget,
-                                  IFWL_ListItem* pItem,
-                                  const CFX_RectF& rtItem);
-    virtual FX_FLOAT GetItemHeight(IFWL_Widget* pWidget);
-    virtual CFX_DIBitmap* GetItemIcon(IFWL_Widget* pWidget,
-                                      IFWL_ListItem* pItem);
-    virtual FWL_Error GetItemCheckRect(IFWL_Widget* pWidget,
-                                       IFWL_ListItem* pItem,
-                                       CFX_RectF& rtCheck);
-    virtual FWL_Error SetItemCheckRect(IFWL_Widget* pWidget,
-                                       IFWL_ListItem* pItem,
-                                       const CFX_RectF& rtCheck);
-    virtual uint32_t GetItemCheckState(IFWL_Widget* pWidget,
-                                       IFWL_ListItem* pItem);
-    virtual FWL_Error SetItemCheckState(IFWL_Widget* pWidget,
-                                        IFWL_ListItem* pItem,
-                                        uint32_t dwCheckState);
-    virtual FX_FLOAT GetListHeight(IFWL_Widget* pWidget);
+    // IFWL_ListBoxDP
+    int32_t CountItems(IFWL_Widget* pWidget) override;
+    IFWL_ListItem* GetItem(IFWL_Widget* pWidget, int32_t nIndex) override;
+    int32_t GetItemIndex(IFWL_Widget* pWidget, IFWL_ListItem* pItem) override;
+    FX_BOOL SetItemIndex(IFWL_Widget* pWidget,
+                         IFWL_ListItem* pItem,
+                         int32_t nIndex) override;
+
+    uint32_t GetItemStyles(IFWL_Widget* pWidget, IFWL_ListItem* pItem) override;
+    FWL_Error GetItemText(IFWL_Widget* pWidget,
+                          IFWL_ListItem* pItem,
+                          CFX_WideString& wsText) override;
+    FWL_Error GetItemRect(IFWL_Widget* pWidget,
+                          IFWL_ListItem* pItem,
+                          CFX_RectF& rtItem) override;
+    void* GetItemData(IFWL_Widget* pWidget, IFWL_ListItem* pItem) override;
+    FWL_Error SetItemStyles(IFWL_Widget* pWidget,
+                            IFWL_ListItem* pItem,
+                            uint32_t dwStyle) override;
+    FWL_Error SetItemText(IFWL_Widget* pWidget,
+                          IFWL_ListItem* pItem,
+                          const FX_WCHAR* pszText) override;
+    FWL_Error SetItemRect(IFWL_Widget* pWidget,
+                          IFWL_ListItem* pItem,
+                          const CFX_RectF& rtItem) override;
+    FX_FLOAT GetItemHeight(IFWL_Widget* pWidget) override;
+    CFX_DIBitmap* GetItemIcon(IFWL_Widget* pWidget,
+                              IFWL_ListItem* pItem) override;
+    FWL_Error GetItemCheckRect(IFWL_Widget* pWidget,
+                               IFWL_ListItem* pItem,
+                               CFX_RectF& rtCheck) override;
+    FWL_Error SetItemCheckRect(IFWL_Widget* pWidget,
+                               IFWL_ListItem* pItem,
+                               const CFX_RectF& rtCheck) override;
+    uint32_t GetItemCheckState(IFWL_Widget* pWidget,
+                               IFWL_ListItem* pItem) override;
+    FWL_Error SetItemCheckState(IFWL_Widget* pWidget,
+                                IFWL_ListItem* pItem,
+                                uint32_t dwCheckState) override;
+
+    // IFWL_ComboBoxDP
+    FX_FLOAT GetListHeight(IFWL_Widget* pWidget) override;
 
     std::vector<std::unique_ptr<CFWL_ComboBoxItem>> m_ItemArray;
     FX_FLOAT m_fMaxListHeight;
@@ -127,7 +131,8 @@
 
 class CFWL_ComboBoxItem : public IFWL_ListItem {
  public:
-  CFWL_ComboBoxItem() : m_pDIB(nullptr), m_pData(nullptr) {}
+  CFWL_ComboBoxItem();
+  ~CFWL_ComboBoxItem();
 
   CFX_RectF m_rtItem;
   uint32_t m_dwStyles;
diff --git a/xfa/fwl/lightwidget/cfwl_datetimepicker.h b/xfa/fwl/lightwidget/cfwl_datetimepicker.h
index b4349d0..2fa385f 100644
--- a/xfa/fwl/lightwidget/cfwl_datetimepicker.h
+++ b/xfa/fwl/lightwidget/cfwl_datetimepicker.h
@@ -13,6 +13,7 @@
 class CFWL_DateTimePicker : public CFWL_Widget {
  public:
   static CFWL_DateTimePicker* Create();
+
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   FWL_Error SetToday(int32_t iYear, int32_t iMonth, int32_t iDay);
   FWL_Error GetEditText(CFX_WideString& wsText);
@@ -40,22 +41,28 @@
                                uint32_t dwStylesExRemoved);
 
  protected:
-  CFWL_DateTimePicker();
-  virtual ~CFWL_DateTimePicker();
   class CFWL_DateTimePickerDP : public IFWL_DateTimePickerDP {
    public:
     CFWL_DateTimePickerDP();
-    virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                                 CFX_WideString& wsCaption);
-    virtual FWL_Error GetToday(IFWL_Widget* pWidget,
-                               int32_t& iYear,
-                               int32_t& iMonth,
-                               int32_t& iDay);
+
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
+
+    // IFWL_DateTimePickerDP
+    FWL_Error GetToday(IFWL_Widget* pWidget,
+                       int32_t& iYear,
+                       int32_t& iMonth,
+                       int32_t& iDay) override;
     int32_t m_iYear;
     int32_t m_iMonth;
     int32_t m_iDay;
     CFX_WideString m_wsData;
   };
+
+  CFWL_DateTimePicker();
+  ~CFWL_DateTimePicker() override;
+
   CFWL_DateTimePickerDP m_DateTimePickerDP;
 };
 
diff --git a/xfa/fwl/lightwidget/cfwl_edit.h b/xfa/fwl/lightwidget/cfwl_edit.h
index 349b380..a9c058a 100644
--- a/xfa/fwl/lightwidget/cfwl_edit.h
+++ b/xfa/fwl/lightwidget/cfwl_edit.h
@@ -16,6 +16,9 @@
 
 class CFWL_Edit : public CFWL_Widget {
  public:
+  CFWL_Edit();
+  ~CFWL_Edit() override;
+
   static CFWL_Edit* Create();
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   FWL_Error SetText(const CFX_WideString& wsText);
@@ -60,8 +63,6 @@
                           std::vector<CFX_ByteString>& sSuggest);
   FX_BOOL ReplaceSpellCheckWord(CFX_PointF pointf,
                                 const CFX_ByteStringC& bsReplace);
-  CFWL_Edit();
-  virtual ~CFWL_Edit();
 };
 
 #endif  // XFA_FWL_LIGHTWIDGET_CFWL_EDIT_H_
diff --git a/xfa/fwl/lightwidget/cfwl_listbox.cpp b/xfa/fwl/lightwidget/cfwl_listbox.cpp
index d51db44..be6a6b1 100644
--- a/xfa/fwl/lightwidget/cfwl_listbox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_listbox.cpp
@@ -341,3 +341,15 @@
   static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState;
   return FWL_Error::Succeeded;
 }
+
+CFWL_ListItem::CFWL_ListItem() {
+  m_rtItem.Reset();
+  m_dwStates = 0;
+  m_wsText = L"";
+  m_pDIB = NULL;
+  m_pData = NULL;
+  m_dwCheckState = 0;
+  m_rtCheckBox.Reset();
+}
+
+CFWL_ListItem::~CFWL_ListItem() {}
diff --git a/xfa/fwl/lightwidget/cfwl_listbox.h b/xfa/fwl/lightwidget/cfwl_listbox.h
index 7d79893..c684015 100644
--- a/xfa/fwl/lightwidget/cfwl_listbox.h
+++ b/xfa/fwl/lightwidget/cfwl_listbox.h
@@ -19,6 +19,9 @@
 
 class CFWL_ListBox : public CFWL_Widget {
  public:
+  CFWL_ListBox();
+  ~CFWL_ListBox() override;
+
   static CFWL_ListBox* Create();
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   FWL_Error AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem);
@@ -43,14 +46,12 @@
   void* GetItemData(IFWL_ListItem* pItem);
   IFWL_ListItem* GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy);
   uint32_t GetItemStates(IFWL_ListItem* pItem);
-  CFWL_ListBox();
-  virtual ~CFWL_ListBox();
 
  protected:
   class CFWL_ListBoxDP : public IFWL_ListBoxDP {
    public:
     CFWL_ListBoxDP();
-    ~CFWL_ListBoxDP();
+    ~CFWL_ListBoxDP() override;
 
     // IFWL_DataProvider:
     FWL_Error GetCaption(IFWL_Widget* pWidget,
@@ -105,15 +106,9 @@
 
 class CFWL_ListItem : public IFWL_ListItem {
  public:
-  CFWL_ListItem() {
-    m_rtItem.Reset();
-    m_dwStates = 0;
-    m_wsText = L"";
-    m_pDIB = NULL;
-    m_pData = NULL;
-    m_dwCheckState = 0;
-    m_rtCheckBox.Reset();
-  }
+  CFWL_ListItem();
+  ~CFWL_ListItem();
+
   CFX_RectF m_rtItem;
   uint32_t m_dwStates;
   CFX_WideString m_wsText;
diff --git a/xfa/fwl/lightwidget/cfwl_picturebox.cpp b/xfa/fwl/lightwidget/cfwl_picturebox.cpp
index f3f52ab..33b11cd 100644
--- a/xfa/fwl/lightwidget/cfwl_picturebox.cpp
+++ b/xfa/fwl/lightwidget/cfwl_picturebox.cpp
@@ -97,6 +97,16 @@
 
 CFWL_PictureBox::~CFWL_PictureBox() {}
 
+CFWL_PictureBox::CFWL_PictureBoxDP::CFWL_PictureBoxDP()
+    : m_pBitmap(nullptr),
+      m_iOpacity(0),
+      m_iFlipMode(0),
+      m_fRotation(0.0f),
+      m_fScaleX(1.0f),
+      m_fScaleY(1.0f),
+      m_fOffSetX(0.0f),
+      m_fOffSetY(0.0f) {}
+
 FWL_Error CFWL_PictureBox::CFWL_PictureBoxDP::GetCaption(
     IFWL_Widget* pWidget,
     CFX_WideString& wsCaption) {
diff --git a/xfa/fwl/lightwidget/cfwl_picturebox.h b/xfa/fwl/lightwidget/cfwl_picturebox.h
index 8b0b13d..95a0117 100644
--- a/xfa/fwl/lightwidget/cfwl_picturebox.h
+++ b/xfa/fwl/lightwidget/cfwl_picturebox.h
@@ -13,7 +13,11 @@
 
 class CFWL_PictureBox : public CFWL_Widget {
  public:
+  CFWL_PictureBox();
+  ~CFWL_PictureBox() override;
+
   static CFWL_PictureBox* Create();
+
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   CFX_DIBitmap* GetPicture();
   FWL_Error SetPicture(CFX_DIBitmap* pBitmap);
@@ -27,28 +31,24 @@
   FWL_Error SetScale(FX_FLOAT fScaleX, FX_FLOAT fScaleY);
   FWL_Error GetOffset(FX_FLOAT& fx, FX_FLOAT& fy);
   FWL_Error SetOffset(FX_FLOAT fx, FX_FLOAT fy);
-  CFWL_PictureBox();
-  virtual ~CFWL_PictureBox();
 
  protected:
   class CFWL_PictureBoxDP : public IFWL_PictureBoxDP {
    public:
-    CFWL_PictureBoxDP() {
-      m_fRotation = 0.0f;
-      m_fScaleX = 1.0f;
-      m_fScaleY = 1.0f;
-      m_fOffSetX = 0.0f;
-      m_fOffSetY = 0.0f;
-      m_pBitmap = NULL;
-    }
-    virtual FWL_Error GetCaption(IFWL_Widget* pWidget,
-                                 CFX_WideString& wsCaption);
-    virtual CFX_DIBitmap* GetPicture(IFWL_Widget* pWidget);
-    virtual CFX_DIBitmap* GetErrorPicture(IFWL_Widget* pWidget);
-    virtual CFX_DIBitmap* GetInitialPicture(IFWL_Widget* pWidget);
-    virtual int32_t GetOpacity(IFWL_Widget* pWidget);
-    virtual int32_t GetFlipMode(IFWL_Widget* pWidget);
-    virtual FWL_Error GetMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix);
+    CFWL_PictureBoxDP();
+
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
+
+    // IFWL_PictureBoxDP
+    CFX_DIBitmap* GetPicture(IFWL_Widget* pWidget) override;
+    CFX_DIBitmap* GetErrorPicture(IFWL_Widget* pWidget) override;
+    CFX_DIBitmap* GetInitialPicture(IFWL_Widget* pWidget) override;
+    int32_t GetOpacity(IFWL_Widget* pWidget) override;
+    int32_t GetFlipMode(IFWL_Widget* pWidget) override;
+    FWL_Error GetMatrix(IFWL_Widget* pWidget, CFX_Matrix& matrix) override;
+
     CFX_DIBitmap* m_pBitmap;
     int32_t m_iOpacity;
     int32_t m_iFlipMode;
@@ -59,6 +59,7 @@
     FX_FLOAT m_fOffSetY;
     CFX_WideString m_wsData;
   };
+
   CFWL_PictureBoxDP m_PictureBoxDP;
 };
 
diff --git a/xfa/fwl/lightwidget/cfwl_pushbutton.h b/xfa/fwl/lightwidget/cfwl_pushbutton.h
index 5ca3dde..145f5ed 100644
--- a/xfa/fwl/lightwidget/cfwl_pushbutton.h
+++ b/xfa/fwl/lightwidget/cfwl_pushbutton.h
@@ -12,24 +12,33 @@
 
 class CFWL_PushButton : public CFWL_Widget {
  public:
+  CFWL_PushButton();
+  ~CFWL_PushButton() override;
+
   static CFWL_PushButton* Create();
+
   FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = NULL);
   FWL_Error GetCaption(CFX_WideString& wsCaption);
   FWL_Error SetCaption(const CFX_WideStringC& wsCaption);
   CFX_DIBitmap* GetPicture();
   FWL_Error SetPicture(CFX_DIBitmap* pBitmap);
-  CFWL_PushButton();
-  virtual ~CFWL_PushButton();
 
  protected:
   class CFWL_PushButtonDP : public IFWL_PushButtonDP {
    public:
     CFWL_PushButtonDP() : m_pBitmap(NULL) {}
-    FWL_Error GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption);
-    virtual CFX_DIBitmap* GetPicture(IFWL_Widget* pWidget);
+
+    // IFWL_DataProvider
+    FWL_Error GetCaption(IFWL_Widget* pWidget,
+                         CFX_WideString& wsCaption) override;
+
+    // IFWL_PushButtonDP
+    CFX_DIBitmap* GetPicture(IFWL_Widget* pWidget) override;
+
     CFX_WideString m_wsCaption;
     CFX_DIBitmap* m_pBitmap;
   };
+
   CFWL_PushButtonDP m_buttonData;
 };
 
diff --git a/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp b/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp
index 9afa1b6..31e1dda 100644
--- a/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp
+++ b/xfa/fwl/lightwidget/cfwl_widgetproperties.cpp
@@ -8,6 +8,20 @@
 
 #include "xfa/fwl/lightwidget/cfwl_widget.h"
 
+CFWL_WidgetProperties::CFWL_WidgetProperties()
+    : m_dwStyles(FWL_WGTSTYLE_Child),
+      m_dwStyleExes(0),
+      m_dwStates(0),
+      m_pParent(nullptr),
+      m_pOwner(nullptr) {
+  m_rtWidget.Set(0, 0, 0, 0);
+}
+
+CFWL_WidgetProperties::~CFWL_WidgetProperties() {}
+
+CFWL_WidgetProperties::CFWL_WidgetProperties(
+    const CFWL_WidgetProperties& other) = default;
+
 CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties(
     IFWL_DataProvider* pDataProvider) const {
   CFWL_WidgetImpProperties result;
diff --git a/xfa/fwl/lightwidget/cfwl_widgetproperties.h b/xfa/fwl/lightwidget/cfwl_widgetproperties.h
index 2a3e3ff..5d4116e 100644
--- a/xfa/fwl/lightwidget/cfwl_widgetproperties.h
+++ b/xfa/fwl/lightwidget/cfwl_widgetproperties.h
@@ -17,14 +17,9 @@
 
 class CFWL_WidgetProperties {
  public:
-  CFWL_WidgetProperties()
-      : m_dwStyles(FWL_WGTSTYLE_Child),
-        m_dwStyleExes(0),
-        m_dwStates(0),
-        m_pParent(nullptr),
-        m_pOwner(nullptr) {
-    m_rtWidget.Set(0, 0, 0, 0);
-  }
+  CFWL_WidgetProperties();
+  ~CFWL_WidgetProperties();
+  CFWL_WidgetProperties(const CFWL_WidgetProperties& other);
 
   CFWL_WidgetImpProperties MakeWidgetImpProperties(
       IFWL_DataProvider* pDataProvider) const;