Remove CFWL_Note.

This CL removes the CFWL_Note class. The two subclasses, CFWL_Event and
CFWL_Message are distinct types and should not be related by the subclass. The
code has been updated to pass the correct types as needed.

The various FWL_EVTHASH and FWL_MSGHASH defines have all been removed and turned
into an FWL_EventType and FWL_MessageType enum classes.

BUG=pdfium:474

Review URL: https://codereview.chromium.org/1901183002
diff --git a/BUILD.gn b/BUILD.gn
index bdc7570..a088c76 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -42,9 +42,7 @@
   }
 
   if (is_win) {
-    cflags += [
-      "/wd4267",
-    ]
+    cflags += [ "/wd4267" ]
   }
 
   if (is_clang || is_posix) {
@@ -1023,7 +1021,6 @@
       "xfa/fwl/basewidget/ifwl_tooltip.h",
       "xfa/fwl/core/cfwl_event.h",
       "xfa/fwl/core/cfwl_message.h",
-      "xfa/fwl/core/cfwl_note.h",
       "xfa/fwl/core/cfwl_themebackground.h",
       "xfa/fwl/core/cfwl_themepart.h",
       "xfa/fwl/core/cfwl_themetext.h",
diff --git a/xfa.gyp b/xfa.gyp
index ce7d720..2cd6f96 100644
--- a/xfa.gyp
+++ b/xfa.gyp
@@ -173,7 +173,6 @@
         "xfa/fwl/basewidget/ifwl_spinbutton.h",
         "xfa/fwl/basewidget/ifwl_tooltip.h",
         "xfa/fwl/core/cfwl_event.h",
-        "xfa/fwl/core/cfwl_note.h",
         "xfa/fwl/core/cfwl_message.h",
         "xfa/fwl/core/cfwl_themebackground.h",
         "xfa/fwl/core/cfwl_themepart.h",
diff --git a/xfa/fwl/basewidget/fwl_barcodeimp.cpp b/xfa/fwl/basewidget/fwl_barcodeimp.cpp
index 8238d6a..cc0bd62 100644
--- a/xfa/fwl/basewidget/fwl_barcodeimp.cpp
+++ b/xfa/fwl/basewidget/fwl_barcodeimp.cpp
@@ -217,11 +217,12 @@
   }
   return FALSE;
 }
+
 CFWL_BarcodeImpDelegate::CFWL_BarcodeImpDelegate(CFWL_BarcodeImp* pOwner)
     : CFWL_EditImpDelegate(pOwner) {}
+
 FWL_ERR CFWL_BarcodeImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
-  uint32_t dwFlag = pEvent->GetClassID();
-  if (dwFlag == FWL_EVTHASH_EDT_TextChanged) {
+  if (pEvent->GetClassID() == CFWL_EventType::TextChanged) {
     CFWL_BarcodeImp* pOwner = static_cast<CFWL_BarcodeImp*>(m_pOwner);
     pOwner->ReleaseBarcodeEngine();
     pOwner->m_dwStatus = XFA_BCS_NeedUpdate;
diff --git a/xfa/fwl/basewidget/fwl_checkboximp.cpp b/xfa/fwl/basewidget/fwl_checkboximp.cpp
index 9ed2f0b..e511b8e4 100644
--- a/xfa/fwl/basewidget/fwl_checkboximp.cpp
+++ b/xfa/fwl/basewidget/fwl_checkboximp.cpp
@@ -409,22 +409,26 @@
 }
 CFWL_CheckBoxImpDelegate::CFWL_CheckBoxImpDelegate(CFWL_CheckBoxImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_CheckBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
   int32_t iRet = 1;
-  switch (dwMsgCode) {
-    case FWL_MSGHASH_Activate: {
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::Activate: {
       OnActivate(pMessage);
       break;
     }
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
       uint32_t dwCmd = pMsg->m_dwCmd;
       switch (dwCmd) {
@@ -444,19 +448,23 @@
           OnMouseLeave(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
-      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) {
+      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown)
         OnKeyDown(pKey);
-      }
       break;
     }
-    default: { iRet = 0; }
+    default: {
+      iRet = 0;
+      break;
+    }
   }
+
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
diff --git a/xfa/fwl/basewidget/fwl_comboboximp.cpp b/xfa/fwl/basewidget/fwl_comboboximp.cpp
index b093b6c..d7fe209 100644
--- a/xfa/fwl/basewidget/fwl_comboboximp.cpp
+++ b/xfa/fwl/basewidget/fwl_comboboximp.cpp
@@ -141,23 +141,24 @@
 
 CFWL_ComboEditImpDelegate::CFWL_ComboEditImpDelegate(CFWL_ComboEditImp* pOwner)
     : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {}
+
 int32_t CFWL_ComboEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
   FX_BOOL backDefault = TRUE;
-  switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      if (dwMsgCode == FWL_MSGHASH_SetFocus) {
-        m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
-      } else {
-        m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
-      }
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::SetFocus: {
+      m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
       backDefault = FALSE;
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
+      backDefault = FALSE;
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
       if ((pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) &&
           ((m_pOwner->m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)) {
@@ -166,13 +167,14 @@
       }
       break;
     }
-    default: {}
+    default:
+      break;
   }
-  if (!backDefault) {
+  if (!backDefault)
     return 1;
-  }
   return CFWL_EditImpDelegate::OnProcessMessage(pMessage);
 }
+
 void CFWL_ComboEditImp::ClearSelected() {
   ClearSelections();
   Repaint(&m_rtClient);
@@ -281,17 +283,20 @@
 void CFWL_ComboListImp::SetFocus(FX_BOOL bSet) {
   CFWL_WidgetImp::SetFocus(bSet);
 }
+
 CFWL_ComboListImpDelegate::CFWL_ComboListImpDelegate(CFWL_ComboListImp* pOwner)
     : CFWL_ListBoxImpDelegate(pOwner), m_pOwner(pOwner) {}
+
 int32_t CFWL_ComboListImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwHashCode = pMessage->GetClassID();
+
+  CFWL_MessageType dwHashCode = pMessage->GetClassID();
   FX_BOOL backDefault = TRUE;
-  if (dwHashCode == FWL_MSGHASH_SetFocus ||
-      dwHashCode == FWL_MSGHASH_KillFocus) {
-    OnDropListFocusChanged(pMessage, dwHashCode == FWL_MSGHASH_SetFocus);
-  } else if (dwHashCode == FWL_MSGHASH_Mouse) {
+  if (dwHashCode == CFWL_MessageType::SetFocus ||
+      dwHashCode == CFWL_MessageType::KillFocus) {
+    OnDropListFocusChanged(pMessage, dwHashCode == CFWL_MessageType::SetFocus);
+  } else if (dwHashCode == CFWL_MessageType::Mouse) {
     CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
     if (m_pOwner->IsShowScrollBar(TRUE) && m_pOwner->m_pVertScrollBar) {
       CFX_RectF rect;
@@ -323,14 +328,14 @@
       }
       default: {}
     }
-  } else if (dwHashCode == FWL_MSGHASH_Key) {
+  } else if (dwHashCode == CFWL_MessageType::Key) {
     backDefault = !OnDropListKey(static_cast<CFWL_MsgKey*>(pMessage));
   }
-  if (!backDefault) {
+  if (!backDefault)
     return 1;
-  }
   return CFWL_ListBoxImpDelegate::OnProcessMessage(pMessage);
 }
+
 void CFWL_ComboListImpDelegate::OnDropListFocusChanged(CFWL_Message* pMsg,
                                                        FX_BOOL bSet) {
   if (!bSet) {
@@ -1356,26 +1361,30 @@
     m_pEdit->Update();
   }
 }
+
 CFWL_ComboBoxImpDelegate::CFWL_ComboBoxImpDelegate(CFWL_ComboBoxImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_ComboBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
-  if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) {
+  if (m_pOwner->m_pWidgetMgr->IsFormDisabled())
     return DisForm_OnProcessMessage(pMessage);
-  }
+
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
   FX_BOOL iRet = 1;
-  switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMsg->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMsg);
           break;
@@ -1392,22 +1401,28 @@
           OnMouseLeave(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       OnKey(static_cast<CFWL_MsgKey*>(pMessage));
       break;
     }
-    default: { iRet = 0; }
+    default: {
+      iRet = 0;
+      break;
+    }
   }
+
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_ComboBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
-  uint32_t dwFlag = pEvent->GetClassID();
-  if (dwFlag == FWL_EVTHASH_LTB_DrawItem) {
+  CFWL_EventType dwFlag = pEvent->GetClassID();
+  if (dwFlag == CFWL_EventType::DrawItem) {
     CFWL_EvtLtbDrawItem* pDrawItemEvent =
         static_cast<CFWL_EvtLtbDrawItem*>(pEvent);
     CFWL_EvtCmbDrawItem pTemp;
@@ -1416,14 +1431,14 @@
     pTemp.m_index = pDrawItemEvent->m_index;
     pTemp.m_rtItem = pDrawItemEvent->m_rect;
     m_pOwner->DispatchEvent(&pTemp);
-  } else if (dwFlag == FWL_EVTHASH_Scroll) {
+  } else if (dwFlag == CFWL_EventType::Scroll) {
     CFWL_EvtScroll* pScrollEvent = static_cast<CFWL_EvtScroll*>(pEvent);
     CFWL_EvtScroll pScrollEv;
     pScrollEv.m_pSrcTarget = m_pOwner->m_pInterface;
     pScrollEv.m_iScrollCode = pScrollEvent->m_iScrollCode;
     pScrollEv.m_fPos = pScrollEvent->m_fPos;
     m_pOwner->DispatchEvent(&pScrollEv);
-  } else if (dwFlag == FWL_EVTHASH_EDT_TextChanged) {
+  } else if (dwFlag == CFWL_EventType::TextChanged) {
     CFWL_EvtEdtTextChanged* pTextChangedEvent =
         static_cast<CFWL_EvtEdtTextChanged*>(pEvent);
     CFWL_EvtCmbEditChanged pTemp;
@@ -1435,6 +1450,7 @@
   }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ComboBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                                const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
@@ -1586,20 +1602,23 @@
     CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
   FX_BOOL backDefault = TRUE;
-  switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::SetFocus: {
       backDefault = FALSE;
-      DisForm_OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+      DisForm_OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      backDefault = FALSE;
+      DisForm_OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       backDefault = FALSE;
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMsg->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           DisForm_OnLButtonDown(pMsg);
           break;
@@ -1608,22 +1627,22 @@
           OnLButtonUp(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       backDefault = FALSE;
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
-      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyUp) {
+      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyUp)
         break;
-      }
       if (m_pOwner->DisForm_IsDropListShowed() &&
           pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) {
-        uint32_t dwKeyCode = pKey->m_dwKeyCode;
-        FX_BOOL bListKey =
-            dwKeyCode == FWL_VKEY_Up || dwKeyCode == FWL_VKEY_Down ||
-            dwKeyCode == FWL_VKEY_Return || dwKeyCode == FWL_VKEY_Escape;
+        FX_BOOL bListKey = pKey->m_dwKeyCode == FWL_VKEY_Up ||
+                           pKey->m_dwKeyCode == FWL_VKEY_Down ||
+                           pKey->m_dwKeyCode == FWL_VKEY_Return ||
+                           pKey->m_dwKeyCode == FWL_VKEY_Escape;
         if (bListKey) {
           IFWL_WidgetDelegate* pDelegate =
               m_pOwner->m_pListBox->SetDelegate(NULL);
@@ -1634,13 +1653,14 @@
       DisForm_OnKey(pKey);
       break;
     }
-    default: {}
+    default:
+      break;
   }
-  if (!backDefault) {
+  if (!backDefault)
     return 1;
-  }
   return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
 }
