Click here to Skip to main content
16,011,578 members
Articles / Programming Languages / C++

A C++ Barcode Library

Rate me:
Please Sign up or sign in to vote.
3.68/5 (21 votes)
29 Mar 2006CPOL3 min read 130.7K   12.6K   66   10
An easy-to-use barcode library file for Win32 and MFC programmers

Image 1

Screenshot of Main Dialog

Introduction

The Library file presented is Barcode.h under Lib directory contains inline C++ code for:

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

The library file is targeted to Win32, so it can be used by both MFC and Win32 programs. 
All classes are almost the same from the user's point of view, only 2 functions are needed to be used.

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

For example, class for Code39 is Barcode39:

Call default constructor first, then call the following 2 functions:

C++
BOOL Encode39(const char*pszCodeIn);
void Draw39(HDC hDC,int iX,int iY0,int iY1,const COLORREF clrBar,
			const COLORREF clrSpace,const int iPenW); 
Parameters of the above functions:
  • pszCodeIn: string to be encoded, i.e. "1234567890"
  • iX: start horizontal position to draw the barcode
  • iY0,iY1: start and end vertical positions to draw the barcode
  • clrBar, clrSpace: colors of bar and space
  • iPenW: width of pen to draw the barcode

Array for Bars and Spaces

A byte array is defined in BarcodeBase class as BYTE ia_Buf[4096];
Each byte of the array represents a bar or space, bits of the byte are encoded in the format:
[n/a][n/a][n/a][n/a][n/a][n/a][w-n][b-s]
First 6 bits are not used.
Last bit is flagged for bar or space.
Last second bit is flagged for wide or narrow.

So, value of the byte means:

  • 0x00 = a narrow space
  • 0x01 = a narrow bar
  • 0x02 = a wide space
  • 0x03 = a wide bar

Note: Class BarcodeEan13 is special: Last third bit is used by the class to indicate if the bar (space) is longer than others.

Image 2

Sample Program

The sample is a dialog based MFC program. The main dialog is in borderless style, when edit-box Move (refer to picture below) gets focus, user can use arrow keys of up, down, left and right to move main dialog. This feature allows you to compare barcode drawn on main dialog with other barcode programs easily. You also can use mouse to drag main dialog by clicking on it as clicking on caption of normal windows.

Controls

Buttons

  • OnTop/OnNormal: Set the program as top-most-window or not
  • Close: Close the program
  • Help: Display this HTML file
  • Print: Print barcode

Others

  • Style: Barcode styles or symbologies
  • Map: Map-mode used
  • Move: Move main dialog by arrow keys once it gets focus
  • Code: String to be encoded
  • X,Y,Height: For print positions, unit is in logic points
  • Pen width: Width of one bar or space

Please note

Some MapModes (such as MM_HIENGLISH) cannot be displayed properly on screen, you have to test them by printing.

Disappointing

This sample and library file are my test program for barcode, which doesn't include second part: dynamical bitmap of barcode generated from encoding.

Why do I test barcode with bitmap? Here is the answer:
As we know, there are three methods for printing:

  1. By drawing such as LineTo()
  2. By Bitmap such as BitBlt()
  3. By fonts such as TextOut()

Barcode must be printed clearly with high qualities. The only way to print a good barcode is by fonts. If you try to use the code for commercial purposes, the result is very disappointing because this program does not use fonts.

References

  1. Barcode serial articles by Mr. Neil Van Eps
  2. Articles by Mr. Lam Do Thanh

History

  • 29th March, 2006: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Australia Australia

Please visit our Download Home to obtain many interesting software for free ...


Comments and Discussions

 
GeneralCode128 / FNC3 Pin
tremblay.simon29-Nov-12 2:59
tremblay.simon29-Nov-12 2:59 
QuestionThanks a lot Pin
Alex_118-Nov-12 14:01
Alex_118-Nov-12 14:01 
Questiondo have sample for qrcode? Pin
novice5113-Feb-11 21:08
novice5113-Feb-11 21:08 
QuestionHow to read barcode and display the numbers for Barcode39?S.O.S ! Pin
ttarantula8-Jul-08 23:21
ttarantula8-Jul-08 23:21 
GeneralBarcode reader photo detector Pin
edcornj3-May-08 3:20
edcornj3-May-08 3:20 
GeneralThank to share the program Pin
Shi Jun17-Sep-07 15:48
Shi Jun17-Sep-07 15:48 
QuestionDo you have library to decode barcode image? Pin
Trinh Tuan21-Sep-06 21:08
Trinh Tuan21-Sep-06 21:08 
GeneralNotice from author Pin
includeh1029-Mar-06 16:27
includeh1029-Mar-06 16:27 
This is my first article, currently upload files are OK, you can download them now.


  1. Second part: Dynamical bitmap
    The second part (Dynamical bitmap) has been deleted because I think readers like simple code.

    If more than 5 readers ask for second part, I will modify the program and add dynamical-bitmap-barcode to it.

  2. Be-careful code inside
    A byte array is defined this way in BarcodeBase class:
    BYTE ia_Buf[4096];
    So total number of bars and spaces of one barcode can be upto 4096 only.
    4096 is enough for barcode, but in case you need more, please simply use larger number for the array.
    Anyway, this piece of code is not good from programming tech view - as I said, this sample is my test program, it is good enough for tesing purposes.




Thank you



A special image tool for Windows C++ programmers, don't miss it!
A nice hyper tool for optimizing your Microsoft html-help contents.

Includeh10

-- modified at 22:52 Wednesday 29th March, 2006
GeneralRe: Notice from author Pin
VladaTzar25-Aug-09 0:20
VladaTzar25-Aug-09 0:20 
QuestionLibrary file is missing? Pin
delphidab29-Mar-06 9:32
delphidab29-Mar-06 9:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.