条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614

下面是我的DEMO 直接放到VS2005下面编译即可

#include <ctime>
#include <string>
#include <map>
#include <vector>
using namespace std;
#include <windows.h>
#include <atlimage.h>
map<int,string> g_codemap;
bool FillCodeMap(void);
bool GetStringCode(char *str, string &strCode);
bool GetImg(string code,CImage& img);
HDC Hdc=::GetWindowDC(::GetDesktopWindow());
int main(int argc, char **argv)
{
//"038000356216"
FillCodeMap();
string code;
GetStringCode("",code);
printf("cod:\n%s\n",code.c_str());
CImage img;
GetImg(code,img);
img.Save(L"d:/barcode-demo.jpg");//这里基本就OK了 下面是直接显示到屏幕的代码 CImage demo;
{
demo.Create(img.GetWidth()+,img.GetHeight()+,);
HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
RECT rc;
rc.left=;
rc.right=demo.GetWidth();;
rc.top=;
rc.bottom=demo.GetHeight();
HDC hdc=demo.GetDC();
::FillRect(hdc,&rc,white);
img.BitBlt(hdc,,);
demo.ReleaseDC();
} while()
{
demo.BitBlt(Hdc,,);
::Sleep();
}
return ;
} bool GetImg(string code,CImage& img)
{
if(code.empty())return false;
if(!img.IsNull())img.Destroy(); int perWid=;
int externWid=;
int hei=+externWid*;
int wid=code.length()*perWid+externWid*;
img.Create(wid,hei,);
HDC hdc=img.GetDC();
HBRUSH white=(HBRUSH)GetStockObject(WHITE_BRUSH);
HBRUSH black=(HBRUSH)GetStockObject(BLACK_BRUSH);
RECT rc;
rc.left=rc.top=;
rc.right=img.GetWidth();
rc.bottom=img.GetHeight();
::FillRect(hdc,&rc,white); rc.left=externWid;
rc.right=rc.left+perWid;
rc.top=externWid;
rc.bottom=img.GetHeight()-externWid;
const char* p=code.c_str();
for(int i=;i<code.length();++i)
{
::FillRect(hdc,&rc,p[i]==''?white:black);
rc.left+=perWid;
rc.right+=perWid;
}
img.ReleaseDC();
}
bool FillCodeMap(void)//g_codemap是个map,这我不用讲了,找个地方定义一下,在此处填充
{
if(!g_codemap.empty())
return true; g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]="";
g_codemap[]=""; return true;
}
bool GetStringCode(char *str, string &strCode)
{//传说中的code128B码就是这么造的,因为VC中的char其实就是一个int,所以对我们VC来讲更是简单无比
if(str==NULL)
return false;
if(int(strlen(str))==)
return false; vector <int> tV; int nTol = ;
int nsz = strlen(str); for (int i=;i<nsz;i++)
{
if(str[i]>=)
nTol += (str[i] - ) * (i+);
else
nTol += (str[i] + ) * (i+);
} int nEndCode = nTol%;
if (nEndCode>=)
{
if(nEndCode<=)
nEndCode = + nEndCode;
}
else
{
nEndCode += ;
} tV.push_back();//加头
for (int j=;j<nsz;j++)
tV.push_back(int(str[j]));//加内容
tV.push_back(nEndCode);//加校验码
tV.push_back();//加尾 int nV = tV.size();
for (int k=;k<nV;k++)
{
strCode += g_codemap[tV.at(k)];
} return true;
}

条形码(barcode)code128生成代码的更多相关文章

  1. 使用Spire.Barcode程序库生成二维码

    使用Spire.Barcode程序库生成二维码 某天浏览网页发现了一个二维码的程序库.它的描述说他可以扫描二维码图像.我很感兴趣,想试试他是不是会有用.所以我就用了些方法扫描二维码图像来测试一下.结果 ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. mybatis Generator生成代码及使用方式

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...

  4. x01.CodeBuilder: 生成代码框架

    根据 Assembly 生成代码框架. 这是学习 AvalonEdit 的一个副产品.学习时,照着源代码新建文件夹,新建文件,添加方法与属性,虽然只是个框架,也要花费大量时间.为什么不让它自动生成呢? ...

  5. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  6. 动态生成一个设定好特殊样式的Tlabel,快速生成代码

    动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...

  7. apt 根据注解,编译时生成代码

    apt: @Retention后面的值,设置的为CLASS,说明就是编译时动态处理的.一般这类注解会在编译的时候,根据注解标识,动态生成一些类或者生成一些xml都可以,在运行时期,这类注解是没有的~~ ...

  8. 使用mybatis-generator生成代码

    文档地址: ​http://mbg.cndocs.tk/index.html ​ 以下是一个简单的配置内容. 一.在maven配置文件中添加mybatis-generator插件 1 2 3 4 5 ...

  9. WebStorm按Tab建快速生成代码模块

    WS中,比如调试每次都要写的console.log(xxx);每次都要敲一遍,还有if模块,for循环模块,难道没有快捷键,可以生成代码模块吗,答案是“有”. 操作步骤如下(汉化版WS): 1.Alt ...

随机推荐

  1. [WPF]BringIntoView

    1.在scrollview 中的frameworkelement可以使用 FE.BringIntoView(); 滚动到此控件. 2.该 方法能一个重载 Bottom.BringIntoView(ne ...

  2. pgsql物理复制(pgsql 备库的搭建以及角色互换,提升)

    结构图如下: Postgresql早在9.0版本开始支持物理复制,也称为流复制,通过从实例级复制出一个与主库一模一样的备库.流复制同步方式有同步,异步两种,如果主节点和备节点不是很忙,通常异步模式下备 ...

  3. vue项目中引入循环执行setInterval或者requestAnimationFrame的用法等

    项目中循环计时处理某些方法的情况还是比较常见的,一般会用setInterval来处理,但是这个方法会似的页面卡顿等使用体验不好. 所以就使用浏览器提供的requestAnimationFrame方法, ...

  4. __main__ 变量

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  5. Scala学习笔记(3)

    数组 ----------------------------------- 0.若长度固定则用Array,若长度可能变化则使用ArrayBuffer 1.提供初始值的时候不要使用new. 2.用() ...

  6. 4、MySQL 申明变量给查询数据编号

    摘自: https://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html https://blog.csdn.net/arbben/ar ...

  7. c# task笔记

    class Program { //创建Task任务的三种方式(无返回值) static void Main(string[] args) { //方法一 Task task1 = new Task( ...

  8. Java日志打印方法

    一.使用log4j打印日志 1. 下载log4j.jar和commons-logging.jar.     log4j.jar下载地址:http://logging.apache.org/log4j/ ...

  9. keepalived的工作原理

    keepalived的工作原理 首先简单介绍一下vrrp协议 vrrp协议 用来实现路由器冗余的协议: Vrrp协议是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使 ...

  10. mysql5.7使用gtid模式搭建主从复制架构

    一.架构 两台mysql服务器做一主一从,172.28.18.69(主) 172.28.18.78(从) 二.分别编译安装mysql5.7 1.下载mysql5.7.26源码包 [root@serve ...