65.9K
CodeProject 正在变化。 阅读更多。
Home

C++ 条形码库

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.68/5 (21投票s)

2006年3月29日

CPOL

3分钟阅读

viewsIcon

131596

downloadIcon

12665

一个易于使用的条形码库文件,适用于 Win32 和 MFC 程序员。

主对话框截图

引言

提供的库文件是 Lib 目录下的 Barcode.h,其中包含以下条形码的内联 C++ 代码:

  • Code39
  • Code93
  • CodeI2of5
  • Code128A
  • Code128B
  • Code128C

该库文件针对 Win32,因此可以被 MFC 和 Win32 程序使用。
从用户的角度来看,所有类几乎相同,只需要使用 2 个函数。

  1. Encode...()
  2. Draw...(...)

例如,Code39 的类是 Barcode39

首先调用默认构造函数,然后调用以下 2 个函数

BOOL Encode39(const char*pszCodeIn);
void Draw39(HDC hDC,int iX,int iY0,int iY1,const COLORREF clrBar,
			const COLORREF clrSpace,const int iPenW); 
上述函数的参数
  • pszCodeIn:要编码的string,例如 "1234567890"
  • iX:绘制条形码的起始水平位置
  • iY0,iY1:绘制条形码的起始和结束垂直位置
  • clrBar, clrSpace:条和空格的颜色
  • iPenW:绘制条形码的画笔宽度

条和空格的数组

一个字节数组在 BarcodeBase 类中定义为 BYTE ia_Buf[4096];
数组的每个字节代表一个条或空格,字节的位以以下格式编码
[n/a][n/a][n/a][n/a][n/a][n/a][w-n][b-s]
前 6 位未使用。
最后一位标记条或空格。
倒数第二位标记宽或窄。

因此,字节的值表示

  • 0x00 = 一个窄空格
  • 0x01 = 一个窄条
  • 0x02 = 一个宽空格
  • 0x03 = 一个宽条

注意BarcodeEan13 类比较特殊:该类使用倒数第三位来指示条(空格)是否比其他条(空格)更长。

示例程序

示例是一个基于对话框的 MFC 程序。主对话框是无边框样式,当编辑框 Move(参考下图)获得焦点时,用户可以使用向上、向下、向左和向右箭头键来移动主对话框。此功能允许您轻松地将主对话框上绘制的条形码与其他条形码程序进行比较。您也可以通过单击主对话框(就像单击普通窗口的标题栏一样)使用鼠标拖动主对话框。

控件

按钮

  • OnTop/OnNormal:设置程序为顶层窗口与否
  • Close:关闭程序
  • Help:显示此 HTML 文件
  • Print:打印条形码

其他

  • Style:条形码样式或符号体系
  • Map:使用的映射模式
  • Move:一旦获得焦点,即可使用箭头键移动主对话框
  • Code:要编码的字符串
  • X,Y,Height:打印位置,单位为逻辑点
  • Pen width:一个条或空格的宽度

请注意

某些 MapModes(例如 MM_HIENGLISH)无法在屏幕上正确显示,您必须通过打印来测试它们。

令人失望

此示例和库文件是我的条形码测试程序,不包括第二部分:从编码生成的条形码的动态位图。

我为什么要用位图测试条形码?答案如下
众所周知,有三种打印方法

  1. 通过绘制,例如 LineTo()
  2. 通过位图,例如 BitBlt()
  3. 通过字体,例如 TextOut()

条形码必须以高质量清晰地打印出来。打印良好条形码的唯一方法是使用字体。如果您尝试将代码用于商业目的,结果会非常令人失望,因为该程序不使用字体。

参考文献

  1. Neil Van Eps 先生的条形码系列文章
  2. Lam Do Thanh 先生的文章

历史

  • 2006 年 3 月 29 日:首次发布
© . All rights reserved.