+
 void CFWL_ComboBoxImpDelegate::DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg) {
   FX_BOOL bDropDown = m_pOwner->DisForm_IsDropListShowed();
   CFX_RectF& rtBtn = bDropDown ? m_pOwner->m_rtBtn : m_pOwner->m_rtClient;
@@ -1724,6 +1744,7 @@
     pDelegate->OnProcessMessage(pMsg);
   }
 }
+
 CFWL_ComboProxyImpDelegate::CFWL_ComboProxyImpDelegate(
     IFWL_Form* pForm,
     CFWL_ComboBoxImp* pComboBox)
@@ -1732,38 +1753,50 @@
       m_fStartPos(0),
       m_pForm(pForm),
       m_pComboBox(pComboBox) {}
+
 int32_t CFWL_ComboProxyImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
-  if (dwMsgCode == FWL_MSGHASH_Mouse) {
-    CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-    uint32_t dwCmd = pMsg->m_dwCmd;
-    switch (dwCmd) {
-      case FWL_MSGMOUSECMD_LButtonDown: {
-        OnLButtonDown(pMsg);
-        break;
+
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::Mouse: {
+      CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
+      switch (pMsg->m_dwCmd) {
+        case FWL_MSGMOUSECMD_LButtonDown: {
+          OnLButtonDown(pMsg);
+          break;
+        }
+        case FWL_MSGMOUSECMD_LButtonUp: {
+          OnLButtonUp(pMsg);
+          break;
+        }
+        case FWL_MSGMOUSECMD_MouseMove: {
+          OnMouseMove(pMsg);
+          break;
+        }
+        default:
+          break;
       }
-      case FWL_MSGMOUSECMD_LButtonUp: {
-        OnLButtonUp(pMsg);
-        break;
-      }
-      case FWL_MSGMOUSECMD_MouseMove: {
-        OnMouseMove(pMsg);
-        break;
-      }
-      default: {}
+      break;
     }
-  }
-  if (dwMsgCode == FWL_MSGHASH_Deactivate) {
-    OnDeactive(static_cast<CFWL_MsgDeactivate*>(pMessage));
-  }
-  if (dwMsgCode == FWL_MSGHASH_KillFocus || dwMsgCode == FWL_MSGHASH_SetFocus) {
-    OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage),
-                   dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::Deactivate: {
+      OnDeactive(static_cast<CFWL_MsgDeactivate*>(pMessage));
+      break;
+    }
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage), FALSE);
+      break;
+    }
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(static_cast<CFWL_MsgKillFocus*>(pMessage), TRUE);
+      break;
+    }
+    default:
+      break;
   }
   return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
 }
+
 FWL_ERR CFWL_ComboProxyImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                                  const CFX_Matrix* pMatrix) {
   m_pComboBox->DrawStretchHandler(pGraphics, pMatrix);
diff --git a/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp b/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
index 2161699..c70ad69 100644
--- a/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
+++ b/xfa/fwl/basewidget/fwl_datetimepickerimp.cpp
@@ -165,27 +165,30 @@
   m_pDelegate = nullptr;
   return CFWL_EditImp::Finalize();
 }
+
 CFWL_DateTimeEditImpDelegate::CFWL_DateTimeEditImpDelegate(
     CFWL_DateTimeEdit* pOwner)
     : CFWL_EditImpDelegate(pOwner), m_pOwner(pOwner) {}
+
 int32_t CFWL_DateTimeEditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
-  if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) {
+  if (m_pOwner->m_pWidgetMgr->IsFormDisabled())
     return DisForm_OnProcessMessage(pMessage);
-  }
-  uint32_t dwHashCode = pMessage->GetClassID();
-  if (dwHashCode == FWL_MSGHASH_SetFocus ||
-      dwHashCode == FWL_MSGHASH_KillFocus) {
+
+  CFWL_MessageType dwHashCode = pMessage->GetClassID();
+  if (dwHashCode == CFWL_MessageType::SetFocus ||
+      dwHashCode == CFWL_MessageType::KillFocus) {
     IFWL_Widget* pOuter = m_pOwner->GetOuter();
     IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL);
     pDelegate->OnProcessMessage(pMessage);
   }
   return 1;
 }
+
 int32_t CFWL_DateTimeEditImpDelegate::DisForm_OnProcessMessage(
     CFWL_Message* pMessage) {
-  uint32_t dwHashCode = pMessage->GetClassID();
+  CFWL_MessageType dwHashCode = pMessage->GetClassID();
   if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) {
-    if (dwHashCode == FWL_MSGHASH_Mouse) {
+    if (dwHashCode == CFWL_MessageType::Mouse) {
       CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage);
       if (pMouse->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown ||
           pMouse->m_dwCmd == FWL_MSGMOUSECMD_RButtonDown) {
@@ -202,12 +205,13 @@
           pDateTime->Repaint(&rtInvalidate);
         }
       }
-    } else if (dwHashCode == FWL_MSGHASH_Key) {
+    } else if (dwHashCode == CFWL_MessageType::Key) {
       return CFWL_EditImpDelegate::OnProcessMessage(pMessage);
     }
   }
   return CFWL_EditImpDelegate::OnProcessMessage(pMessage);
 }
+
 CFWL_DateTimeCalendar::CFWL_DateTimeCalendar(
     const CFWL_WidgetImpProperties& properties,
     IFWL_Widget* pOuter)
@@ -224,19 +228,22 @@
   m_pDelegate = nullptr;
   return CFWL_MonthCalendarImp::Finalize();
 }
+
 CFWL_DateTimeCalendarImpDelegate::CFWL_DateTimeCalendarImpDelegate(
     CFWL_DateTimeCalendar* pOwner)
     : CFWL_MonthCalendarImpDelegate(pOwner), m_pOwner(pOwner) {
   m_bFlag = FALSE;
 }
+
 int32_t CFWL_DateTimeCalendarImpDelegate::OnProcessMessage(
     CFWL_Message* pMessage) {
-  uint32_t dwCode = pMessage->GetClassID();
-  if (dwCode == FWL_MSGHASH_SetFocus || dwCode == FWL_MSGHASH_KillFocus) {
+  CFWL_MessageType dwCode = pMessage->GetClassID();
+  if (dwCode == CFWL_MessageType::SetFocus ||
+      dwCode == CFWL_MessageType::KillFocus) {
     IFWL_Widget* pOuter = m_pOwner->GetOuter();
     IFWL_WidgetDelegate* pDelegate = pOuter->SetDelegate(NULL);
     return pDelegate->OnProcessMessage(pMessage);
-  } else if (dwCode == FWL_MSGHASH_Mouse) {
+  } else if (dwCode == CFWL_MessageType::Mouse) {
     CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
     if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonDown) {
       OnLButtonDownEx(pMsg);
@@ -248,6 +255,7 @@
   }
   return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage);
 }
+
 void CFWL_DateTimeCalendarImpDelegate::OnLButtonDownEx(CFWL_MsgMouse* pMsg) {
   if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
     m_pOwner->m_iLBtnPartStates = CFWL_PartState_Pressed;
@@ -364,9 +372,10 @@
     m_pOwner->Repaint(&rtInvalidate);
   }
 }
+
 int32_t CFWL_DateTimeCalendarImpDelegate::DisForm_OnProcessMessage(
     CFWL_Message* pMessage) {
-  if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) {
+  if (pMessage->GetClassID() == CFWL_MessageType::Mouse) {
     CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
     if (pMsg->m_dwCmd == FWL_MSGMOUSECMD_LButtonUp) {
       DisForm_OnLButtonUpEx(pMsg);
@@ -375,6 +384,7 @@
   }
   return CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage);
 }
+
 void CFWL_DateTimeCalendarImpDelegate::DisForm_OnLButtonUpEx(
     CFWL_MsgMouse* pMsg) {
   if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
@@ -1010,24 +1020,28 @@
   }
   return FWL_ERR_Succeeded;
 }
+
 CFWL_DateTimePickerImpDelegate::CFWL_DateTimePickerImpDelegate(
     CFWL_DateTimePickerImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_DateTimePickerImpDelegate::OnProcessMessage(
     CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
-  switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+
+  switch (pMessage->GetClassID()) {
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMouse->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMouse->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMouse);
           break;
@@ -1044,20 +1058,25 @@
           OnMouseLeave(pMouse);
           break;
         }
-        default: {}
+        default:
+          break;
+      }
+      break;
+    }
+    case CFWL_MessageType::Key: {
+      if (m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
+        IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL);
+        return pDelegate->OnProcessMessage(pMessage);
       }
       break;
     }
     default:
       break;
   }
-  if (dwMsgCode == FWL_MSGHASH_Key &&
-      m_pOwner->m_pEdit->GetStates() & FWL_WGTSTATE_Focused) {
-    IFWL_WidgetDelegate* pDelegate = m_pOwner->m_pEdit->SetDelegate(NULL);
-    return pDelegate->OnProcessMessage(pMessage);
-  }
+
   return CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
 }
+
 FWL_ERR CFWL_DateTimePickerImpDelegate::OnDrawWidget(
     CFX_Graphics* pGraphics,
     const CFX_Matrix* pMatrix) {
diff --git a/xfa/fwl/basewidget/fwl_editimp.cpp b/xfa/fwl/basewidget/fwl_editimp.cpp
index 54e8abc..74db0c9 100644
--- a/xfa/fwl/basewidget/fwl_editimp.cpp
+++ b/xfa/fwl/basewidget/fwl_editimp.cpp
@@ -1729,28 +1729,31 @@
     default: {}
   }
 }
+
 CFWL_EditImpDelegate::CFWL_EditImpDelegate(CFWL_EditImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_EditImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   int32_t iRet = 1;
   switch (dwMsgCode) {
-    case FWL_MSGHASH_Activate: {
+    case CFWL_MessageType::Activate: {
       DoActivate(static_cast<CFWL_MsgActivate*>(pMessage));
       break;
     }
-    case FWL_MSGHASH_Deactivate: {
+    case CFWL_MessageType::Deactivate: {
       DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage));
       break;
     }
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus:
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, dwMsgCode == CFWL_MessageType::SetFocus);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
       uint32_t dwCmd = pMsg->m_dwCmd;
       switch (dwCmd) {
@@ -1774,32 +1777,35 @@
           DoButtonDown(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
       uint32_t dwCmd = pKey->m_dwCmd;
-      if (dwCmd == FWL_MSGKEYCMD_KeyDown) {
+      if (dwCmd == FWL_MSGKEYCMD_KeyDown)
         OnKeyDown(pKey);
-      } else if (dwCmd == FWL_MSGKEYCMD_Char) {
+      else if (dwCmd == FWL_MSGKEYCMD_Char)
         OnChar(pKey);
-      }
       break;
     }
-    default: { iRet = 0; }
+    default: {
+      iRet = 0;
+      break;
+    }
   }
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_EditImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   if (!pEvent)
     return FWL_ERR_Indefinite;
-  uint32_t dwHashCode = pEvent->GetClassID();
-  if (dwHashCode != FWL_EVTHASH_Scroll) {
+  if (pEvent->GetClassID() != CFWL_EventType::Scroll)
     return FWL_ERR_Succeeded;
-  }
+
   IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget;
   if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() &&
        m_pOwner->m_pVertScrollBar) ||
