diff --git a/fxbarcode/BC_Library.h b/fxbarcode/BC_Library.h
index 3bb2a2e..6b0ea7f 100644
--- a/fxbarcode/BC_Library.h
+++ b/fxbarcode/BC_Library.h
@@ -22,20 +22,20 @@
   kUnicode,
 };
 
-enum BC_TYPE : int8_t {
-  BC_UNKNOWN = -1,
-  BC_CODE39 = 0,
-  BC_CODABAR,
-  BC_CODE128,
-  BC_CODE128_B,
-  BC_CODE128_C,
-  BC_EAN8,
-  BC_UPCA,
-  BC_EAN13,
-  BC_QR_CODE,
-  BC_PDF417,
-  BC_DATAMATRIX,
-  BC_LAST = BC_DATAMATRIX
+enum class BC_TYPE : int8_t {
+  kUnknown = -1,
+  kCode39 = 0,
+  kCodabar,
+  kCode128,
+  kCode128B,
+  kCode128C,
+  kEAN8,
+  kUPCA,
+  kEAN13,
+  kQRCode,
+  kPDF417,
+  kDataMatrix,
+  kLast = kDataMatrix
 };
 
 void BC_Library_Init();
diff --git a/fxbarcode/cbc_codabar.cpp b/fxbarcode/cbc_codabar.cpp
index 94ded75..21c14bb 100644
--- a/fxbarcode/cbc_codabar.cpp
+++ b/fxbarcode/cbc_codabar.cpp
@@ -37,7 +37,7 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_CODABAR;
+  BC_TYPE format = BC_TYPE::kCodabar;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   m_renderContents = pWriter->FilterContents(contents);
@@ -57,7 +57,7 @@
 }
 
 BC_TYPE CBC_Codabar::GetType() {
-  return BC_CODABAR;
+  return BC_TYPE::kCodabar;
 }
 
 CBC_OnedCodaBarWriter* CBC_Codabar::GetOnedCodaBarWriter() {
diff --git a/fxbarcode/cbc_code128.cpp b/fxbarcode/cbc_code128.cpp
index 9f4f6da..2f337f9 100644
--- a/fxbarcode/cbc_code128.cpp
+++ b/fxbarcode/cbc_code128.cpp
@@ -37,11 +37,11 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_CODE128;
+  BC_TYPE format = BC_TYPE::kCode128;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   WideString content(contents);
-  if (contents.GetLength() % 2 && pWriter->GetType() == BC_CODE128_C)
+  if (contents.GetLength() % 2 && pWriter->GetType() == BC_TYPE::kCode128C)
     content += '0';
 
   m_renderContents = pWriter->FilterContents(content.AsStringView());
@@ -59,7 +59,7 @@
 }
 
 BC_TYPE CBC_Code128::GetType() {
-  return BC_CODE128;
+  return BC_TYPE::kCode128;
 }
 
 CBC_OnedCode128Writer* CBC_Code128::GetOnedCode128Writer() {
diff --git a/fxbarcode/cbc_code39.cpp b/fxbarcode/cbc_code39.cpp
index 2f65818..cddff90 100644
--- a/fxbarcode/cbc_code39.cpp
+++ b/fxbarcode/cbc_code39.cpp
@@ -37,7 +37,7 @@
   if (!pWriter->CheckContentValidity(contents))
     return false;
 
-  BC_TYPE format = BC_CODE39;
+  BC_TYPE format = BC_TYPE::kCode39;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   WideString filtercontents = pWriter->FilterContents(contents);
@@ -59,7 +59,7 @@
 }
 
 BC_TYPE CBC_Code39::GetType() {
-  return BC_CODE39;
+  return BC_TYPE::kCode39;
 }
 
 CBC_OnedCode39Writer* CBC_Code39::GetOnedCode39Writer() {
diff --git a/fxbarcode/cbc_datamatrix.cpp b/fxbarcode/cbc_datamatrix.cpp
index 43edb5a..5a2365e 100644
--- a/fxbarcode/cbc_datamatrix.cpp
+++ b/fxbarcode/cbc_datamatrix.cpp
@@ -49,7 +49,7 @@
 }
 
 BC_TYPE CBC_DataMatrix::GetType() {
-  return BC_DATAMATRIX;
+  return BC_TYPE::kDataMatrix;
 }
 
 CBC_DataMatrixWriter* CBC_DataMatrix::GetDataMatrixWriter() {
diff --git a/fxbarcode/cbc_ean13.cpp b/fxbarcode/cbc_ean13.cpp
index a3e2abe..0b9e44d 100644
--- a/fxbarcode/cbc_ean13.cpp
+++ b/fxbarcode/cbc_ean13.cpp
@@ -30,7 +30,7 @@
 CBC_EAN13::~CBC_EAN13() = default;
 
 BC_TYPE CBC_EAN13::GetType() {
-  return BC_EAN13;
+  return BC_TYPE::kEAN13;
 }
 
 size_t CBC_EAN13::GetMaxLength() const {
diff --git a/fxbarcode/cbc_ean8.cpp b/fxbarcode/cbc_ean8.cpp
index 185d7ab..c612f95 100644
--- a/fxbarcode/cbc_ean8.cpp
+++ b/fxbarcode/cbc_ean8.cpp
@@ -30,7 +30,7 @@
 CBC_EAN8::~CBC_EAN8() = default;
 
 BC_TYPE CBC_EAN8::GetType() {
-  return BC_EAN8;
+  return BC_TYPE::kEAN8;
 }
 
 size_t CBC_EAN8::GetMaxLength() const {
diff --git a/fxbarcode/cbc_pdf417i.cpp b/fxbarcode/cbc_pdf417i.cpp
index fe64cea..510d504 100644
--- a/fxbarcode/cbc_pdf417i.cpp
+++ b/fxbarcode/cbc_pdf417i.cpp
@@ -59,7 +59,7 @@
 }
 
 BC_TYPE CBC_PDF417I::GetType() {
-  return BC_PDF417;
+  return BC_TYPE::kPDF417;
 }
 
 CBC_PDF417Writer* CBC_PDF417I::GetPDF417Writer() {
diff --git a/fxbarcode/cbc_qrcode.cpp b/fxbarcode/cbc_qrcode.cpp
index 9d599dc..2544718 100644
--- a/fxbarcode/cbc_qrcode.cpp
+++ b/fxbarcode/cbc_qrcode.cpp
@@ -47,7 +47,7 @@
 }
 
 BC_TYPE CBC_QRCode::GetType() {
-  return BC_QR_CODE;
+  return BC_TYPE::kQRCode;
 }
 
 CBC_QRCodeWriter* CBC_QRCode::GetQRCodeWriter() {
diff --git a/fxbarcode/cbc_upca.cpp b/fxbarcode/cbc_upca.cpp
index 072ed00..a54c958 100644
--- a/fxbarcode/cbc_upca.cpp
+++ b/fxbarcode/cbc_upca.cpp
@@ -30,7 +30,7 @@
 CBC_UPCA::~CBC_UPCA() = default;
 
 BC_TYPE CBC_UPCA::GetType() {
-  return BC_UPCA;
+  return BC_TYPE::kUPCA;
 }
 
 size_t CBC_UPCA::GetMaxLength() const {
diff --git a/fxbarcode/cfx_barcode.cpp b/fxbarcode/cfx_barcode.cpp
index 692323e..fad154e 100644
--- a/fxbarcode/cfx_barcode.cpp
+++ b/fxbarcode/cfx_barcode.cpp
@@ -24,30 +24,29 @@
 
 std::unique_ptr<CBC_CodeBase> CreateBarCodeEngineObject(BC_TYPE type) {
   switch (type) {
-    case BC_CODE39:
+    case BC_TYPE::kCode39:
       return std::make_unique<CBC_Code39>();
-    case BC_CODABAR:
+    case BC_TYPE::kCodabar:
       return std::make_unique<CBC_Codabar>();
-    case BC_CODE128:
-      return std::make_unique<CBC_Code128>(BC_CODE128_B);
-    case BC_CODE128_B:
-      return std::make_unique<CBC_Code128>(BC_CODE128_B);
-    case BC_CODE128_C:
-      return std::make_unique<CBC_Code128>(BC_CODE128_C);
-    case BC_EAN8:
+    case BC_TYPE::kCode128:
+      return std::make_unique<CBC_Code128>(BC_TYPE::kCode128B);
+    case BC_TYPE::kCode128B:
+      return std::make_unique<CBC_Code128>(BC_TYPE::kCode128B);
+    case BC_TYPE::kCode128C:
+      return std::make_unique<CBC_Code128>(BC_TYPE::kCode128C);
+    case BC_TYPE::kEAN8:
       return std::make_unique<CBC_EAN8>();
-    case BC_UPCA:
+    case BC_TYPE::kUPCA:
       return std::make_unique<CBC_UPCA>();
-    case BC_EAN13:
+    case BC_TYPE::kEAN13:
       return std::make_unique<CBC_EAN13>();
-    case BC_QR_CODE:
+    case BC_TYPE::kQRCode:
       return std::make_unique<CBC_QRCode>();
-    case BC_PDF417:
+    case BC_TYPE::kPDF417:
       return std::make_unique<CBC_PDF417I>();
-    case BC_DATAMATRIX:
+    case BC_TYPE::kDataMatrix:
       return std::make_unique<CBC_DataMatrix>();
-    case BC_UNKNOWN:
-    default:
+    case BC_TYPE::kUnknown:
       return nullptr;
   }
 }
@@ -65,7 +64,7 @@
 }
 
 BC_TYPE CFX_Barcode::GetType() {
-  return m_pBCEngine ? m_pBCEngine->GetType() : BC_UNKNOWN;
+  return m_pBCEngine ? m_pBCEngine->GetType() : BC_TYPE::kUnknown;
 }
 
 bool CFX_Barcode::SetCharEncoding(BC_CHAR_ENCODING encoding) {
@@ -89,113 +88,119 @@
 }
 
 bool CFX_Barcode::SetPrintChecksum(bool checksum) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
-                                ->SetPrintChecksum(checksum),
-                            true)
-                         : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetPrintChecksum(checksum);
+      return true;
     default:
       return false;
   }
 }
 
 bool CFX_Barcode::SetDataLength(int32_t length) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
