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.
-
Encode...()
-
Draw...(...)
For example,
class for
Code39
is
Barcode39
:
Call default
constructor
first, then
call the
following 2
functions:
Collapse
Copy
Code
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.
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:
-
By
drawing such
as
LineTo()
-
By
Bitmap
such as
BitBlt()
-
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.