@@ -1811,6 +1817,7 @@
   }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_EditImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                            const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fwl/basewidget/fwl_listboximp.cpp b/xfa/fwl/basewidget/fwl_listboximp.cpp
index 2adeb97..49d5d41 100644
--- a/xfa/fwl/basewidget/fwl_listboximp.cpp
+++ b/xfa/fwl/basewidget/fwl_listboximp.cpp
@@ -982,26 +982,30 @@
   }
   DispatchEvent(&selEvent);
 }
+
 CFWL_ListBoxImpDelegate::CFWL_ListBoxImpDelegate(CFWL_ListBoxImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_ListBoxImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  if (!m_pOwner->IsEnabled()) {
+  if (!m_pOwner->IsEnabled())
     return 1;
-  }
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   int32_t iRet = 1;
   switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMsg->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMsg);
           break;
@@ -1010,31 +1014,36 @@
           OnLButtonUp(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_MouseWheel: {
+    case CFWL_MessageType::MouseWheel: {
       OnMouseWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage));
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pMsg = static_cast<CFWL_MsgKey*>(pMessage);
       if (pMsg->m_dwCmd == FWL_MSGKEYCMD_KeyDown)
         OnKeyDown(pMsg);
       break;
     }
-    default: { iRet = 0; }
+    default: {
+      iRet = 0;
+      break;
+    }
   }
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_ListBoxImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   if (!pEvent)
     return FWL_ERR_Indefinite;
-  if (pEvent->GetClassID() != FWL_EVTHASH_Scroll) {
+  if (pEvent->GetClassID() != CFWL_EventType::Scroll)
     return FWL_ERR_Succeeded;
-  }
+
   IFWL_Widget* pSrcTarget = pEvent->m_pSrcTarget;
   if ((pSrcTarget == m_pOwner->m_pVertScrollBar.get() &&
        m_pOwner->m_pVertScrollBar) ||
@@ -1046,6 +1055,7 @@
   }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_ListBoxImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                               const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp b/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
index 1965e40..0c6539b 100644
--- a/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
+++ b/xfa/fwl/basewidget/fwl_monthcalendarimp.cpp
@@ -1013,28 +1013,33 @@
   rtDay = pDateInfo->rect;
   return TRUE;
 }
+
 CFWL_MonthCalendarImpDelegate::CFWL_MonthCalendarImpDelegate(
     CFWL_MonthCalendarImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_MonthCalendarImpDelegate::OnProcessMessage(
     CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   int32_t iRet = 1;
   switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::Key: {
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMouse->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMouse->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMouse);
           break;
@@ -1051,7 +1056,8 @@
           OnMouseLeave(pMouse);
           break;
         }
-        default: { break; }
+        default:
+          break;
       }
       break;
     }
@@ -1063,6 +1069,7 @@
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_MonthCalendarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                                     const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fwl/basewidget/fwl_pushbuttonimp.cpp b/xfa/fwl/basewidget/fwl_pushbuttonimp.cpp
index 92f0ca1..167d8f3 100644
--- a/xfa/fwl/basewidget/fwl_pushbuttonimp.cpp
+++ b/xfa/fwl/basewidget/fwl_pushbuttonimp.cpp
@@ -398,27 +398,31 @@
     m_dwTTOStyles |= FDE_TTOSTYLE_RTL;
   }
 }
+
 CFWL_PushButtonImpDelegate::CFWL_PushButtonImpDelegate(
     CFWL_PushButtonImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_PushButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
-  if (!m_pOwner->IsEnabled()) {
+  if (!m_pOwner->IsEnabled())
     return 1;
-  }
+
   int32_t iRet = 1;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMsg->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMsg);
           break;
@@ -435,15 +439,15 @@
           OnMouseLeave(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
-      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) {
+      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown)
         OnKeyDown(pKey);
-      }
       break;
     }
     default: {
@@ -454,6 +458,7 @@
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_PushButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   return FWL_ERR_Succeeded;
 }
diff --git a/xfa/fwl/basewidget/fwl_scrollbarimp.cpp b/xfa/fwl/basewidget/fwl_scrollbarimp.cpp
index 8812076..fed93fb 100644
--- a/xfa/fwl/basewidget/fwl_scrollbarimp.cpp
+++ b/xfa/fwl/basewidget/fwl_scrollbarimp.cpp
@@ -625,14 +625,17 @@
   DispatchEvent(&ev);
   return bRet;
 }
+
 CFWL_ScrollBarImpDelegate::CFWL_ScrollBarImpDelegate(CFWL_ScrollBarImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_ScrollBarImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
+
   int32_t iRet = 1;
-  uint32_t dwMsgCode = pMessage->GetClassID();
-  if (dwMsgCode == FWL_MSGHASH_Mouse) {
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
+  if (dwMsgCode == CFWL_MessageType::Mouse) {
     CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
     uint32_t dwCmd = pMsg->m_dwCmd;
     switch (dwCmd) {
@@ -652,9 +655,12 @@
         OnMouseLeave();
         break;
       }
-      default: { iRet = 0; }
+      default: {
+        iRet = 0;
+        break;
+      }
     }
-  } else if (dwMsgCode == FWL_MSGHASH_MouseWheel) {
+  } else if (dwMsgCode == CFWL_MessageType::MouseWheel) {
     CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage);
     OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX,
                  pMsg->m_fDeltaY);
@@ -663,6 +669,7 @@
   }
   return iRet;
 }
+
 FWL_ERR CFWL_ScrollBarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                                 const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fwl/basewidget/fwl_spinbuttonimp.cpp b/xfa/fwl/basewidget/fwl_spinbuttonimp.cpp
index e52529d..6d60d81 100644
--- a/xfa/fwl/basewidget/fwl_spinbuttonimp.cpp
+++ b/xfa/fwl/basewidget/fwl_spinbuttonimp.cpp
@@ -201,24 +201,29 @@
   params.m_rtPart = m_rtDnButton;
   pTheme->DrawBackground(&params);
 }
+
 CFWL_SpinButtonImpDelegate::CFWL_SpinButtonImpDelegate(
     CFWL_SpinButtonImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage)
     return 0;
+
   int32_t iRet = 1;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   switch (dwMsgCode) {
-    case FWL_MSGHASH_SetFocus:
-    case FWL_MSGHASH_KillFocus: {
-      OnFocusChanged(pMessage, dwMsgCode == FWL_MSGHASH_SetFocus);
+    case CFWL_MessageType::SetFocus: {
+      OnFocusChanged(pMessage, TRUE);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::KillFocus: {
+      OnFocusChanged(pMessage, FALSE);
+      break;
+    }
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
-      uint32_t dwCmd = pMsg->m_dwCmd;
-      switch (dwCmd) {
+      switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
           OnLButtonDown(pMsg);
           break;
@@ -235,15 +240,15 @@
           OnMouseLeave(pMsg);
           break;
         }
-        default: {}
+        default:
+          break;
       }
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pKey = static_cast<CFWL_MsgKey*>(pMessage);
-      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown) {
+      if (pKey->m_dwCmd == FWL_MSGKEYCMD_KeyDown)
         OnKeyDown(pKey);
-      }
       break;
     }
     default: {
@@ -254,6 +259,7 @@
   CFWL_WidgetImpDelegate::OnProcessMessage(pMessage);
   return iRet;
 }
+
 FWL_ERR CFWL_SpinButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   return FWL_ERR_Succeeded;
 }
diff --git a/xfa/fwl/basewidget/ifwl_checkbox.h b/xfa/fwl/basewidget/ifwl_checkbox.h
index f4cfe5f..0f4b42c 100644
--- a/xfa/fwl/basewidget/ifwl_checkbox.h
+++ b/xfa/fwl/basewidget/ifwl_checkbox.h
@@ -45,11 +45,8 @@
 #define FWL_STATE_CKB_Neutral (2 << (FWL_WGTSTATE_MAX + 2))
 #define FWL_STATE_CKB_CheckMask (3L << (FWL_WGTSTATE_MAX + 2))
 
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_CKB_CheckStateChanged 2503252963
-
 BEGIN_FWL_EVENT_DEF(CFWL_EvtCkbCheckStateChanged,
-                    FWL_EVTHASH_CKB_CheckStateChanged)
+                    CFWL_EventType::CheckStateChanged)
 END_FWL_EVENT_DEF
 
 class IFWL_CheckBoxDP : public IFWL_DataProvider {
diff --git a/xfa/fwl/basewidget/ifwl_combobox.h b/xfa/fwl/basewidget/ifwl_combobox.h
index 826404f..b767248 100644
--- a/xfa/fwl/basewidget/ifwl_combobox.h
+++ b/xfa/fwl/basewidget/ifwl_combobox.h
@@ -38,40 +38,32 @@
 #define FWL_STYLEEXT_CMB_ListItemIconText (1L << 12)
 #define FWL_STYLEEXT_CMB_ListItemAlignMask (3L << 12)
 #define FWL_STYLEEXT_CMB_ReadOnly (1L << 13)
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_CMB_PreDropDown 1357646798
-#define FWL_EVTHASH_CMB_PostDropDown 3677010285
-#define FWL_EVTHASH_CMB_CloseUp 2871271190
-#define FWL_EVTHASH_CMB_EditChanged 1527034762
-#define FWL_EVTHASH_CMB_SelChanged 2923227784
-#define FWL_EVTHASH_CMB_HoverChanged 944325448
-#define FWL_EVTHASH_CMB_DrawItem 917354551
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPreDropDown, FWL_EVTHASH_CMB_PreDropDown)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPreDropDown, CFWL_EventType::PreDropDown)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPostDropDown, FWL_EVTHASH_CMB_PostDropDown)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbPostDropDown, CFWL_EventType::PostDropDown)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbCloseUp, FWL_EVTHASH_CMB_CloseUp)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbCloseUp, CFWL_EventType::CloseUp)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbEditChanged, FWL_EVTHASH_CMB_EditChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbEditChanged, CFWL_EventType::EditChanged)
 int32_t nChangeType;
 CFX_WideString wsInsert;
 CFX_WideString wsDelete;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbSelChanged, FWL_EVTHASH_CMB_SelChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbSelChanged, CFWL_EventType::SelectChanged)
 CFX_Int32Array iArraySels;
 FX_BOOL bLButtonUp;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbHoverChanged, FWL_EVTHASH_CMB_HoverChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbHoverChanged, CFWL_EventType::HoverChanged)
 int32_t m_iCurHover;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbDrawItem, FWL_EVTHASH_CMB_DrawItem)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtCmbDrawItem, CFWL_EventType::DrawItem)
 CFX_Graphics* m_pGraphics;
 CFX_Matrix m_matrix;
 int32_t m_index;