-                                ->SetDataLength(length),
-                            true)
-                         : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetDataLength(length);
+      return true;
     default:
       return false;
   }
 }
 
 bool CFX_Barcode::SetCalChecksum(bool state) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
-                                ->SetCalChecksum(state),
-                            true)
-                         : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetCalChecksum(state);
+      return true;
     default:
       return false;
   }
 }
 
 bool CFX_Barcode::SetFont(CFX_Font* pFont) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine
-                 ? static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetFont(pFont)
-                 : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      return static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetFont(pFont);
     default:
       return false;
   }
 }
 
 bool CFX_Barcode::SetFontSize(float size) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
-                                ->SetFontSize(size),
-                            true)
-                         : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetFontSize(size);
+      return true;
     default:
       return false;
   }
 }
 
 bool CFX_Barcode::SetFontColor(FX_ARGB color) {
+  if (!m_pBCEngine)
+    return false;
+
   switch (GetType()) {
-    case BC_CODE39:
-    case BC_CODABAR:
-    case BC_CODE128:
-    case BC_CODE128_B:
-    case BC_CODE128_C:
-    case BC_EAN8:
-    case BC_EAN13:
-    case BC_UPCA:
-      return m_pBCEngine ? (static_cast<CBC_OneCode*>(m_pBCEngine.get())
-                                ->SetFontColor(color),
-                            true)
-                         : false;
+    case BC_TYPE::kCode39:
+    case BC_TYPE::kCodabar:
+    case BC_TYPE::kCode128:
+    case BC_TYPE::kCode128B:
+    case BC_TYPE::kCode128C:
+    case BC_TYPE::kEAN8:
+    case BC_TYPE::kEAN13:
+    case BC_TYPE::kUPCA:
+      static_cast<CBC_OneCode*>(m_pBCEngine.get())->SetFontColor(color);
+      return true;
     default:
       return false;
   }
diff --git a/fxbarcode/cfx_barcode_unittest.cpp b/fxbarcode/cfx_barcode_unittest.cpp
index 4bccedb..3e4145b 100644
--- a/fxbarcode/cfx_barcode_unittest.cpp
+++ b/fxbarcode/cfx_barcode_unittest.cpp
@@ -72,7 +72,7 @@
 #define MAYBE_Code39 Code39
 #endif
 TEST_F(BarcodeTest, MAYBE_Code39) {
-  Create(BC_CODE39);
+  Create(BC_TYPE::kCode39);
   EXPECT_TRUE(barcode()->Encode(L"CLAMS"));
   RenderDevice();
   EXPECT_EQ("cd4cd3f36da38ff58d9f621827018903", BitmapChecksum());
@@ -85,14 +85,14 @@
 #define MAYBE_CodaBar CodaBar
 #endif
 TEST_F(BarcodeTest, MAYBE_CodaBar) {
-  Create(BC_CODABAR);
+  Create(BC_TYPE::kCodabar);
   EXPECT_TRUE(barcode()->Encode(L"$123-456"));
   RenderDevice();
   EXPECT_EQ("5fad4fc19f099001a0fe83c89430c977", BitmapChecksum());
 }
 
 TEST_F(BarcodeTest, CodaBarLetters) {
-  Create(BC_CODABAR);
+  Create(BC_TYPE::kCodabar);
   EXPECT_FALSE(barcode()->Encode(L"clams"));
 }
 
@@ -103,7 +103,7 @@
 #define MAYBE_Code128 Code128
 #endif
 TEST_F(BarcodeTest, MAYBE_Code128) {
-  Create(BC_CODE128);
+  Create(BC_TYPE::kCode128);
   EXPECT_TRUE(barcode()->Encode(L"Clams"));
   RenderDevice();
   EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
@@ -116,7 +116,7 @@
 #define MAYBE_Code128B Code128B
 #endif
 TEST_F(BarcodeTest, MAYBE_Code128B) {
-  Create(BC_CODE128_B);
+  Create(BC_TYPE::kCode128B);
   EXPECT_TRUE(barcode()->Encode(L"Clams"));
   RenderDevice();
   EXPECT_EQ("6351f0f6e997050e4658bbb4777aef74", BitmapChecksum());
@@ -129,7 +129,7 @@
 #define MAYBE_Code128C Code128C
 #endif
 TEST_F(BarcodeTest, MAYBE_Code128C) {
-  Create(BC_CODE128_C);
+  Create(BC_TYPE::kCode128C);
   EXPECT_TRUE(barcode()->Encode(L"123456"));
   RenderDevice();
   EXPECT_EQ("fba730a807ba6363f9bd2bc7f8c56d1f", BitmapChecksum());
@@ -142,7 +142,7 @@
 #define MAYBE_Code128CLetters Code128CLetters
 #endif
 TEST_F(BarcodeTest, MAYBE_Code128CLetters) {
-  Create(BC_CODE128_C);
+  Create(BC_TYPE::kCode128C);
   EXPECT_TRUE(barcode()->Encode(L"clams"));
   RenderDevice();
   EXPECT_EQ("6284ec8503d5a948c9518108da33cdd3", BitmapChecksum());
@@ -155,14 +155,14 @@
 #define MAYBE_Ean8 Ean8
 #endif
 TEST_F(BarcodeTest, MAYBE_Ean8) {
-  Create(BC_EAN8);
+  Create(BC_TYPE::kEAN8);
   EXPECT_TRUE(barcode()->Encode(L"123456"));
   RenderDevice();
   EXPECT_EQ("aff88491ac46ca6217d780d185300cde", BitmapChecksum());
 }
 
 TEST_F(BarcodeTest, Ean8Letters) {
-  Create(BC_EAN8);
+  Create(BC_TYPE::kEAN8);
   EXPECT_FALSE(barcode()->Encode(L"clams"));
 }
 
@@ -173,14 +173,14 @@
 #define MAYBE_UPCA UPCA
 #endif
 TEST_F(BarcodeTest, MAYBE_UPCA) {
-  Create(BC_UPCA);
+  Create(BC_TYPE::kUPCA);
   EXPECT_TRUE(barcode()->Encode(L"123456"));
   RenderDevice();
   EXPECT_EQ("fe26a5714cff7ffe3f9b02183efc435b", BitmapChecksum());
 }
 
 TEST_F(BarcodeTest, UPCALetters) {
-  Create(BC_UPCA);
+  Create(BC_TYPE::kUPCA);
   EXPECT_FALSE(barcode()->Encode(L"clams"));
 }
 
@@ -191,14 +191,14 @@
 #define MAYBE_Ean13 Ean13
 #endif
 TEST_F(BarcodeTest, MAYBE_Ean13) {
-  Create(BC_EAN13);
+  Create(BC_TYPE::kEAN13);
   EXPECT_TRUE(barcode()->Encode(L"123456"));
   RenderDevice();
   EXPECT_EQ("72d2190b98d635c32834bf67552e561e", BitmapChecksum());
 }
 
 TEST_F(BarcodeTest, Ean13Letters) {
-  Create(BC_EAN13);
+  Create(BC_TYPE::kEAN13);
   EXPECT_FALSE(barcode()->Encode(L"clams"));
 }
 
@@ -209,7 +209,7 @@
 #define MAYBE_Pdf417 Pdf417
 #endif
 TEST_F(BarcodeTest, MAYBE_Pdf417) {
-  Create(BC_PDF417);
+  Create(BC_TYPE::kPDF417);
   EXPECT_TRUE(barcode()->Encode(L"clams"));
   RenderDevice();
   EXPECT_EQ("191e35d11613901b7d5d51033689aa89", BitmapChecksum());
@@ -222,7 +222,7 @@
 #define MAYBE_DataMatrix DataMatrix
 #endif
 TEST_F(BarcodeTest, MAYBE_DataMatrix) {
-  Create(BC_DATAMATRIX);
+  Create(BC_TYPE::kDataMatrix);
   EXPECT_TRUE(barcode()->Encode(L"clams"));
   RenderDevice();
   EXPECT_EQ("5e5cd9a680b86fcd4ffd53ed36e3c980", BitmapChecksum());
@@ -235,7 +235,7 @@
 #define MAYBE_QrCode QrCode
 #endif
 TEST_F(BarcodeTest, MAYBE_QrCode) {
-  Create(BC_QR_CODE);
+  Create(BC_TYPE::kQRCode);
   EXPECT_TRUE(barcode()->Encode(L"clams"));
   RenderDevice();
   EXPECT_EQ("4751c6e0f67749fabe24f787128decee", BitmapChecksum());
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
index d74e18a..922e488 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
@@ -125,8 +125,9 @@
                                                int32_t& outWidth,
                                                int32_t& outHeight,
                                                int32_t hints) {
-  if (format != BC_CODABAR)
+  if (format != BC_TYPE::kCodabar)
     return nullptr;
+
   return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, outHeight,
                                           hints);
 }
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
index fc53b62..0905c9a 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter_unittest.cpp
@@ -23,7 +23,7 @@
   int32_t width;
   int32_t height;
 
-  uint8_t* encoded = writer.Encode("", BC_CODABAR, width, height);
+  uint8_t* encoded = writer.Encode("", BC_TYPE::kCodabar, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ(kModulesForDelimiters, width);
   const char* expected =
@@ -34,7 +34,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_CODABAR, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kCodabar, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ(kModulesForDelimiters + 3 * kModulesPerNumber, width);
   expected =
@@ -48,7 +48,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("-$./:+", BC_CODABAR, width, height);
+  encoded = writer.Encode("-$./:+", BC_TYPE::kCodabar, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ(kModulesForDelimiters + 2 * kModulesPerNumber +
                 4 * kModulesPerPunctuation,
@@ -67,7 +67,8 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("456.987987987/001", BC_CODABAR, width, height);
+  encoded =
+      writer.Encode("456.987987987/001", BC_TYPE::kCodabar, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ(kModulesForDelimiters + 15 * kModulesPerNumber +
                 2 * kModulesPerPunctuation,
@@ -132,7 +133,7 @@
   writer.SetStartChar('N');
   writer.SetEndChar('*');
 
-  uint8_t* encoded = writer.Encode("987", BC_CODABAR, width, height);
+  uint8_t* encoded = writer.Encode("987", BC_TYPE::kCodabar, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ(kModulesForDelimiters + 3 * kModulesPerNumber, width);
   const char* expected =
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.cpp b/fxbarcode/oned/BC_OnedCode128Writer.cpp
index d9552e3..27bdeaf 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -86,7 +86,8 @@
 
 CBC_OnedCode128Writer::CBC_OnedCode128Writer(BC_TYPE type)
     : m_codeFormat(type) {
-  DCHECK(m_codeFormat == BC_CODE128_B || m_codeFormat == BC_CODE128_C);
+  DCHECK(m_codeFormat == BC_TYPE::kCode128B ||
+         m_codeFormat == BC_TYPE::kCode128C);
 }
 
 CBC_OnedCode128Writer::~CBC_OnedCode128Writer() = default;
@@ -97,7 +98,7 @@
 }
 
 WideString CBC_OnedCode128Writer::FilterContents(WideStringView contents) {
-  const wchar_t limit = m_codeFormat == BC_CODE128_B ? 126 : 106;
+  const wchar_t limit = m_codeFormat == BC_TYPE::kCode128B ? 126 : 106;
 
   WideString filtered;
   filtered.Reserve(contents.GetLength());
@@ -122,8 +123,9 @@
                                                int32_t& outWidth,
                                                int32_t& outHeight,
                                                int32_t hints) {
-  if (format != BC_CODE128)
+  if (format != BC_TYPE::kCode128)
     return nullptr;
+
   return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, outHeight,
                                           hints);
 }
@@ -135,7 +137,7 @@
 
   std::vector<int32_t> patterns;
   int32_t checkSum = 0;
-  if (m_codeFormat == BC_CODE128_B)
+  if (m_codeFormat == BC_TYPE::kCode128B)
     checkSum = Encode128B(contents, &patterns);
   else
     checkSum = Encode128C(contents, &patterns);
diff --git a/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp b/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
index c39bf28..380c73b 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer_unittest.cpp
@@ -84,7 +84,7 @@
 
 TEST(OnedCode128WriterTest, CheckContentValidity) {
   {
-    CBC_OnedCode128Writer writer(BC_CODE128_B);
+    CBC_OnedCode128Writer writer(BC_TYPE::kCode128B);
     EXPECT_TRUE(writer.CheckContentValidity(L"foo"));
     EXPECT_TRUE(writer.CheckContentValidity(L"xyz"));
     EXPECT_FALSE(writer.CheckContentValidity(L""));
@@ -94,7 +94,7 @@
     EXPECT_FALSE(writer.CheckContentValidity(L"qux\x88"));
   }
   {
-    CBC_OnedCode128Writer writer(BC_CODE128_C);
+    CBC_OnedCode128Writer writer(BC_TYPE::kCode128C);
     EXPECT_TRUE(writer.CheckContentValidity(L"foo"));
     EXPECT_TRUE(writer.CheckContentValidity(L"xyz"));
     EXPECT_FALSE(writer.CheckContentValidity(L""));
@@ -107,7 +107,7 @@
 
 TEST(OnedCode128WriterTest, FilterContents) {
   {
-    CBC_OnedCode128Writer writer(BC_CODE128_B);
+    CBC_OnedCode128Writer writer(BC_TYPE::kCode128B);
     EXPECT_STREQ(L"", writer.FilterContents(L"").c_str());
     EXPECT_STREQ(L"foo", writer.FilterContents(L"foo\x10").c_str());
     EXPECT_STREQ(L"fool", writer.FilterContents(L"foo\x10l").c_str());
@@ -116,7 +116,7 @@
     EXPECT_STREQ(L"bar", writer.FilterContents(L"bar\x10\x7F\x88").c_str());
   }
   {
-    CBC_OnedCode128Writer writer(BC_CODE128_C);
+    CBC_OnedCode128Writer writer(BC_TYPE::kCode128C);
     EXPECT_STREQ(L"", writer.FilterContents(L"").c_str());
     EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10").c_str());
     EXPECT_STREQ(L"f", writer.FilterContents(L"foo\x10l").c_str());
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.cpp b/fxbarcode/oned/BC_OnedCode39Writer.cpp
index 1c435a2..4ca2054 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer.cpp
@@ -124,8 +124,9 @@
                                               int32_t& outWidth,
                                               int32_t& outHeight,
                                               int32_t hints) {
-  if (format != BC_CODE39)
+  if (format != BC_TYPE::kCode39)
     return nullptr;
+
   return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, outHeight,
                                           hints);
 }
diff --git a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
index 9143193..0c65f7e 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer_unittest.cpp
@@ -41,7 +41,7 @@
   uint8_t* encoded;
   const char* expected;
 
-  encoded = writer.Encode("PDFIUM", BC_CODE39, width, height);
+  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width, height);
   expected =
       "#   # ### ### # "  // * Start
       "# ### ### #   # "  // P
@@ -57,7 +57,7 @@
 
   writer.SetWideNarrowRatio(2);
 
-  encoded = writer.Encode("PDFIUM", BC_CODE39, width, height);
+  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width, height);
   expected =
       "#  # ## ## # "  // * Start
       "# ## ## #  # "  // P
@@ -79,7 +79,7 @@
   uint8_t* encoded;
   const char* expected;
 
-  encoded = writer.Encode("", BC_CODE39, width, height);
+  encoded = writer.Encode("", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((0 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
@@ -89,7 +89,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_CODE39, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((3 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
@@ -102,7 +102,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("PDFIUM", BC_CODE39, width, height);
+  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((6 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
@@ -118,7 +118,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("A -$%./+Z", BC_CODE39, width, height);
+  encoded = writer.Encode("A -$%./+Z", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((9 + DELIMITER_CHARS) * MODULES_PER_CHAR - 1, width);
   expected =
@@ -147,7 +147,7 @@
 
   writer.SetCalcChecksum(true);
 
-  encoded = writer.Encode("123", BC_CODE39, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((3 + CHECKSUM_CHARS + DELIMITER_CHARS) * MODULES_PER_CHAR - 1,
             width);
@@ -162,7 +162,7 @@
     EXPECT_EQ(expected[i] != ' ', !!encoded[i]) << i;
   FX_Free(encoded);
 
-  encoded = writer.Encode("PDFIUM", BC_CODE39, width, height);
+  encoded = writer.Encode("PDFIUM", BC_TYPE::kCode39, width, height);
   EXPECT_EQ(1, height);
   EXPECT_EQ((6 + CHECKSUM_CHARS + DELIMITER_CHARS) * MODULES_PER_CHAR - 1,
             width);
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 74c314c..39b9971 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -90,7 +90,7 @@
                                              int32_t& outWidth,
                                              int32_t& outHeight,
                                              int32_t hints) {
-  if (format != BC_EAN13)
+  if (format != BC_TYPE::kEAN13)
     return nullptr;
 
   return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, outHeight,
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp b/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
index b479897..0f5d10e 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer_unittest.cpp
@@ -19,23 +19,23 @@
 
   // EAN-13 barcodes encode 13-digit numbers into 95 modules in a unidimensional
   // disposition.
-  encoded = writer.Encode("", BC_EAN13, width, height);
+  encoded = writer.Encode("", BC_TYPE::kEAN13, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_EAN13, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kEAN13, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789012", BC_EAN13, width, height);
+  encoded = writer.Encode("123456789012", BC_TYPE::kEAN13, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345678901234", BC_EAN13, width, height);
+  encoded = writer.Encode("12345678901234", BC_TYPE::kEAN13, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567890128", BC_EAN13, width, height);
+  encoded = writer.Encode("1234567890128", BC_TYPE::kEAN13, width, height);
   EXPECT_NE(nullptr, encoded);
   EXPECT_EQ(1, height);
   EXPECT_EQ(95, width);
@@ -62,7 +62,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("7776665554440", BC_EAN13, width, height);
+  encoded = writer.Encode("7776665554440", BC_TYPE::kEAN13, width, height);
   EXPECT_NE(nullptr, encoded);
   EXPECT_EQ(1, height);
   EXPECT_EQ(95, width);
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index b5a65ab..3bde116 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -93,8 +93,9 @@
                                             int32_t& outWidth,
                                             int32_t& outHeight,
                                             int32_t hints) {
-  if (format != BC_EAN8)
+  if (format != BC_TYPE::kEAN8)
     return nullptr;
+
   return CBC_OneDimWriter::EncodeWithHint(contents, format, outWidth, outHeight,
                                           hints);
 }
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
index 7526bb4..0179980 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer_unittest.cpp
@@ -19,23 +19,23 @@
 
   // EAN-8 barcodes encode 8-digit numbers into 67 modules in a unidimensional
   // disposition.
-  encoded = writer.Encode("", BC_EAN8, width, height);
+  encoded = writer.Encode("", BC_TYPE::kEAN8, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_EAN8, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kEAN8, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567", BC_EAN8, width, height);
+  encoded = writer.Encode("1234567", BC_TYPE::kEAN8, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789", BC_EAN8, width, height);
+  encoded = writer.Encode("123456789", BC_TYPE::kEAN8, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345670", BC_EAN8, width, height);
+  encoded = writer.Encode("12345670", BC_TYPE::kEAN8, width, height);
   EXPECT_NE(nullptr, encoded);
   EXPECT_EQ(1, height);
   EXPECT_EQ(67, width);
@@ -57,7 +57,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("99441104", BC_EAN8, width, height);
+  encoded = writer.Encode("99441104", BC_TYPE::kEAN8, width, height);
   EXPECT_NE(nullptr, encoded);
   EXPECT_EQ(1, height);
   EXPECT_EQ(67, width);
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index 9d1799c..fd944db 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -89,12 +89,12 @@
                                             int32_t& outWidth,
                                             int32_t& outHeight,
                                             int32_t hints) {
-  if (format != BC_UPCA)
+  if (format != BC_TYPE::kUPCA)
     return nullptr;
 
   ByteString toEAN13String = '0' + contents;
   m_iDataLenth = 13;
-  return m_subWriter->EncodeWithHint(toEAN13String, BC_EAN13, outWidth,
+  return m_subWriter->EncodeWithHint(toEAN13String, BC_TYPE::kEAN13, outWidth,
                                      outHeight, hints);
 }
 
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp b/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
index 16c1f98..988ab59 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter_unittest.cpp
@@ -17,23 +17,23 @@
 
   // UPCA barcodes encode 12-digit numbers into 95 modules in a unidimensional
   // disposition.
-  uint8_t* encoded = writer.Encode("", BC_UPCA, width, height);
+  uint8_t* encoded = writer.Encode("", BC_TYPE::kUPCA, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123", BC_UPCA, width, height);
+  encoded = writer.Encode("123", BC_TYPE::kUPCA, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("12345678901", BC_UPCA, width, height);
+  encoded = writer.Encode("12345678901", BC_TYPE::kUPCA, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("1234567890123", BC_UPCA, width, height);
+  encoded = writer.Encode("1234567890123", BC_TYPE::kUPCA, width, height);
   EXPECT_EQ(nullptr, encoded);
   FX_Free(encoded);
 
-  encoded = writer.Encode("123456789012", BC_UPCA, width, height);
+  encoded = writer.Encode("123456789012", BC_TYPE::kUPCA, width, height);
   const char* expected =
       "# #"      // Start
       "  ##  #"  // 1 L
@@ -58,7 +58,7 @@
   }
   FX_Free(encoded);
 
-  encoded = writer.Encode("777666555440", BC_UPCA, width, height);
+  encoded = writer.Encode("777666555440", BC_TYPE::kUPCA, width, height);
   expected =
       "# #"      // Start
       " ### ##"  // 7 L
