diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.cpp b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
index fcd0979..e8fe0dc 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.cpp
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
@@ -131,7 +131,7 @@
   CFX_PointF ptCenter = GetCenterPoint();
   int32_t nTransparency = GetTransparency();
 
-  if (m_eScrollBarType == SBT_HSCROLL) {
+  if (m_eScrollBarType == PWL_SCROLLBAR_TYPE::HSCROLL) {
     CPWL_Wnd::DrawThisAppearance(pDevice, mtUser2Device);
 
     CFX_PointF pt1;
@@ -309,7 +309,7 @@
   float fBWidth = 0;
 
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       if (rcClient.right - rcClient.left >
           kButtonWidth * 2 + kPosButtonMinWidth + 2) {
         rcMinButton = CFX_FloatRect(rcClient.left, rcClient.bottom,
@@ -331,7 +331,7 @@
         }
       }
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       if (IsFloatBigger(rcClient.top - rcClient.bottom,
                         kButtonWidth * 2 + kPosButtonMinWidth + 2)) {
         rcMinButton = CFX_FloatRect(rcClient.left, rcClient.top - kButtonWidth,
@@ -411,14 +411,14 @@
     CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect();
 
     switch (m_sbType) {
-      case SBT_HSCROLL:
+      case PWL_SCROLLBAR_TYPE::HSCROLL:
         rcMinArea = CFX_FloatRect(rcClient.left + kButtonWidth, rcClient.bottom,
                                   rcPosButton.left, rcClient.top);
         rcMaxArea = CFX_FloatRect(rcPosButton.right, rcClient.bottom,
                                   rcClient.right - kButtonWidth, rcClient.top);
 
         break;
-      case SBT_VSCROLL:
+      case PWL_SCROLLBAR_TYPE::VSCROLL:
         rcMinArea = CFX_FloatRect(rcClient.left, rcPosButton.top,
                                   rcClient.right, rcClient.top - kButtonWidth);
         rcMaxArea = CFX_FloatRect(rcClient.left, rcClient.bottom + kButtonWidth,
@@ -476,10 +476,10 @@
 
 void CPWL_ScrollBar::SetScrollPosition(float pos) {
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       pos = pos - m_OriginInfo.fContentMin;
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       pos = m_OriginInfo.fContentMax - pos;
       break;
   }
@@ -609,7 +609,7 @@
     float fLeft, fRight, fTop, fBottom;
 
     switch (m_sbType) {
-      case SBT_HSCROLL:
+      case PWL_SCROLLBAR_TYPE::HSCROLL:
         fLeft = TrueToFace(m_sData.fScrollPos);
         fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
 
@@ -625,7 +625,7 @@
             CFX_FloatRect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top);
 
         break;
-      case SBT_VSCROLL:
+      case PWL_SCROLLBAR_TYPE::VSCROLL:
         fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
         fTop = TrueToFace(m_sData.fScrollPos);
 
@@ -687,11 +687,11 @@
     CFX_FloatRect rcPosButton = m_pPosButton->GetWindowRect();
 
     switch (m_sbType) {
-      case SBT_HSCROLL:
+      case PWL_SCROLLBAR_TYPE::HSCROLL:
         m_nOldPos = point.x;
         m_fOldPosButton = rcPosButton.left;
         break;
-      case SBT_VSCROLL:
+      case PWL_SCROLLBAR_TYPE::VSCROLL:
         m_nOldPos = point.y;
         m_fOldPosButton = rcPosButton.top;
         break;
@@ -713,12 +713,12 @@
   float fNewPos = 0;
 
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       if (fabs(point.x - m_nOldPos) < 1)
         return;
       fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos);
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       if (fabs(point.y - m_nOldPos) < 1)
         return;
       fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos);
@@ -727,7 +727,7 @@
 
   if (m_bMouseDown) {
     switch (m_sbType) {
-      case SBT_HSCROLL:
+      case PWL_SCROLLBAR_TYPE::HSCROLL:
 
         if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
           fNewPos = m_sData.ScrollRange.fMin;
@@ -740,7 +740,7 @@
         m_sData.SetPos(fNewPos);
 
         break;
-      case SBT_VSCROLL:
+      case PWL_SCROLLBAR_TYPE::VSCROLL:
 
         if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
           fNewPos = m_sData.ScrollRange.fMin;
@@ -767,7 +767,7 @@
 
 void CPWL_ScrollBar::NotifyScrollWindow() {
   CPWL_Wnd* pParent = GetParentWindow();
-  if (!pParent || m_sbType != SBT_VSCROLL)
+  if (!pParent || m_sbType != PWL_SCROLLBAR_TYPE::VSCROLL)
     return;
 
   pParent->ScrollWindowVertically(m_OriginInfo.fContentMax -
@@ -790,7 +790,7 @@
   float fMaxHeight = rcMax.Height();
 
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) {
         rcArea = CFX_FloatRect(rcClient.left + fMinWidth + 1, rcClient.bottom,
                                rcClient.right - fMaxWidth - 1, rcClient.top);
@@ -799,7 +799,7 @@
                                rcClient.left + fMinWidth + 1, rcClient.top);
       }
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) {
         rcArea = CFX_FloatRect(rcClient.left, rcClient.bottom + fMinHeight + 1,
                                rcClient.right, rcClient.top - fMaxHeight - 1);
@@ -826,11 +826,11 @@
   float fFace = 0;
 
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       fFace = rcPosArea.left +
               fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth;
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       fFace = rcPosArea.top -
               fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth;
       break;
@@ -849,11 +849,11 @@
   float fTrue = 0;
 
   switch (m_sbType) {
-    case SBT_HSCROLL:
+    case PWL_SCROLLBAR_TYPE::HSCROLL:
       fTrue = (fFace - rcPosArea.left) * fFactWidth /
               (rcPosArea.right - rcPosArea.left);
       break;
-    case SBT_VSCROLL:
+    case PWL_SCROLLBAR_TYPE::VSCROLL:
       fTrue = (rcPosArea.top - fFace) * fFactWidth /
               (rcPosArea.top - rcPosArea.bottom);
       break;
diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.h b/fpdfsdk/pwl/cpwl_scroll_bar.h
index f04c12b..879646f 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.h
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.h
@@ -38,7 +38,7 @@
   float fSmallStep;
 };
 
-enum PWL_SCROLLBAR_TYPE { SBT_HSCROLL, SBT_VSCROLL };
+enum class PWL_SCROLLBAR_TYPE { HSCROLL, VSCROLL };
 
 enum PWL_SBBUTTON_TYPE { PSBT_MIN, PSBT_MAX, PSBT_POS };
 
diff --git a/fpdfsdk/pwl/cpwl_wnd.cpp b/fpdfsdk/pwl/cpwl_wnd.cpp
index 58095a9..8924349 100644
--- a/fpdfsdk/pwl/cpwl_wnd.cpp
+++ b/fpdfsdk/pwl/cpwl_wnd.cpp
@@ -491,8 +491,8 @@
   scp.eCursorType = FXCT_ARROW;
   scp.nTransparency = PWL_SCROLLBAR_TRANSPARENCY;
 
-  auto pBar =
-      std::make_unique<CPWL_ScrollBar>(scp, CloneAttachedData(), SBT_VSCROLL);
+  auto pBar = std::make_unique<CPWL_ScrollBar>(scp, CloneAttachedData(),
+                                               PWL_SCROLLBAR_TYPE::VSCROLL);
   m_pVScrollBar = pBar.get();
   AddChild(std::move(pBar));
   m_pVScrollBar->Realize();