diff --git a/xfa/fwl/basewidget/ifwl_datetimepicker.h b/xfa/fwl/basewidget/ifwl_datetimepicker.h
index 07bc871..3d1188e 100644
--- a/xfa/fwl/basewidget/ifwl_datetimepicker.h
+++ b/xfa/fwl/basewidget/ifwl_datetimepicker.h
@@ -30,28 +30,22 @@
 #define FWL_STYLEEXT_DTP_EditHAlignMask (3L << 4)
 #define FWL_STYLEEXT_DTP_EditVAlignMask (3L << 6)
 #define FWL_STYLEEXT_DTP_EditHAlignModeMask (3L << 8)
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_DTP_DropDown 264728733
-#define FWL_EVTHASH_DTP_CloseUp 4280973803
-#define FWL_EVTHASH_DTP_EditChanged 4009610944
-#define FWL_EVTHASH_DTP_HoverChanged 686674750
-#define FWL_EVTHASH_DTP_SelectChanged 1589616858
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpDropDown, FWL_EVTHASH_DTP_DropDown)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpDropDown, CFWL_EventType::DropDown)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpCloseUp, FWL_EVTHASH_DTP_CloseUp)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpCloseUp, CFWL_EventType::CloseUp)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpEditChanged, FWL_EVTHASH_DTP_EditChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpEditChanged, CFWL_EventType::EditChanged)
 CFX_WideString m_wsText;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpHoverChanged, FWL_EVTHASH_DTP_HoverChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpHoverChanged, CFWL_EventType::HoverChanged)
 int32_t hoverday;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpSelectChanged, FWL_EVTHASH_DTP_SelectChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_DtpSelectChanged, CFWL_EventType::SelectChanged)
 int32_t iYear;
 int32_t iMonth;
 int32_t iDay;
diff --git a/xfa/fwl/basewidget/ifwl_edit.h b/xfa/fwl/basewidget/ifwl_edit.h
index caa2b53..eb8c77b 100644
--- a/xfa/fwl/basewidget/ifwl_edit.h
+++ b/xfa/fwl/basewidget/ifwl_edit.h
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "xfa/fwl/core/cfwl_event.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/lightwidget/cfwl_widget.h"
 
@@ -49,13 +50,6 @@
 #define FWL_STYLEEXT_EDT_LastLineHeight (1L << 27)
 #define FWL_PARTDATA_EDT_Background 0
 #define FWL_PARTDATA_EDT_StaticBackground 1
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_EDT_TextChanged 1064022132
-#define FWL_EVTHASH_EDT_PreSelfAdaption 1001979178
-#define FWL_EVTHASH_EDT_Validate 3373308608
-#define FWL_EVTHASH_EDT_CheckWord 2897181520
-#define FWL_EVTHASH_EDT_GetSuggestWords 315782791
-#define FWL_EVTHASH_EDT_TextFull 2158580174
 
 typedef struct FWL_HEDTFIND_ { void* pData; } * FWL_HEDTFIND;
 
@@ -65,34 +59,35 @@
   FWL_EDT_TEXTCHANGED_Replace,
 };
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtTextChanged, FWL_EVTHASH_EDT_TextChanged)
+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
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtTextFull, FWL_EVTHASH_EDT_TextFull)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtTextFull, CFWL_EventType::TextFull)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtPreSelfAdaption, FWL_EVTHASH_EDT_PreSelfAdaption)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtPreSelfAdaption, CFWL_EventType::PreSelfAdaption)
 FX_BOOL bHSelfAdaption;
 FX_BOOL bVSelfAdaption;
 CFX_RectF rtAfterChange;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtValidate, FWL_EVTHASH_EDT_Validate)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtValidate, CFWL_EventType::Validate)
 IFWL_Widget* pDstWidget;
 CFX_WideString wsInsert;
 FX_BOOL bValidate;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtCheckWord, FWL_EVTHASH_EDT_CheckWord)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtCheckWord, CFWL_EventType::CheckWord)
 CFX_ByteString bsWord;
 FX_BOOL bCheckWord;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtGetSuggestWords, FWL_EVTHASH_EDT_GetSuggestWords)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtEdtGetSuggestWords,
+                    CFWL_EventType::GetSuggestedWords)
 FX_BOOL bSuggestWords;
 CFX_ByteString bsWord;
 std::vector<CFX_ByteString> bsArraySuggestWords;
diff --git a/xfa/fwl/basewidget/ifwl_listbox.h b/xfa/fwl/basewidget/ifwl_listbox.h
index af4335a..87d11a3 100644
--- a/xfa/fwl/basewidget/ifwl_listbox.h
+++ b/xfa/fwl/basewidget/ifwl_listbox.h
@@ -30,9 +30,6 @@
 #define FWL_ITEMSTATE_LTB_Selected (1L << 0)
 #define FWL_ITEMSTATE_LTB_Focused (1L << 1)
 #define FWL_ITEMSTATE_LTB_Checked (1L << 2)
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_LTB_SelChanged 1701781688
-#define FWL_EVTHASH_LTB_DrawItem 1050853991
 
 typedef struct FWL_HLISTITEM_ { void* pData; } * FWL_HLISTITEM;
 
@@ -44,11 +41,11 @@
   int32_t iIndex;
 };
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbSelChanged, FWL_EVTHASH_LTB_SelChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbSelChanged, CFWL_EventType::SelectChanged)
 CFX_Int32Array iarraySels;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbDrawItem, FWL_EVTHASH_LTB_DrawItem)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtLtbDrawItem, CFWL_EventType::DrawItem)
 CFX_Graphics* m_pGraphics;
 CFX_Matrix m_matrix;
 int32_t m_index;
diff --git a/xfa/fwl/basewidget/ifwl_monthcalendar.h b/xfa/fwl/basewidget/ifwl_monthcalendar.h
index ad3ce1d..38e06f2 100644
--- a/xfa/fwl/basewidget/ifwl_monthcalendar.h
+++ b/xfa/fwl/basewidget/ifwl_monthcalendar.h
@@ -22,16 +22,13 @@
 #define FWL_ITEMSTATE_MCD_Flag (1L << 0)
 #define FWL_ITEMSTATE_MCD_Selected (1L << 1)
 #define FWL_ITEMSTATE_MCD_Focused (1L << 2)
-#define FWL_NOTEHASH_MCD_DATASELECTED 1085596932
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_MCD_DateChanged 54212227
 
-BEGIN_FWL_EVENT_DEF(CFWL_Event_McdDateSelected, FWL_NOTEHASH_MCD_DATASELECTED)
+BEGIN_FWL_EVENT_DEF(CFWL_Event_McdDateSelected, CFWL_EventType::DataSelected)
 int32_t m_iStartDay;
 int32_t m_iEndDay;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EventMcdDateChanged, FWL_EVTHASH_MCD_DateChanged)
+BEGIN_FWL_EVENT_DEF(CFWL_EventMcdDateChanged, CFWL_EventType::DateChanged)
 int32_t m_iOldYear;
 int32_t m_iOldMonth;
 int32_t m_iStartDay;
diff --git a/xfa/fwl/basewidget/ifwl_spinbutton.h b/xfa/fwl/basewidget/ifwl_spinbutton.h
index 9a8ff59..b98e225 100644
--- a/xfa/fwl/basewidget/ifwl_spinbutton.h
+++ b/xfa/fwl/basewidget/ifwl_spinbutton.h
@@ -14,10 +14,8 @@
 #define FWL_STYLEEXE_SPB_Vert (1L << 0)
 #define FWL_WGTHITTEST_SPB_UpButton (FWL_WGTHITTEST_MAX + 1)
 #define FWL_WGTHITTEST_SPB_DownButton (FWL_WGTHITTEST_MAX + 2)
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_SPB_Click 2927651187
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSpbClick, FWL_EVTHASH_SPB_Click)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtSpbClick, CFWL_EventType::Click)
 FX_BOOL m_bUp;
 END_FWL_EVENT_DEF
 
diff --git a/xfa/fwl/core/cfwl_event.h b/xfa/fwl/core/cfwl_event.h
index b2f8880..d53fcb3 100644
--- a/xfa/fwl/core/cfwl_event.h
+++ b/xfa/fwl/core/cfwl_event.h
@@ -10,23 +10,42 @@
 #include "core/fxcrt/include/fx_coordinates.h"
 #include "core/fxcrt/include/fx_string.h"
 #include "core/fxcrt/include/fx_system.h"
-#include "xfa/fwl/core/cfwl_note.h"
 #include "xfa/fwl/core/fwl_error.h"
 
-// TODO(dsinclair): Event hash is hash of string, cleanup. pdfium:474
-#define FWL_EVTHASH_Mouse 1765258002
-#define FWL_EVTHASH_MouseWheel 3907114407
-#define FWL_EVTHASH_Key 2408354450
-#define FWL_EVTHASH_SetFocus 3909721269
-#define FWL_EVTHASH_KillFocus 1779363253
-#define FWL_EVTHASH_Draw 2430713303
-#define FWL_EVTHASH_Click 4026328783
-#define FWL_EVTHASH_Scroll 2965158968
-#define FWL_EVTHASH_Close 4036693599
-#define FWL_EVTHASH_ContextMenu 2717307715
-#define FWL_EVTHASH_MenuCommand 497763741
-#define FWL_EVTHASH_SizeChanged 3083958510
-#define FWL_EVTHASH_Idle 839546759
+enum class CFWL_EventType {
+  None = 0,
+
+  CheckStateChanged,
+  CheckWord,
+  Click,
+  Close,
+  CloseUp,
+  ContextMenu,
+  DataSelected,
+  DateChanged,
+  Draw,
+  DrawItem,
+  DropDown,
+  EditChanged,
+  GetSuggestedWords,
+  HoverChanged,
+  Idle,
+  Key,
+  KillFocus,
+  MenuCommand,
+  Mouse,
+  MouseWheel,
+  PostDropDown,
+  PreDropDown,
+  PreSelfAdaption,
+  Scroll,
+  SelectChanged,
+  SetFocus,
+  SizeChanged,
+  TextChanged,
+  TextFull,
+  Validate
+};
 
 typedef enum {
   FWL_EVENT_MOUSE_MASK = 1 << 0,
@@ -44,13 +63,33 @@
 class CFX_Graphics;
 class IFWL_Widget;
 
-class CFWL_Event : public CFWL_Note {
+class CFWL_Event {
  public:
-  CFWL_Event() : CFWL_Note(TRUE) {}
+  CFWL_Event()
+      : m_pSrcTarget(nullptr), m_pDstTarget(nullptr), m_dwRefCount(1) {}
   virtual ~CFWL_Event() {}
+
+  virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {
+    return FWL_ERR_Succeeded;
+  }
+  virtual CFWL_EventType GetClassID() const { return CFWL_EventType::None; }
+
+  uint32_t Release() {
+    m_dwRefCount--;
+    uint32_t dwRefCount = m_dwRefCount;
+    if (!m_dwRefCount)
+      delete this;
+    return dwRefCount;
+  }
+
+  IFWL_Widget* m_pSrcTarget;
+  IFWL_Widget* m_pDstTarget;
+
+ private:
+  uint32_t m_dwRefCount;
 };
 
-#define BEGIN_FWL_EVENT_DEF(classname, eventhashcode)             \
+#define BEGIN_FWL_EVENT_DEF(classname, eventType)                 \
   class classname : public CFWL_Event {                           \
    public:                                                        \
     classname() : CFWL_Event() {}                                 \
@@ -58,20 +97,20 @@
       wsClass = L## #classname;                                   \
       return FWL_ERR_Succeeded;                                   \
     }                                                             \
-    virtual uint32_t GetClassID() const { return eventhashcode; }
+    virtual CFWL_EventType GetClassID() const { return eventType; }
 
 #define END_FWL_EVENT_DEF \
   }                       \
   ;  // NOLINT
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMouse, FWL_EVTHASH_Mouse)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtMouse, CFWL_EventType::Mouse)
 FX_FLOAT m_fx;
 FX_FLOAT m_fy;
 uint32_t m_dwFlags;
 uint32_t m_dwCmd;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMouseWheel, FWL_EVTHASH_MouseWheel)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtMouseWheel, CFWL_EventType::MouseWheel)
 FX_FLOAT m_fx;
 FX_FLOAT m_fy;
 FX_FLOAT m_fDeltaX;
