Click here to Skip to main content
12,450,981 members (24,957 online)
Rate this:
Please Sign up or sign in to vote.
See more: C++
I have found a free online barCode scanner online to make my own barcodes for products and it is really convenient and useful. KEEPAUTOMATION Free Online Code Reader But,how can I download it to my computer to print it on my products? Do I need to do some programming to make a barcode scanner by myself? Who can do me a favor? Thanks.
Posted 10-Jan-12 18:47pm
Shakti Misra 11-Jan-12 1:14am
The question I feel is vague. The link you have shared is a barcode generator in Java. Scanner is a device. Do you have a barcode scanner device? The question does not belong in a C++ forum.
Smithers-Jones 11-Jan-12 8:07am
Spammer! Reported.
Rate this: bad
Please Sign up or sign in to vote.

Solution 2

Here is an article about drawing barcodes - Drawing Barcodes in Windows Part 1 - Code 39[^]
Here is one about reading them - Scan and Read the Barcode from PDF File[^]
Prashant Srivastava LKO 16-Jan-12 4:19am
Nice answer
Rate this: bad
Please Sign up or sign in to vote.

Solution 1

To Scan barcode you will need a physical device. Bar code are a type of code just like alphabets. You can generate and print it on a paper or anything that your printer supports. But you need to have the fonts installed in the printer on which you want to print.
The scanner is a optical character recognition device.
johny10151981 11-Jan-12 1:24am
Barcode represents Alphabet but barcode itself is not alphabet
Rate this: bad
Please Sign up or sign in to vote.

Solution 3

Barcode has various format. Please read more about barcode[^]. You will have to chose the proper format for you.

Then generate the barcode and print it on your desired paper. And dont forget that barcode is not any secret number its open number.
Rate this: bad
Please Sign up or sign in to vote.

Solution 4

You can generate barcode is very simple
Download fonts by googling as Barcode fonts
some commonly used barcode fonts are Code 128, code 39 etc.
and use these fonts to generate barcode as

Take a label
and set font to barcode font as code 128.

and About barcode scanner,
It is hardaware device.You can purchase and use it own application.
Rate this: bad
Please Sign up or sign in to vote.

Solution 5

class CBarcode
        void LoadData(CString csMessage, double dNarrowBar, double dFinalHeight, 
                      HDC pDC, int nStartingXPixel, int nStartingYPixel, 
                      double dRatio = 1.0);
        virtual void DrawBitmap() = 0;
        virtual void BitmapToClipboard() = 0;
        virtual ~CBarcode();
        long GetBarcodePixelWidth();
        long GetBarcodePixelHeight();
        CString m_csMessage;
        HDC m_hDC;
        long m_nFinalBarcodePixelWidth;
        long m_nNarrowBarPixelWidth;
        long m_nPixelHeight;
        long m_nStartingXPixel;
        long m_nStartingYPixel;
        long m_nSymbology;
        long m_nWideBarPixelWidth;
        virtual void DrawPattern(CString csPattern) = 0;
There are a few things to note about the CBarcode class. First note that it has data members that contain all of the useful data needed to draw a barcode message. This data includes the narrow element pixel width, the wide element pixel width, the message, and the symbology. Second the class has data members that contain information about how to output the barcode message. This data includes a device context handle, and a starting X and Y pixel. Third the class has some public member functions to intialize the class by loading data, and obtain information about the barcode message, namely its pixel height and width. Fourth the class has several abstract member functions that make this class an abstract base class. Any classes derived from CBarcode will be expected to implement these functions.

The CCode39 class

The CCode39 class is the class to implement to draw a Code 39 barcode. The class declaration is listed below.
class CCode39 : public CBarcode 
        void BitmapToClipboard();
        void DrawBitmap();
        virtual ~CCode39();
        void DrawPattern(CString csPattern);
        CString RetrievePattern( char c ); 
The class has two public functions BitmapToClipboard() and DrawBitmap(), plus it inherits the LoadData() function from the CBarcode class. The steps to use the class are simple, declare an instance of the class, call LoadData() to intialize class data, and then call either BitmapToClipboard() if you want to put a bitmap of the barcode on the clipboard, or call DrawBitmap() to draw the barcode message.

Drawing a Barcode to a Device Context

The following code snipet is an example using DrawBitmap().
CString        csMessage;
double        dNarrowBar,dHeight, dRatio;
HDC        pDC;
long        nStartingXPixel, nStartingYPixel;
CCode39        oBarcode;
// assign variable values here

// call LoadData and draw the barcode

Drawing a Barcode to the Clipboard

The following code snipet is an example using BitmapToClipboard().
HDC    hDC = NULL;
double    dNarrowbar,dHeight,dRatio;
CCode93    oBarcode;
// assign variable values here

// call LoadData and BitmapToClipboard()