@@ -79,55 +118,55 @@
 uint32_t m_dwFlags;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtKey, FWL_EVTHASH_Key)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtKey, CFWL_EventType::Key)
 uint32_t m_dwKeyCode;
 uint32_t m_dwFlags;
 uint32_t m_dwCmd;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSetFocus, FWL_EVTHASH_SetFocus)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtSetFocus, CFWL_EventType::SetFocus)
 IFWL_Widget* m_pSetFocus;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtKillFocus, FWL_EVTHASH_KillFocus)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtKillFocus, CFWL_EventType::KillFocus)
 IFWL_Widget* m_pKillFocus;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtDraw, FWL_EVTHASH_Draw)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtDraw, CFWL_EventType::Draw)
 CFX_Graphics* m_pGraphics;
 IFWL_Widget* m_pWidget;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtClick, FWL_EVTHASH_Click)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtClick, CFWL_EventType::Click)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtScroll, FWL_EVTHASH_Scroll)
+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
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtClose, FWL_EVTHASH_Close)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtClose, CFWL_EventType::Close)
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtContextMenu, FWL_EVTHASH_ContextMenu)
+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
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtMenuCommand, FWL_EVTHASH_MenuCommand)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtMenuCommand, CFWL_EventType::MenuCommand)
 int32_t m_iCommand;
 void* m_pData;
 END_FWL_EVENT_DEF
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtSizeChanged, FWL_EVTHASH_SizeChanged)
+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
 
-BEGIN_FWL_EVENT_DEF(CFWL_EvtIdle, FWL_EVTHASH_Idle)
+BEGIN_FWL_EVENT_DEF(CFWL_EvtIdle, CFWL_EventType::Idle)
 END_FWL_EVENT_DEF
 
 #endif  // XFA_FWL_CORE_CFWL_EVENT_H_
diff --git a/xfa/fwl/core/cfwl_message.h b/xfa/fwl/core/cfwl_message.h
index 7bd6af1..e751824 100644
--- a/xfa/fwl/core/cfwl_message.h
+++ b/xfa/fwl/core/cfwl_message.h
@@ -9,24 +9,27 @@
 
 #include "core/fxcrt/include/fx_string.h"
 #include "core/fxcrt/include/fx_system.h"
-#include "xfa/fwl/core/cfwl_note.h"
 #include "xfa/fwl/core/fwl_error.h"
 
-#define FWL_MSGHASH_Activate 2410369469
-#define FWL_MSGHASH_Deactivate 1184214790
-#define FWL_MSGHASH_SetFocus 4174512504
-#define FWL_MSGHASH_KillFocus 1557903832
-#define FWL_MSGHASH_Mouse 706128309
-#define FWL_MSGHASH_MouseWheel 893703466
-#define FWL_MSGHASH_Key 3751372405
-#define FWL_MSGHASH_Cursor 3182626218
-#define FWL_MSGHASH_Size 160077735
-#define FWL_MSGHASH_WindowMove 1032269377
-#define FWL_MSGHASH_DropFiles 2004165236
-#define FWL_MSGHASH_TaskClicked 3128231086
-#define FWL_MSGHASH_Close 2977563906
-#define FWL_MSGHASH_Post 1969633074
-#define FWL_MSGHASH_WindowWillMove 2229175763
+enum class CFWL_MessageType {
+  None = 0,
+
+  Activate,
+  Close,
+  Cursor,
+  Deactivate,
+  DropFiles,
+  Key,
+  KillFocus,
+  Mouse,
+  MouseWheel,
+  Post,
+  SetFocus,
+  Size,
+  TaskClicked,
+  WindowMove,
+  WindowWillMove
+};
 
 #define FWL_MSG_Activate L"FWL_MESSAGE_Activate"
 #define FWL_MSG_Deactivate L"FWL_MESSAGE_Deactivate"
@@ -63,41 +66,71 @@
 
 class IFWL_Widget;
 
-class CFWL_Message : public CFWL_Note {
+class CFWL_Message {
  public:
-  CFWL_Message() : CFWL_Note(FALSE) {}
+  CFWL_Message()
+      : m_pSrcTarget(nullptr),
+        m_pDstTarget(nullptr),
+        m_dwExtend(0),
+        m_dwRefCount(1) {}
   virtual ~CFWL_Message() {}
+
+  virtual CFWL_Message* Clone() { return nullptr; }
+  virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {
+    return FWL_ERR_Succeeded;
+  }
+  virtual CFWL_MessageType GetClassID() const { return CFWL_MessageType::None; }
+
+  uint32_t Release() {
+    m_dwRefCount--;
+    uint32_t dwRefCount = m_dwRefCount;
+    if (!m_dwRefCount)
+      delete this;
+    return dwRefCount;
+  }
+
+  CFWL_Message* Retain() {
+    m_dwRefCount++;
+    return this;
+  }
+
+  IFWL_Widget* m_pSrcTarget;
+  IFWL_Widget* m_pDstTarget;
+  uint32_t m_dwExtend;
+
+ private:
+  uint32_t m_dwRefCount;
 };
 
-#define BEGIN_FWL_MESSAGE_DEF(classname, msghashcode)             \
-  class classname : public CFWL_Message {                         \
-   public:                                                        \
-    classname() : CFWL_Message() {}                               \
-    virtual CFWL_Note* Clone() { return new classname(*this); }   \
-    virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const { \
-      wsClass = L## #classname;                                   \
-      return FWL_ERR_Succeeded;                                   \
-    }                                                             \
-    virtual uint32_t GetClassID() const { return msghashcode; }
+#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_ERR GetClassName(CFX_WideString& wsClass) const override {  \
+      wsClass = L## #classname;                                     \
+      return FWL_ERR_Succeeded;                                     \
+    }                                                               \
+    CFWL_MessageType GetClassID() const override { return msgType; }
 
 #define END_FWL_MESSAGE_DEF \
   }                         \
   ;  // NOLINT
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgActivate, FWL_MSGHASH_Activate)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgActivate, CFWL_MessageType::Activate)
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDeactivate, FWL_MSGHASH_Deactivate)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgDeactivate, CFWL_MessageType::Deactivate)
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouse, FWL_MSGHASH_Mouse)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouse, CFWL_MessageType::Mouse)
 FX_FLOAT m_fx;
 FX_FLOAT m_fy;
 uint32_t m_dwFlags;
 uint32_t m_dwCmd;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, FWL_MSGHASH_MouseWheel)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgMouseWheel, CFWL_MessageType::MouseWheel)
 FX_FLOAT m_fx;
 FX_FLOAT m_fy;
 FX_FLOAT m_fDeltaX;
@@ -105,34 +138,34 @@
 uint32_t m_dwFlags;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSetFocus, FWL_MSGHASH_SetFocus)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSetFocus, CFWL_MessageType::SetFocus)
 IFWL_Widget* m_pKillFocus;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKillFocus, FWL_MSGHASH_KillFocus)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKillFocus, CFWL_MessageType::KillFocus)
 IFWL_Widget* m_pSetFocus;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKey, FWL_MSGHASH_Key)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgKey, CFWL_MessageType::Key)
 uint32_t m_dwKeyCode;
 uint32_t m_dwFlags;
 uint32_t m_dwCmd;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgCursor, FWL_MSGHASH_Cursor)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgCursor, CFWL_MessageType::Cursor)
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgSize, FWL_MSGHASH_Size)
+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, FWL_MSGHASH_WindowMove)
+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, FWL_MSGHASH_DropFiles)
+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;
@@ -145,15 +178,15 @@
 CFX_WideStringArray m_files;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgTaskClicked, FWL_MSGHASH_TaskClicked)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgTaskClicked, CFWL_MessageType::TaskClicked)
 FX_FLOAT m_fx;
 FX_FLOAT m_fy;
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgClose, FWL_MSGHASH_Close)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgClose, CFWL_MessageType::Close)
 END_FWL_MESSAGE_DEF
 
-BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, FWL_MSGHASH_WindowWillMove)
+BEGIN_FWL_MESSAGE_DEF(CFWL_MsgWindowWillMove, CFWL_MessageType::WindowWillMove)
 END_FWL_MESSAGE_DEF
 
 #endif  // XFA_FWL_CORE_CFWL_MESSAGE_H_
diff --git a/xfa/fwl/core/cfwl_note.h b/xfa/fwl/core/cfwl_note.h
deleted file mode 100644
index d173dc6..0000000
--- a/xfa/fwl/core/cfwl_note.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FWL_CORE_CFWL_NOTE_H_
-#define XFA_FWL_CORE_CFWL_NOTE_H_
-
-#include "core/fxcrt/include/fx_string.h"
-#include "core/fxcrt/include/fx_system.h"
-#include "xfa/fwl/core/fwl_error.h"
-
-class IFWL_Widget;
-
-// Separate hierarchy not related to IFWL_* hierarchy. These should not
-// get cast to IFWL_* types.
-class CFWL_Note {
- public:
-  virtual uint32_t Release() {
-    m_dwRefCount--;
-    uint32_t dwRefCount = m_dwRefCount;
-    if (!m_dwRefCount)
-      delete this;
-    return dwRefCount;
-  }
-
-  virtual CFWL_Note* Retain() {
-    m_dwRefCount++;
-    return this;
-  }
-
-  virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {
-    wsClass = L"CFWL_Note";
-    return FWL_ERR_Succeeded;
-  }
-
-  virtual uint32_t GetClassID() const { return 0; }
-
-  virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const {
-    return TRUE;
-  }
-
-  virtual CFWL_Note* Clone() { return NULL; }
-  FX_BOOL IsEvent() const { return m_bIsEvent; }
-
-  IFWL_Widget* m_pSrcTarget;
-  IFWL_Widget* m_pDstTarget;
-  uint32_t m_dwExtend;
-
- protected:
-  CFWL_Note(FX_BOOL bIsEvent)
-      : m_pSrcTarget(NULL),
-        m_pDstTarget(NULL),
-        m_dwExtend(0),
-        m_dwRefCount(1),
-        m_bIsEvent(bIsEvent) {}
-
-  virtual ~CFWL_Note() {}
-  virtual FX_BOOL Initialize() { return TRUE; }
-  virtual int32_t Finalize() { return 0; }
-
-  uint32_t m_dwRefCount;
-  FX_BOOL m_bIsEvent;
-};
-
-#endif  // XFA_FWL_CORE_CFWL_NOTE_H_
diff --git a/xfa/fwl/core/fwl_formimp.cpp b/xfa/fwl/core/fwl_formimp.cpp
index 338c55f..ad3c173 100644
--- a/xfa/fwl/core/fwl_formimp.cpp
+++ b/xfa/fwl/core/fwl_formimp.cpp
@@ -856,20 +856,25 @@
     }
   }
 }
+
 CFWL_FormImpDelegate::CFWL_FormImpDelegate(CFWL_FormImp* pOwner)
     : m_pOwner(pOwner) {}
+
 int32_t CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
-#ifdef FWL_UseMacSystemBorder
   if (!pMessage)
     return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