Note that when using the BitmapToClipboard() function, you can pass a null device context handle and zeroes for the starting X and Y pixel in the LoadData() call. Obviously the starting X and Y pixels are meaningless on the clipboard, but what about the null device context handle? The answer to that question can be found by looking at this code snipet from the BitmapToClipboard() function.
CDC    memDC;
So the BitmapToClipboard() function creates its own memory device context by using the memDC.CreateCompatibleDC(NULL) function call. A quick look at the MSDN documentation shows that if you pass a NULL value to CreateCompatibleDC, the device context created is compatible with the screen.

CBarcode::LoadData() details

The parameters for CBarcode::LoadData() deserve some further explanation and this seems like the place to do it. The first parameter, csMessage is simply the message you wish to be drawn as a Code 39 barcode. The next parameter dNarrowBar is the width of the narrow element in inches. The parameter dHeight is the height of the barcode in inches. The parameter pDC is a handle to the device context that the barcode will be drawn in. The next two parameters, nStartingXPixel and nStartingYPixel define the coordinates to start drawing the barcode. The final parameter, dRatio is the ratio of wide/narrow element widths. If you remember the declaration of the CBarcode class above, you'll remember that it stores all width and height information in pixels, and that it stores the narrow element width and the wide element width instead of the narrow element width and the wide/narrow element width ratio. Clearly CBarcode::LoadData() is doing some behind the scenes conversion work.

The first step to that conversion work is to get the X axis and Y axis dpi, which is done by the following code, taken from CBarcode::LoadData().
CDC    tempDC;
nXAxisDpi = tempDC.GetDeviceCaps(LOGPIXELSX);
nYAxisDpi = tempDC.GetDeviceCaps(LOGPIXELSY);
Once you have the X and Y axis dpi, you can calculate the pixel height, narrow element pixel width, and wide element pixel width as shown in the following code snipet.
// load the final attributes that depend on the device context

m_nPixelHeight = (int)((nYAxisDpi*dFinalHeight)+0.5);
m_nNarrowBarPixelWidth = (int)((nXAxisDpi*dNarrowBar)+0.5);
m_nWideBarPixelWidth = (int)(dRatio*m_nNarrowBarPixelWidth);
Note the rounding effect when calculating the narrow element pixel width and the wide element pixel width. The narrow element width has a lower limit of one pixel, so the barcode you can produce is limited by the physical limitations of the output device.

Next you can calculate the final barcode pixel width, this operation is symbology specific and the Code 39 code excerpt is listed below.
// get final character width

nTemp = m_csMessage.GetLength() + 2;
// add message

m_nFinalBarcodePixelWidth = nTemp * ((3*m_nWideBarPixelWidth) + 
The code above calculates the final barcode pixel width by adding two characters for the message length, (for the start and stop code) and multiplying the total number of characters by the pixel length of each character. Note that the total length of each character uses 7 times the narrow element width to accomodate the inter-character gap.

CCode39::DrawBitmap() details

The DrawBitmap() function is where each message character is drawn. A listing of the CCode39::DrawBitmap() function is listed below.
void CCode39::DrawBitmap()
    int     i;
    CString csCurrentPattern;
    // draw start character, an asterisk

    // draw each character in the message

    for (i=0;i<m_csmessage.getlength();i++)>
    // draw stop character, also an asterisk


The CCode39::DrawBitmap() function starts out by drawing the start character, the asterisk. Then the code steps through every character in the message and draws each character. Finally the code draws the stop character, again the asterisk. There are two private member functions that are used here. CCode39::DrawPattern() draws the pattern passed to it, the pattern is a CString in the form of “wnnwnnnnw” (the character '1') like the character data mentioned above. CCode39::RetrievePattern() is basically a giant switch statement, retrieving the pattern for any legal Code 39 character passed to it. Note that each character pattern returned from CCode39::RetrievePattern() has an extra “n” tacked on to the end to add the inter-character gap.

CCode39::DrawPattern() details

The CCode39::DrawPattern() function draws a single Code 39 barcode character in the passed device context. The CCode39::DrawPattern() function is listed below.
void CCode39::DrawPattern( CString csPattern )
    int i,nXPixel,nYPixel,nTempWidth;
    CDC oDC;
    // attach to the device context

    // initialize X pixel value

    nXPixel = m_nStartingXPixel;
    for (i=0;i<cspattern.getlength();i++)>
        // decide if narrow or wide bar

        if (csPattern.GetAt(i)=='n')
            nTempWidth = m_nNarrowBarPixelWidth;
            nTempWidth = m_nWideBarPixelWidth;
        // X value for loop

        for (nXPixel=m_nStartingXPixel; 
            // Y value for loop

            for (nYPixel = m_nStartingYPixel; 
                // if this is a bar

                if (i%2==0)
        // advance the starting position

        m_nStartingXPixel+= nTempWidth;
    // detach from the device context

The CCode39::Dr

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

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy | Mobile
Web02 | 2.8.160826.1 | Last Updated 11 Jan 2012
Copyright © CodeProject, 1999-2016
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100