+
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
+
+#ifdef FWL_UseMacSystemBorder
+
   switch (dwMsgCode) {
-    case FWL_MSGHASH_Activate: {
+    case CFWL_MessageType::Activate: {
       m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated;
       m_pOwner->Repaint(&m_pOwner->m_rtRelative);
       break;
     }
-    case FWL_MSGHASH_Deactivate: {
+    case CFWL_MessageType::Deactivate: {
       m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated;
       m_pOwner->Repaint(&m_pOwner->m_rtRelative);
       break;
@@ -877,48 +882,44 @@
   }
   return FWL_ERR_Succeeded;
 #else
-  if (!pMessage)
-    return 0;
-  uint32_t dwMsgCode = pMessage->GetClassID();
   int32_t iRet = 1;
   switch (dwMsgCode) {
-    case FWL_MSGHASH_Activate: {
+    case CFWL_MessageType::Activate: {
       m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated;
       IFWL_Thread* pThread = m_pOwner->GetOwnerThread();
       CFWL_NoteDriver* pDriver =
           static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver());
       CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus();
       IFWL_Widget* pSubFocus =
-          pSubFocusImp ? pSubFocusImp->GetInterface() : NULL;
-      if (pSubFocus && pSubFocus != pDriver->GetFocus()) {
+          pSubFocusImp ? pSubFocusImp->GetInterface() : nullptr;
+      if (pSubFocus && pSubFocus != pDriver->GetFocus())
         pDriver->SetFocus(pSubFocus);
-      }
+
       m_pOwner->Repaint(&m_pOwner->m_rtRelative);
       break;
     }
-    case FWL_MSGHASH_Deactivate: {
+    case CFWL_MessageType::Deactivate: {
       m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated;
       IFWL_Thread* pThread = m_pOwner->GetOwnerThread();
       CFWL_NoteDriver* pDriver =
           static_cast<CFWL_NoteDriver*>(pThread->GetNoteDriver());
       CFWL_WidgetImp* pSubFocusImp = m_pOwner->GetSubFocus();
       IFWL_Widget* pSubFocus =
-          pSubFocusImp ? pSubFocusImp->GetInterface() : NULL;
+          pSubFocusImp ? pSubFocusImp->GetInterface() : nullptr;
       if (pSubFocus) {
         if (pSubFocus == pDriver->GetFocus()) {
-          pDriver->SetFocus(NULL);
+          pDriver->SetFocus(nullptr);
         } else if (pSubFocus->GetStates() & FWL_WGTSTATE_Focused) {
           CFWL_MsgKillFocus ms;
-          IFWL_WidgetDelegate* pDelegate = pSubFocus->SetDelegate(NULL);
-          if (pDelegate) {
+          IFWL_WidgetDelegate* pDelegate = pSubFocus->SetDelegate(nullptr);
+          if (pDelegate)
             pDelegate->OnProcessMessage(&ms);
-          }
         }
       }
       m_pOwner->Repaint(&m_pOwner->m_rtRelative);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
       switch (pMsg->m_dwCmd) {
         case FWL_MSGMOUSECMD_LButtonDown: {
@@ -948,15 +949,16 @@
       }
       break;
     }
-    case FWL_MSGHASH_Size: {
+    case CFWL_MessageType::Size: {
       CFWL_WidgetMgr* pWidgetMgr =
           static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr());
       if (!pWidgetMgr)
         return 0;
+
       pWidgetMgr->AddRedrawCounts(m_pOwner->m_pInterface);
-      if (!m_pOwner->m_bSetMaximize) {
+      if (!m_pOwner->m_bSetMaximize)
         break;
-      }
+
       m_pOwner->m_bSetMaximize = FALSE;
       CFWL_MsgSize* pMsg = static_cast<CFWL_MsgSize*>(pMessage);
       CFX_RectF rt;
@@ -968,27 +970,29 @@
       m_pOwner->Update();
       break;
     }
-    case FWL_MSGHASH_WindowMove: {
+    case CFWL_MessageType::WindowMove: {
       OnWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage));
       break;
     }
-    case FWL_MSGHASH_Close: {
+    case CFWL_MessageType::Close: {
       OnClose(static_cast<CFWL_MsgClose*>(pMessage));
       break;
     }
-    default: { iRet = 0; }
+    default: {
+      iRet = 0;
+      break;
+    }
   }
   return iRet;
-#endif
+#endif  // FWL_UseMacSystemBorder
 }
+
 FWL_ERR CFWL_FormImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   if (!pEvent)
     return FWL_ERR_Indefinite;
-  if (pEvent->GetClassID() == FWL_EVTHASH_Close &&
-      pEvent->m_pSrcTarget == m_pOwner->m_pInterface) {
-  }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_FormImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                            const CFX_Matrix* pMatrix) {
   return m_pOwner->DrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fwl/core/fwl_noteimp.cpp b/xfa/fwl/core/fwl_noteimp.cpp
index a01eea9..b2e7440 100644
--- a/xfa/fwl/core/fwl_noteimp.cpp
+++ b/xfa/fwl/core/fwl_noteimp.cpp
@@ -34,7 +34,7 @@
     IFWL_NoteDriver* pDriver = pApp->GetNoteDriver();
     if (!pDriver)
       return FWL_ERR_Indefinite;
-    pDriver->SendNote(&ev);
+    pDriver->SendEvent(&ev);
 #if (_FX_OS_ == _FX_WIN32_DESKTOP_)
   }
 #endif
@@ -69,7 +69,7 @@
   IFWL_NoteDriver* pDriver = pThread->GetNoteDriver();
   if (!pDriver)
     return;
-  pDriver->SendNote(&ev);
+  pDriver->SendEvent(&ev);
 }
 CFWL_NoteDriver::CFWL_NoteDriver()
     : m_sendEventCalled(0),
@@ -83,47 +83,37 @@
   delete m_pNoteLoop;
   ClearInvalidEventTargets(TRUE);
 }
-FX_BOOL CFWL_NoteDriver::SendNote(CFWL_Note* pNote) {
-  if (pNote->IsEvent()) {
-    int32_t iCount = m_eventTargets.GetCount();
-    if (iCount < 1) {
-      return TRUE;
-    }
-    if (FWL_EVTHASH_Mouse == static_cast<CFWL_Event*>(pNote)->GetClassID()) {
-      CFWL_EvtMouse* pMouse = static_cast<CFWL_EvtMouse*>(pNote);
-      if (FWL_MSGMOUSECMD_MouseHover == pMouse->m_dwCmd) {
-        if (m_pNoteLoop->GetForm() &&
-            CFWL_ToolTipContainer::getInstance()->ProcessEnter(
-                pMouse, m_pNoteLoop->GetForm()->GetInterface())) {
-        }
-      } else if (FWL_MSGMOUSECMD_MouseLeave == pMouse->m_dwCmd) {
-        if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) {
-        }
-      } else if ((FWL_MSGMOUSECMD_LButtonDown <= pMouse->m_dwCmd) &&
-                 (FWL_MSGMOUSECMD_MButtonDblClk >= pMouse->m_dwCmd)) {
-        if (CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse)) {
-        }
+
+FX_BOOL CFWL_NoteDriver::SendEvent(CFWL_Event* pNote) {
+  int32_t iCount = m_eventTargets.GetCount();
+  if (iCount < 1)
+    return TRUE;
+  if (CFWL_EventType::Mouse == pNote->GetClassID()) {
+    CFWL_EvtMouse* pMouse = static_cast<CFWL_EvtMouse*>(pNote);
+    if (FWL_MSGMOUSECMD_MouseHover == pMouse->m_dwCmd) {
+      if (m_pNoteLoop->GetForm() &&
+          CFWL_ToolTipContainer::getInstance()->ProcessEnter(
+              pMouse, m_pNoteLoop->GetForm()->GetInterface())) {
       }
-    }
-    m_sendEventCalled++;
-    FX_POSITION pos = m_eventTargets.GetStartPosition();
-    while (pos) {
-      void* key = NULL;
-      CFWL_EventTarget* pEventTarget;
-      m_eventTargets.GetNextAssoc(pos, key, (void*&)pEventTarget);
-      if (pEventTarget && !pEventTarget->IsInvalid()) {
-        pEventTarget->ProcessEvent(static_cast<CFWL_Event*>(pNote));
-      }
-    }
-    m_sendEventCalled--;
-  } else {
-    if (!pNote->m_pDstTarget)
-      return FALSE;
-    IFWL_WidgetDelegate* pDelegate = pNote->m_pDstTarget->SetDelegate(NULL);
-    if (pDelegate) {
-      pDelegate->OnProcessMessage(static_cast<CFWL_Message*>(pNote));
+    } else if (FWL_MSGMOUSECMD_MouseLeave == pMouse->m_dwCmd) {
+      CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse);
+    } else if ((FWL_MSGMOUSECMD_LButtonDown <= pMouse->m_dwCmd) &&
+               (FWL_MSGMOUSECMD_MButtonDblClk >= pMouse->m_dwCmd)) {
+      CFWL_ToolTipContainer::getInstance()->ProcessLeave(pMouse);
     }
   }
+  m_sendEventCalled++;
+  FX_POSITION pos = m_eventTargets.GetStartPosition();
+  while (pos) {
+    void* key = nullptr;
+    void* value = nullptr;
+    m_eventTargets.GetNextAssoc(pos, key, value);
+
+    CFWL_EventTarget* pEventTarget = static_cast<CFWL_EventTarget*>(value);
+    if (pEventTarget && !pEventTarget->IsInvalid())
+      pEventTarget->ProcessEvent(pNote);
+  }
+  m_sendEventCalled--;
   return TRUE;
 }
 
@@ -390,61 +380,61 @@
   if (!pMessageForm)
     return FALSE;
   if (DispatchMessage(pMessage, pMessageForm)) {
-    if (pMessage->GetClassID() == FWL_MSGHASH_Mouse) {
+    if (pMessage->GetClassID() == CFWL_MessageType::Mouse)
       MouseSecondary(static_cast<CFWL_MsgMouse*>(pMessage));
-    }
     return TRUE;
   }
   return FALSE;
 }
+
 FX_BOOL CFWL_NoteDriver::DispatchMessage(CFWL_Message* pMessage,
                                          IFWL_Widget* pMessageForm) {
   FX_BOOL bRet = FALSE;
   switch (pMessage->GetClassID()) {
-    case FWL_MSGHASH_Activate: {
+    case CFWL_MessageType::Activate: {
       bRet = DoActivate(static_cast<CFWL_MsgActivate*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_Deactivate: {
+    case CFWL_MessageType::Deactivate: {
       bRet = DoDeactivate(static_cast<CFWL_MsgDeactivate*>(pMessage),
                           pMessageForm);
       break;
     }
-    case FWL_MSGHASH_SetFocus: {
+    case CFWL_MessageType::SetFocus: {
       bRet = DoSetFocus(static_cast<CFWL_MsgSetFocus*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_KillFocus: {
+    case CFWL_MessageType::KillFocus: {
       bRet =
           DoKillFocus(static_cast<CFWL_MsgKillFocus*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       bRet = DoKey(static_cast<CFWL_MsgKey*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::Mouse: {
       bRet = DoMouse(static_cast<CFWL_MsgMouse*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_MouseWheel: {
+    case CFWL_MessageType::MouseWheel: {
       bRet = DoWheel(static_cast<CFWL_MsgMouseWheel*>(pMessage), pMessageForm);
       break;
     }
-    case FWL_MSGHASH_Size: {
+    case CFWL_MessageType::Size: {
       bRet = DoSize(static_cast<CFWL_MsgSize*>(pMessage));
       break;
     }
-    case FWL_MSGHASH_Cursor: {
+    case CFWL_MessageType::Cursor: {
       bRet = TRUE;
       break;
     }
-    case FWL_MSGHASH_WindowMove: {
+    case CFWL_MessageType::WindowMove: {
       bRet = DoWindowMove(static_cast<CFWL_MsgWindowMove*>(pMessage),
                           pMessageForm);
       break;
     }
-    case FWL_MSGHASH_DropFiles: {
+    case CFWL_MessageType::DropFiles: {
       bRet =
           DoDragFiles(static_cast<CFWL_MsgDropFiles*>(pMessage), pMessageForm);
       break;
@@ -456,12 +446,12 @@
   }
   if (bRet) {
     IFWL_WidgetDelegate* pDelegate = pMessage->m_pDstTarget->SetDelegate(NULL);
-    if (pDelegate) {
+    if (pDelegate)
       pDelegate->OnProcessMessage(pMessage);
-    }
   }
   return bRet;
 }
+
 FX_BOOL CFWL_NoteDriver::DoActivate(CFWL_MsgActivate* pMsg,
                                     IFWL_Widget* pMessageForm) {
   pMsg->m_pDstTarget = pMessageForm;
@@ -686,26 +676,25 @@
   DispatchMessage(&msHover, NULL);
 }
 FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) {
-  if (pMessage->GetClassID() == FWL_MSGHASH_Post) {
+  if (pMessage->GetClassID() == CFWL_MessageType::Post)
     return TRUE;
-  }
+
   int32_t iCount = m_noteLoopQueue.GetSize();
   for (int32_t i = 0; i < iCount; i++) {
     CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]);
     CFWL_WidgetImp* pForm = pNoteLoop->GetForm();
-    if (pForm && (pForm->GetInterface() == pMessage->m_pDstTarget)) {
+    if (pForm && (pForm->GetInterface() == pMessage->m_pDstTarget))
       return TRUE;
-    }
   }
   iCount = m_forms.GetSize();
   for (int32_t j = 0; j < iCount; j++) {
     CFWL_FormImp* pForm = static_cast<CFWL_FormImp*>(m_forms[j]);
-    if (pForm->GetInterface() == pMessage->m_pDstTarget) {
+    if (pForm->GetInterface() == pMessage->m_pDstTarget)
       return TRUE;
-    }
   }
   return FALSE;
 }
+
 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) {
   int32_t iTrackLoop = m_noteLoopQueue.GetSize();
   if (iTrackLoop <= 0)
@@ -791,6 +780,7 @@
   }
   return 1;
 }
+
 FX_BOOL CFWL_EventTarget::ProcessEvent(CFWL_Event* pEvent) {
   IFWL_WidgetDelegate* pDelegate = m_pListener->SetDelegate(NULL);
   if (!pDelegate)
@@ -805,7 +795,7 @@
     uint32_t dwFilter = 0;
     m_eventSources.GetNextAssoc(pos, (void*&)pSource, dwFilter);
     if (pSource == pEvent->m_pSrcTarget ||
-        pEvent->GetClassID() == FWL_EVTHASH_Idle) {
+        pEvent->GetClassID() == CFWL_EventType::Idle) {
       if (IsFilterEvent(pEvent, dwFilter)) {
         pDelegate->OnProcessEvent(pEvent);
         return TRUE;
@@ -814,42 +804,43 @@
   }
   return FALSE;
 }
+
 FX_BOOL CFWL_EventTarget::IsFilterEvent(CFWL_Event* pEvent, uint32_t dwFilter) {
-  if (dwFilter == FWL_EVENT_ALL_MASK) {
+  if (dwFilter == FWL_EVENT_ALL_MASK)
     return TRUE;
-  }
+
   FX_BOOL bRet = FALSE;
   switch (pEvent->GetClassID()) {
-    case FWL_EVTHASH_Mouse: {
+    case CFWL_EventType::Mouse: {
       bRet = dwFilter & FWL_EVENT_MOUSE_MASK;
       break;
     }
-    case FWL_EVTHASH_MouseWheel: {
+    case CFWL_EventType::MouseWheel: {
       bRet = dwFilter & FWL_EVENT_MOUSEWHEEL_MASK;
       break;
     }
-    case FWL_EVTHASH_Key: {
+    case CFWL_EventType::Key: {
       bRet = dwFilter & FWL_EVENT_KEY_MASK;
       break;
     }
-    case FWL_EVTHASH_SetFocus:
-    case FWL_EVTHASH_KillFocus: {
+    case CFWL_EventType::SetFocus:
+    case CFWL_EventType::KillFocus: {
       bRet = dwFilter & FWL_EVENT_FOCUSCHANGED_MASK;
       break;
     }
-    case FWL_EVTHASH_Draw: {
+    case CFWL_EventType::Draw: {
       bRet = dwFilter & FWL_EVENT_DRAW_MASK;
       break;
     }
-    case FWL_EVTHASH_Close: {
+    case CFWL_EventType::Close: {
       bRet = dwFilter & FWL_EVENT_CLOSE_MASK;
       break;
     }
-    case FWL_EVTHASH_SizeChanged: {
+    case CFWL_EventType::SizeChanged: {
       bRet = dwFilter & FWL_EVENT_SIZECHANGED_MASK;
       break;
     }
-    case FWL_EVTHASH_Idle: {
+    case CFWL_EventType::Idle: {
       bRet = dwFilter & FWL_EVENT_IDLE_MASK;
       break;
     }
diff --git a/xfa/fwl/core/fwl_noteimp.h b/xfa/fwl/core/fwl_noteimp.h
index 0a0c842..334c705 100644
--- a/xfa/fwl/core/fwl_noteimp.h
+++ b/xfa/fwl/core/fwl_noteimp.h
@@ -52,9 +52,9 @@
   ~CFWL_NoteDriver() override;
 
   // IFWL_NoteDriver:
-  FX_BOOL SendNote(CFWL_Note* pNote) override;
+  FX_BOOL SendEvent(CFWL_Event* pNote) override;
   FWL_ERR RegisterEventTarget(IFWL_Widget* pListener,
-                              IFWL_Widget* pEventSource = NULL,
+                              IFWL_Widget* pEventSource = nullptr,
                               uint32_t dwFilter = FWL_EVENT_ALL_MASK) override;
   FWL_ERR UnregisterEventTarget(IFWL_Widget* pListener) override;
   void ClearEventTargets(FX_BOOL bRemoveAll) override;
diff --git a/xfa/fwl/core/fwl_widgetimp.cpp b/xfa/fwl/core/fwl_widgetimp.cpp
index b11530e..f6be8ca 100644
--- a/xfa/fwl/core/fwl_widgetimp.cpp
+++ b/xfa/fwl/core/fwl_widgetimp.cpp
@@ -853,7 +853,7 @@
   IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver();
   if (!pNoteDriver)
     return;
-  pNoteDriver->SendNote(pEvent);
+  pNoteDriver->SendEvent(pEvent);
 }
 void CFWL_WidgetImp::Repaint(const CFX_RectF* pRect) {
   if (pRect) {
@@ -952,15 +952,18 @@
   }
   return FALSE;
 }
+
 CFWL_WidgetImpDelegate::CFWL_WidgetImpDelegate() {}
+
 int32_t CFWL_WidgetImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
   if (!pMessage->m_pDstTarget)
     return 0;
+
   CFWL_WidgetImp* pWidget =
       static_cast<CFWL_WidgetImp*>(pMessage->m_pDstTarget->GetImpl());
-  uint32_t dwMsgCode = pMessage->GetClassID();
+  CFWL_MessageType dwMsgCode = pMessage->GetClassID();
   switch (dwMsgCode) {
-    case FWL_MSGHASH_Mouse: {
+    case CFWL_MessageType::Mouse: {
       CFWL_MsgMouse* pMsgMouse = static_cast<CFWL_MsgMouse*>(pMessage);
       CFWL_EvtMouse evt;
       evt.m_pSrcTarget = pWidget->m_pInterface;
@@ -972,7 +975,7 @@
       pWidget->DispatchEvent(&evt);
       break;
     }
-    case FWL_MSGHASH_MouseWheel: {
+    case CFWL_MessageType::MouseWheel: {
       CFWL_MsgMouseWheel* pMsgMouseWheel =
           static_cast<CFWL_MsgMouseWheel*>(pMessage);
       CFWL_EvtMouseWheel evt;
@@ -986,7 +989,7 @@
       pWidget->DispatchEvent(&evt);
       break;
     }
-    case FWL_MSGHASH_Key: {
+    case CFWL_MessageType::Key: {
       CFWL_MsgKey* pMsgKey = static_cast<CFWL_MsgKey*>(pMessage);
       CFWL_EvtKey evt;
       evt.m_pSrcTarget = pWidget->m_pInterface;
@@ -997,7 +1000,7 @@
       pWidget->DispatchEvent(&evt);
       break;
     }
-    case FWL_MSGHASH_SetFocus: {
+    case CFWL_MessageType::SetFocus: {
       CFWL_MsgSetFocus* pMsgSetFocus = static_cast<CFWL_MsgSetFocus*>(pMessage);
       CFWL_EvtSetFocus evt;
       evt.m_pSrcTarget = pMsgSetFocus->m_pDstTarget;
@@ -1006,7 +1009,7 @@
       pWidget->DispatchEvent(&evt);
       break;
     }
-    case FWL_MSGHASH_KillFocus: {
+    case CFWL_MessageType::KillFocus: {
       CFWL_MsgKillFocus* pMsgKillFocus =
           static_cast<CFWL_MsgKillFocus*>(pMessage);
       CFWL_EvtKillFocus evt;
@@ -1016,13 +1019,16 @@
       pWidget->DispatchEvent(&evt);
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return 1;
 }
+
 FWL_ERR CFWL_WidgetImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CFWL_WidgetImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
                                              const CFX_Matrix* pMatrix) {
   CFWL_EvtDraw evt;
diff --git a/xfa/fwl/core/ifwl_notedriver.h b/xfa/fwl/core/ifwl_notedriver.h
index 783bebc..4bf2655 100644
--- a/xfa/fwl/core/ifwl_notedriver.h
+++ b/xfa/fwl/core/ifwl_notedriver.h
@@ -29,7 +29,8 @@
  public:
   virtual ~IFWL_NoteDriver() {}
 
-  virtual FX_BOOL SendNote(CFWL_Note* pNote) = 0;
+  virtual FX_BOOL SendEvent(CFWL_Event* pNote) = 0;
+
   virtual FWL_ERR RegisterEventTarget(
       IFWL_Widget* pListener,
       IFWL_Widget* pEventSource = NULL,
diff --git a/xfa/fwl/lightwidget/cfwl_widget.cpp b/xfa/fwl/lightwidget/cfwl_widget.cpp
index 071940f..31c54d8 100644
--- a/xfa/fwl/lightwidget/cfwl_widget.cpp
+++ b/xfa/fwl/lightwidget/cfwl_widget.cpp
@@ -298,7 +298,7 @@
   IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver();
   if (!pNoteDriver)
     return;
-  pNoteDriver->SendNote(pEvent);
+  pNoteDriver->SendEvent(pEvent);
 }
 
 #define FWL_WGT_CalcHeight 2048
diff --git a/xfa/fxfa/app/xfa_ffcheckbutton.cpp b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
index 85f445f..4527afe 100644
--- a/xfa/fxfa/app/xfa_ffcheckbutton.cpp
+++ b/xfa/fxfa/app/xfa_ffcheckbutton.cpp
@@ -298,11 +298,11 @@
 int32_t CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) {
   return m_pOldDelegate->OnProcessMessage(pMessage);
 }
+
 FWL_ERR CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) {
   CXFA_FFField::OnProcessEvent(pEvent);
-  uint32_t dwEventID = pEvent->GetClassID();
-  switch (dwEventID) {
-    case FWL_EVTHASH_CKB_CheckStateChanged: {
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::CheckStateChanged: {
       CXFA_EventParam eParam;
       eParam.m_eType = XFA_EVENT_Change;
       m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
@@ -327,10 +327,12 @@
       m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return m_pOldDelegate->OnProcessEvent(pEvent);
 }
+
 FWL_ERR CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics,
                                          const CFX_Matrix* pMatrix) {
   return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fxfa/app/xfa_ffchoicelist.cpp b/xfa/fxfa/app/xfa_ffchoicelist.cpp
index a13c36d..cfd78c2 100644
--- a/xfa/fxfa/app/xfa_ffchoicelist.cpp
+++ b/xfa/fxfa/app/xfa_ffchoicelist.cpp
@@ -185,14 +185,14 @@
 }
 FWL_ERR CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) {
   CXFA_FFField::OnProcessEvent(pEvent);
-  uint32_t dwEventID = pEvent->GetClassID();
-  switch (dwEventID) {
-    case FWL_EVTHASH_LTB_SelChanged: {
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::SelectChanged: {
       CFX_Int32Array arrSels;
       OnSelectChanged(m_pNormalWidget->GetWidget(), arrSels);
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return m_pOldDelegate->OnProcessEvent(pEvent);
 }
@@ -498,33 +498,35 @@
 int32_t CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) {
   return m_pOldDelegate->OnProcessMessage(pMessage);
 }
+
 FWL_ERR CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) {
   CXFA_FFField::OnProcessEvent(pEvent);
-  uint32_t dwEventID = pEvent->GetClassID();
-  switch (dwEventID) {
-    case FWL_EVTHASH_CMB_SelChanged: {
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::SelectChanged: {
       CFWL_EvtCmbSelChanged* postEvent = (CFWL_EvtCmbSelChanged*)pEvent;
       OnSelectChanged(m_pNormalWidget->GetWidget(), postEvent->iArraySels,
                       postEvent->bLButtonUp);
       break;
     }
-    case FWL_EVTHASH_CMB_EditChanged: {
+    case CFWL_EventType::EditChanged: {
       CFX_WideString wsChanged;
       OnTextChanged(m_pNormalWidget->GetWidget(), wsChanged);
       break;
     }
-    case FWL_EVTHASH_CMB_PreDropDown: {
+    case CFWL_EventType::PreDropDown: {
       OnPreOpen(m_pNormalWidget->GetWidget());
       break;
     }
-    case FWL_EVTHASH_CMB_PostDropDown: {
+    case CFWL_EventType::PostDropDown: {
       OnPostOpen(m_pNormalWidget->GetWidget());
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return m_pOldDelegate->OnProcessEvent(pEvent);
 }
+
 FWL_ERR CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics,
                                       const CFX_Matrix* pMatrix) {
   return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
diff --git a/xfa/fxfa/app/xfa_fffield.cpp b/xfa/fxfa/app/xfa_fffield.cpp
index 745f44d..872dc8f 100644
--- a/xfa/fxfa/app/xfa_fffield.cpp
+++ b/xfa/fxfa/app/xfa_fffield.cpp
@@ -794,10 +794,10 @@
 int32_t CXFA_FFField::OnProcessMessage(CFWL_Message* pMessage) {
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CXFA_FFField::OnProcessEvent(CFWL_Event* pEvent) {
-  uint32_t dwEventID = pEvent->GetClassID();
-  switch (dwEventID) {
-    case FWL_EVTHASH_Mouse: {
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::Mouse: {
       CFWL_EvtMouse* event = (CFWL_EvtMouse*)pEvent;
       if (event->m_dwCmd == FWL_MSGMOUSECMD_MouseEnter) {
         CXFA_EventParam eParam;
@@ -822,17 +822,19 @@
       }
       break;
     }
-    case FWL_EVTHASH_Click: {
+    case CFWL_EventType::Click: {
       CXFA_EventParam eParam;
       eParam.m_eType = XFA_EVENT_Click;
       eParam.m_pTarget = m_pDataAcc;
       m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam);
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return FWL_ERR_Succeeded;
 }
+
 FWL_ERR CXFA_FFField::OnDrawWidget(CFX_Graphics* pGraphics,
                                    const CFX_Matrix* pMatrix) {
   return FWL_ERR_Succeeded;
diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp
index 5b543db..baa1d8a 100644
--- a/xfa/fxfa/app/xfa_fftextedit.cpp
+++ b/xfa/fxfa/app/xfa_fftextedit.cpp
@@ -403,36 +403,38 @@
 int32_t CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) {
   return m_pOldDelegate->OnProcessMessage(pMessage);
 }
+
 FWL_ERR CXFA_FFTextEdit::OnProcessEvent(CFWL_Event* pEvent) {
   CXFA_FFField::OnProcessEvent(pEvent);
-  uint32_t dwEventID = pEvent->GetClassID();
-  switch (dwEventID) {
-    case FWL_EVTHASH_EDT_TextChanged: {
+  switch (pEvent->GetClassID()) {
+    case CFWL_EventType::TextChanged: {
       CFWL_EvtEdtTextChanged* event = (CFWL_EvtEdtTextChanged*)pEvent;
       CFX_WideString wsChange;
       OnTextChanged(m_pNormalWidget->GetWidget(), wsChange, event->wsPrevText);
       break;
     }
-    case FWL_EVTHASH_EDT_TextFull: {
+    case CFWL_EventType::TextFull: {
       OnTextFull(m_pNormalWidget->GetWidget());
       break;
     }
-    case FWL_EVTHASH_EDT_CheckWord: {
+    case CFWL_EventType::CheckWord: {
       CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
       CFWL_EvtEdtCheckWord* event = (CFWL_EvtEdtCheckWord*)pEvent;
       event->bCheckWord = CheckWord(event->bsWord.AsStringC());
       break;
     }
-    case FWL_EVTHASH_EDT_GetSuggestWords: {
+    case CFWL_EventType::GetSuggestedWords: {
       CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent;
       event->bSuggestWords = GetSuggestWords(event->bsWord.AsStringC(),
                                              event->bsArraySuggestWords);
       break;
     }
-    default: {}
+    default:
+      break;
   }
   return m_pOldDelegate->OnProcessEvent(pEvent);
 }
+
 FWL_ERR CXFA_FFTextEdit::OnDrawWidget(CFX_Graphics* pGraphics,
                                       const CFX_Matrix* pMatrix) {
   return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
@@ -483,17 +485,17 @@
   }
   m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
 }
+
 FWL_ERR CXFA_FFNumericEdit::OnProcessEvent(CFWL_Event* pEvent) {
-  uint32_t dwEventID = pEvent->GetClassID();
-  if (dwEventID == FWL_EVTHASH_EDT_Validate) {
+  if (pEvent->GetClassID() == CFWL_EventType::Validate) {
     CFWL_EvtEdtValidate* event = (CFWL_EvtEdtValidate*)pEvent;
     CFX_WideString wsChange = event->wsInsert;
     event->bValidate = OnValidate(m_pNormalWidget->GetWidget(), wsChange);
     return event->bValidate;
-  } else {
-    return CXFA_FFTextEdit::OnProcessEvent(pEvent);
   }
+  return CXFA_FFTextEdit::OnProcessEvent(pEvent);
 }
+
 FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget,
                                        CFX_WideString& wsText) {
   CFX_WideString wsPattern;
@@ -785,14 +787,13 @@
   m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
   m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
 }
+
 FWL_ERR CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
-  uint32_t dwEventID = pEvent->GetClassID();
-  if (dwEventID == FWL_EVTHASH_DTP_SelectChanged) {
+  if (pEvent->GetClassID() == CFWL_EventType::SelectChanged) {
     CFWL_Event_DtpSelectChanged* event = (CFWL_Event_DtpSelectChanged*)pEvent;
     OnSelectChanged(m_pNormalWidget->GetWidget(), event->iYear, event->iMonth,
                     event->iDay);
     return TRUE;
-  } else {
-    return CXFA_FFTextEdit::OnProcessEvent(pEvent);
   }
+  return CXFA_FFTextEdit::OnProcessEvent(pEvent);
 }