在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Windows系统编程 → c++ 二维码 示例源码下载

c++ 二维码 示例源码下载

Windows系统编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.34M
  • 下载次数:73
  • 浏览次数:654
  • 发布时间:2018-01-04
  • 实例类别:Windows系统编程
  • 发 布 人:yifanmoon
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 二维码

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

//Download by http://www.NewXing.com
// BarCodeDlg.cpp : implementation file
//

#include "stdafx.h"
#include "BarCode.h"
#include "BarCodeDlg.h"
#include "DlgComm.h"
#include "DlgConfig.h"
#include "DlgQrCfg.h"
#include "DlgDmCfg.h"
#include "mmsystem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CAboutDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	SetWindowText(MSG_ABOUT_CAPTION);
	SetDlgItemText(IDC_STATIC_VERSION,MSG_ABOUT_VER);
	SetDlgItemText(IDC_STATIC_COPYRIGHT,MSG_ABOUT_COPYRIGHT);
	SetDlgItemText(IDC_STATIC_CONNECTION,MSG_ABOUT_CONNECTION);
	SetDlgItemText(IDOK,MSG_BTN_ACCEPT);
		
	return TRUE;  
}

/////////////////////////////////////////////////////////////////////////////
// CBarCodeDlg dialog

CBarCodeDlg::CBarCodeDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBarCodeDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBarCodeDlg)
	m_strTxtFileName = _T("");
	m_strConFileName = _T("");
	m_strInfo = _T("");
	m_strByteCount = _T("");
	m_strLong = _T("");
	m_strBmpFileName = _T("");
	m_iBarType=0;
	m_bConnect=FALSE;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CBarCodeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBarCodeDlg)
	DDX_Control(pDX, IDC_BMP_BarCode, m_ctrlBarCode);
	DDX_Text(pDX, IDC_EDIT_TxtFileName, m_strTxtFileName);
	DDX_Text(pDX, IDC_EDIT_ConFileName, m_strConFileName);
	DDX_Text(pDX, IDC_EDIT_Info, m_strInfo);
	DDX_Text(pDX, IDC_STATIC_Bytes, m_strByteCount);
	DDX_Text(pDX, IDC_STATIC_Long, m_strLong);
	DDX_Text(pDX, IDC_EDIT_BmpFileName, m_strBmpFileName);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CBarCodeDlg, CDialog)
	//{{AFX_MSG_MAP(CBarCodeDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BTN_TxtFileName, OnBTNTxtFileName)
	ON_BN_CLICKED(IDC_BTN_ConFileName, OnBTNConFileName)
	ON_BN_CLICKED(IDC_BTN_SetConfig, OnBTNSetConfig)
	ON_BN_CLICKED(IDC_BTN_Create, OnBTNCreate)	
	ON_BN_CLICKED(IDC_BTN_OpenCOMM, OnBTNOpenCOMM)
	ON_BN_CLICKED(IDC_BTN_Exit, OnBTNExit)
	ON_BN_CLICKED(IDC_BTN_SetCOMM, OnBTNSetCOMM)
	ON_BN_CLICKED(IDC_BTN_Print, OnBTNPrint)
	ON_WM_KEYDOWN()
	ON_BN_CLICKED(IDC_BTN_BmpFileName, OnBTNBmpFileName)
	ON_BN_CLICKED(IDC_BTN_Copy, OnBTNCopy)
	ON_CBN_SELCHANGE(IDC_CB_BarType, OnSelchangeCBBarType)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBarCodeDlg message handlers

BOOL CBarCodeDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	//设置
	SetWindowText(MSG_DLG_TOPIC);
	SetDlgItemText(IDC_GROUP_SETTING,MAG_SET_TOPIC);
	SetDlgItemText(IDC_STATIC_BARTYPE,MAG_SET_BARTYPE);
	((CComboBox*)GetDlgItem(IDC_CB_BarType))->AddString(MSG_SET_PDF);
	((CComboBox*)GetDlgItem(IDC_CB_BarType))->AddString(MSG_SET_QR);
	((CComboBox*)GetDlgItem(IDC_CB_BarType))->AddString(MSG_SET_DM);
	
	SetDlgItemText(IDC_GROUP_INFO,MSG_INFO_TOPIC);
	SetDlgItemText(IDC_STATIC_TxtFileName,MSG_INFO_TXTFILE);
	SetDlgItemText(IDC_STATIC_IMGFILE,MSG_INFO_IMGFILE);
	SetDlgItemText(IDC_STATIC_PARAM,MSG_INFO_INIFILE);
	SetDlgItemText(IDC_STATIC_CAPACITY,MSG_INFO_CAPACITY);
	SetDlgItemText(IDC_STATIC_TIME,MSG_INFO_TAKETIME);
	SetDlgItemText(IDC_STATIC_BYTE,MSG_INFO_BYTE);
	SetDlgItemText(IDC_STATIC_SECOND,MSG_INFO_SECOND);

	SetDlgItemText(IDC_GROUP_OPERATE,MSG_OPER_TOPIC);
	SetDlgItemText(IDC_BTN_SetConfig,MSG_OPER_SETPARAM);
	SetDlgItemText(IDC_BTN_SetCOMM,MSG_OPER_SETCOMM);
	SetDlgItemText(IDC_BTN_Create,MSG_OPER_ENCODE);
	SetDlgItemText(IDC_BTN_Print,MSG_OPER_PRINT);
	SetDlgItemText(IDC_BTN_Copy,MSG_OPER_COPY);
	SetDlgItemText(IDC_BTN_OpenCOMM,MSG_OPER_OPENCOMM);
	SetDlgItemText(IDC_BTN_Exit,MSG_OPER_EXIT);
	
	//初始化
	((CComboBox*)GetDlgItem(IDC_CB_BarType))->SetCurSel(0);

	OnSelchangeCBBarType();
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CBarCodeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CBarCodeDlg::OnPaint() 
{
	CPaintDC dc(this); 
	
	if (IsIconic())
	{
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon   1) / 2;
		int y = (rect.Height() - cyIcon   1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
	ShowBmp(&dc);
}

HCURSOR CBarCodeDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

//---------------------------------------
//改变条码类型选择
void CBarCodeDlg::OnSelchangeCBBarType() 
{
	m_iBarType=((CComboBox*)GetDlgItem(IDC_CB_BarType))->GetCurSel();
	switch( m_iBarType )
	{
	case 0:
		SetWindowText( MSG_SET_PDF );
		break;
	case 1:
		SetWindowText( MSG_SET_QR );
		break;
	case 2:
		SetWindowText( MSG_SET_DM );
		break;
	default:
		break;
	}
}
/*-----------------------------------------------------------*/
//打开源文件
void CBarCodeDlg::OnBTNTxtFileName() 
{
	byte* pReadData=NULL;
	int	iReadLen=0;
	FILE* fp=NULL;
	
	CString strFilter= "TXT Files(*.txt)|*.txt|All Files(*.*)|*.*||";
	CString	strCon="(TXT file)*.txt";
 	CFileDialog fDlg(TRUE,strCon,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
	if(fDlg.DoModal()==IDOK)
	{
		m_strTxtFileName=fDlg.GetPathName();

		//读取编码信息文件
		fp=fopen( m_strTxtFileName,"rb" );
		if( fp )
		{
			fseek( fp,0,SEEK_END );
			iReadLen=ftell(fp);
			fseek( fp,0,SEEK_SET );
			pReadData=(BYTE *)malloc(iReadLen 1);
			fread( pReadData,1,iReadLen,fp );
			pReadData[iReadLen]=0;
			m_strInfo.Format( "%s",pReadData );
			m_strByteCount.Format( "%d",iReadLen );
			delete pReadData;
		}
		fclose( fp );
		
		UpdateData( FALSE );
	}
}
/*-----------------------------------------------------------*/
//设置图形文件
void CBarCodeDlg::OnBTNBmpFileName() 
{
	CString	strCon;
	CString strFilter;

	strFilter= "Bitmap Files(*.bmp)|*.bmp|All Files(*.*)|*.*||";
	strCon="(Bitmap file)*.bmp";
 	CFileDialog fDlg(TRUE,strCon,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
	if(fDlg.DoModal()==IDOK)	
		m_strBmpFileName=fDlg.GetPathName(); 
	else
		return ;

	//显示位图
	UpdateData( FALSE );
	if( m_strBmpFileName.GetLength() > 0 ) 
	{
		HBITMAP bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
			m_strBmpFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
		if( bitmap )
		{
			ASSERT(bitmap);	
			m_ctrlBarCode.SetBitmap(bitmap);
		}
		Invalidate();
	}
	else
	{
		AfxMessageBox( MSG_ERROR_ENCODE );
	}
}
/*-----------------------------------------------------------*/
//设置参数文件
void CBarCodeDlg::OnBTNConFileName() 
{
	CString	strCon;
	CString strFilter;

	strFilter= "INI Files(*.ini)|*.ini|All Files(*.*)|*.*||";
	strCon="(INI file)*.ini";
 	CFileDialog fDlg(TRUE,strCon,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,strFilter,this);
	if(fDlg.DoModal()==IDOK)	
		m_strConFileName=fDlg.GetPathName(); 
	UpdateData( FALSE );
}
/*-----------------------------------------------------------*/
//参数设置按钮
void CBarCodeDlg::OnBTNSetConfig() 
{
	if( m_strConFileName.IsEmpty() )
	{
		AfxMessageBox(MSG_ERROR_SETPARAM);
		return;
	}

	//分类设置
	if( m_iBarType==0) 
	{
		CDlgConfig	dlg;
		dlg.m_strProfile=m_strConFileName;
		dlg.DoModal();
	}
	else if( m_iBarType==1 )
	{
		CDlgQrCfg dlgQr;
		dlgQr.m_strProfile=m_strConFileName;
		dlgQr.DoModal();
	}
	else if( m_iBarType==2 )
	{
		CDlgDmCfg dlgDm;
		dlgDm.m_strProfile=m_strConFileName;
		dlgDm.DoModal();
	}

}
/*-----------------------------------------------------------*/
//生成条码图像
void CBarCodeDlg::OnBTNCreate() 
{
	EnCoding();
}
/*-----------------------------------------------------------*/
//生成条码图像
void CBarCodeDlg::EnCoding() 
{
	int	iLen=0;
	int imgLen=0;
	DWORD dFirstTime;
	BSTR barname;	
	char TxtFileName[]="temp.txt";
	char ImgFileName[]="temp.img";
	char BmpFileName[]="temp.bmp";
	char tstr[100],fname[100],ss[100];
	FILE* fp;
	
	UpdateData( TRUE );
	if( m_strConFileName.GetLength()>0 &&
		(m_strInfo.GetLength()>0||m_strBmpFileName.GetLength()>0 ))
	{	//编码操作		
		fp=fopen(ImgFileName,"wb");	//将源文件清空
		fclose( fp );
		if(m_strBmpFileName.GetLength()>0)//图形压缩
		{
			sprintf( ss,"%s",m_strBmpFileName.GetBuffer(256) );
			SizeDIB( ImgFileName,100,100 );	//调整图像
			if( Wcompress( ss,ImgFileName,700)!=0 )	//图像压缩
				AfxMessageBox( MSG_ERROR_COMPRESS );
		}

		//取信息长度		
		fp=fopen( ImgFileName,"rb");
		if(fp)
		{
			fseek( fp,0,SEEK_END );
			imgLen=ftell( fp );
			fclose( fp );
		}
		m_strByteCount.Format( "%d",m_strInfo.GetLength() imgLen ); 

		//文本数据源
		iLen=m_strInfo.GetLength();	
		fp=fopen( TxtFileName,"wb" );	//将内容保存至临时文件
		fwrite( m_strInfo.GetBuffer(iLen),1,iLen,fp );
		fclose( fp );

		//生成条码
		dFirstTime=timeGetTime();
		switch( m_iBarType ) {
		case 0:
			SetPdfConFile( m_strConFileName );	
			if( imgLen<1 )
				barname=EnPdfText( m_strInfo );	//文本生成条码
			else
				barname=MakePdf417( TxtFileName,ImgFileName,"" );//生成条码
			break;
		case 1:
			SetQrConFile( m_strConFileName );
			if( imgLen<1 )
				barname=EnQrText( m_strInfo );
			else
				barname=MakeQrCode( TxtFileName,ImgFileName,"" );
			break;
		case 2:
			SetDmConFile(m_strConFileName);
			if( imgLen<1 )
				barname=EnDmText( m_strInfo );
			else
				barname=MakeDataMatrix( TxtFileName,ImgFileName,"" );
			break;
		default:
			break;
		}
		
		m_strLong.Format( "%f",timeGetTime()-dFirstTime );	

		//显示位图
		UpdateData( FALSE );
		sprintf( tstr,"%s",barname );
		if( strcmp( tstr,"(null)")>0 ) 
		{
			if( strstr(tstr,":")>0 )
			{
				sprintf( fname,"%s",tstr );	
			}
			else
			{	
				GetCurrentDirectory(100,ss);
				sprintf( fname,"%s\\%s",ss,tstr );	
			}
			HBITMAP bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
				fname,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
			if( bitmap )
			{
				ASSERT(bitmap);	
				m_ctrlBarCode.SetBitmap(bitmap);
				((CButton*)GetDlgItem(IDC_BTN_Print))->EnableWindow(TRUE);
				((CButton*)GetDlgItem(IDC_BTN_Copy))->EnableWindow(TRUE);
			}
			Invalidate(); 
		}
		else
		{
			((CButton*)GetDlgItem(IDC_BTN_Print))->EnableWindow(FALSE);
			((CButton*)GetDlgItem(IDC_BTN_Copy))->EnableWindow(FALSE);				
			AfxMessageBox( MSG_ERROR_BITMAP );
		}
	}
}
/*-----------------------------------------------------------*/
//显示图形
void CBarCodeDlg::ShowBmp(CDC *pDC)
{	
	HBITMAP hBitmap = m_ctrlBarCode.GetBitmap();		//得到位图句柄
	HDC hMemDC=::CreateCompatibleDC(pDC->m_hDC);		//建立内存句柄

	HBITMAP hBitmapOld;
	hBitmapOld = (HBITMAP)SelectObject(hMemDC,hBitmap);//选择位图到内存

	//计算位图的尺寸
	CRect rc;
	m_ctrlBarCode.GetWindowRect(&rc);
	ScreenToClient(&rc);
	CSize szBitmap(rc.Width(),rc.Height());

	//打印位图
	CDC memDC;
	memDC.Attach(hMemDC);
	pDC->StretchBlt(rc.left,rc.top,szBitmap.cx,
		szBitmap.cy,&memDC,0,0,szBitmap.cx,
		szBitmap.cy,SRCCOPY);	
	::SelectObject(hMemDC,hBitmapOld);		//删除位图	
}
/*-----------------------------------------------------------*/
//打开关闭串口
void CBarCodeDlg::OnBTNOpenCOMM() 
{
	if (!m_bConnect)
	{	//打开串口
		SetPdfConFile( m_strConFileName );
		if(InitRead(m_hWnd,"C:\\")==1)	//调用打开操作
		{
			m_bConnect=TRUE;
			SetDlgItemText( IDC_BTN_OpenCOMM,MSG_OPER_CLOSECOMM );
			((CButton*)GetDlgItem(IDC_BTN_SetCOMM))->EnableWindow(FALSE);
		}
	}
	else
	{	//关闭串口
		if( CloseRead()==1 )	//调用关闭操作
		{
			m_bConnect=FALSE;
			SetDlgItemText( IDC_BTN_OpenCOMM,MSG_OPER_OPENCOMM );
			((CButton*)GetDlgItem(IDC_BTN_SetCOMM))->EnableWindow(TRUE);
		}
	}	
}
/*-----------------------------------------------------------*/
//退出操作
void CBarCodeDlg::OnBTNExit() 
{
	OnOK();	
}
/*-----------------------------------------------------------*/
//设置串口
void CBarCodeDlg::OnBTNSetCOMM() 
{
	CDlgComm	dlg;
	if( !m_strConFileName.IsEmpty() )
	{
		dlg.m_strProfile=m_strConFileName;
		dlg.DoModal();
	}
	else
	{
		AfxMessageBox( MSG_ERROR_SETPARAM );
	}
}
/*-----------------------------------------------------------*/
//打印处理
void CBarCodeDlg::OnBTNPrint() 
{
	CPrintDialog  pdlg(FALSE);	//打印对话框	
	if (pdlg.DoModal() != IDOK)	//取消打印
		return;
	HDC hPrintDC = pdlg.GetPrinterDC();	//得到打印设备句柄
	CDC printerDC;						//构造打印设备对象
	printerDC.Attach(hPrintDC);			//对象与句柄相关联
	printerDC.SetMapMode(MM_ANISOTROPIC);	
	printerDC.m_bPrinting = TRUE;		
	HBITMAP hBitmap = m_ctrlBarCode.GetBitmap();		//得到位图句柄
	HDC hMemDC=::CreateCompatibleDC(hPrintDC);	//建立内存句柄
	HBITMAP hBitmapOld;
	hBitmapOld = (HBITMAP)SelectObject(hMemDC,hBitmap);//选择位图到内存

	//构造文档信息
	DOCINFO docinfo;
	::ZeroMemory(&docinfo,sizeof(DOCINFO));
	docinfo.cbSize = sizeof(DOCINFO);
	docinfo.lpszDocName = "pdfcode";
	
	//开始打印作业
	printerDC.StartDoc(&docinfo);
	printerDC.StartPage();
	
	//计算放大因子
	double dScaleX,dScaleY;
	int nScreenPixelXPerInch,nScreenPixelYPerInch;
	int nPrinterPixelXPerInch,nPrinterPixelYPerInch;

	CClientDC dc(this);
	//得到屏幕每英寸点数
	nScreenPixelXPerInch = dc.GetDeviceCaps(LOGPIXELSX);
	nScreenPixelYPerInch = dc.GetDeviceCaps(LOGPIXELSY);
	//得到打印机每英寸点数
	nPrinterPixelXPerInch = GetDeviceCaps(hPrintDC,LOGPIXELSX);
	nPrinterPixelYPerInch = GetDeviceCaps(hPrintDC,LOGPIXELSY);
	//得到比例因子
	dScaleX = (double)nPrinterPixelXPerInch / (double)nScreenPixelXPerInch;
	dScaleY = (double)nPrinterPixelYPerInch / (double)nScreenPixelYPerInch;

	//计算位图的尺寸
	CRect rc;
	m_ctrlBarCode.GetWindowRect(&rc);
	CSize szBitmap(rc.Width(),rc.Height());

	//打印位图
	::StretchBlt(hPrintDC,0,0,int(szBitmap.cx*dScaleX),
		int(szBitmap.cy*dScaleY),hMemDC,0,0,szBitmap.cx,
		szBitmap.cy,SRCCOPY);
	
	//结束打印作业
	printerDC.EndPage();
	printerDC.EndDoc();	
}
/*-----------------------------------------------------------*/
//KEYDOWN 消息处理
void CBarCodeDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if( nChar=255 )
	{
		ShowPdfInfo();
	}		
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
/*-----------------------------------------------------------*/
//关闭主窗体
BOOL CBarCodeDlg::DestroyWindow() 
{
	CloseRead();
	return CDialog::DestroyWindow();
}
/*-----------------------------------------------------------*/
//显示条码信息
void CBarCodeDlg::ShowPdfInfo()
{
	FILE* fp;
	BYTE* pReadData;
	char TxtFileName[]="c:\\temp.txt";
	char ImgFileName[]="c:\\temp.img";
	char BmpFileName[]="c:\\temp.bmp";	
	int	  iLen=0;

	//文本读取
	m_strInfo="";
	fp=fopen( TxtFileName,"rb" );
	if( fp )
	{			
		fseek( fp,0,SEEK_END );
		iLen=ftell(fp);
		fseek( fp,0,SEEK_SET );
		pReadData=(BYTE *)malloc(iLen 1);
		fread( pReadData,1,iLen,fp );
		pReadData[iLen]=0;
		m_strInfo.Format( "%s",pReadData );				
		delete pReadData;
		fclose( fp );
		UpdateData( FALSE );
	}
	//图形解压
	iLen=0;
	fp=fopen( ImgFileName,"rb" );
	if( fp>0 )
	{
		fseek( fp,0,SEEK_END );
		iLen=ftell( fp );
		fclose( fp );
	}
	if( iLen<10 )	return;
	if( Wdecompress(ImgFileName,BmpFileName )==0 )
	{
		HBITMAP bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
			BmpFileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
		if( bitmap )
		{
			ASSERT(bitmap);	
			m_ctrlBarCode.SetBitmap(bitmap);
		}
		Invalidate();		
	}	
	UpdateData( FALSE );
}
//---------------------------------------
//将位图拷贝至粘贴板上
void CBarCodeDlg::CopyBitmapToClipBoard( LPCSTR lpBmpName )
{
	FILE* fp;		
	BITMAPFILEHEADER	bmpfheader;	//位图头结构
	BITMAPINFOHEADER	bmpiheader;	//位图信息结构
	byte*	lpBits;
	int		nLen;
	HGLOBAL clipbuffer; 
	char*	lpbuf;

	memset( &bmpfheader,0,sizeof(BITMAPFILEHEADER) );
	memset( &bmpiheader,0,sizeof(BITMAPINFOHEADER) );
	fp=fopen( lpBmpName,"rb" );
	fread( &bmpfheader,sizeof(BITMAPFILEHEADER),1,fp );
	fread( &bmpiheader,sizeof(BITMAPINFOHEADER),1,fp );
	nLen=bmpfheader.bfSize - sizeof(BITMAPFILEHEADER) ;
	lpBits=(byte*)malloc( nLen 1 );
	fseek( fp,sizeof(BITMAPFILEHEADER),SEEK_SET );
	fread( lpBits,1,nLen,fp );
	fclose( fp );
	
	if ( OpenClipboard() )
	{	
		EmptyClipboard();    //清空剪贴板
		clipbuffer = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, nLen 1 ); 
		lpbuf = (LPSTR)GlobalLock(clipbuffer);  //锁定申请到的内存 
		memcpy( lpbuf,lpBits,nLen );
        GlobalUnlock(clipbuffer);				 //解锁内存          
		SetClipboardData( CF_DIB, clipbuffer );
		CloseClipboard();
		//delete lpbuf;
	}
	delete lpBits;
}
//---------------------------------------
//拷贝位图
void CBarCodeDlg::CopyViewToClipBoard()
{
	CBitmap 	bitmap;
	CClientDC	dc(&m_ctrlBarCode);
	CDC 		memDC;
	CRect		rect;
	
	memDC.CreateCompatibleDC(&dc); 
	m_ctrlBarCode.GetWindowRect(rect);
	
	HBITMAP hBitmap = m_ctrlBarCode.GetBitmap();		//得到位图句柄
	bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() );
	bitmap.FromHandle( hBitmap ); 
	CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
	memDC.BitBlt(0, 0, rect.Width(),rect.Height(),&dc,0,0, SRCCOPY); 

	OpenClipboard() ;
	EmptyClipboard() ;
	SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ;
	CloseClipboard () ;

	memDC.SelectObject(pOldBitmap);
	bitmap.Detach();
	
}
//---------------------------------------
//拷贝
void CBarCodeDlg::OnBTNCopy() 
{
	CopyViewToClipBoard();	
	((CButton*)GetDlgItem(IDC_BTN_Copy))->EnableWindow(FALSE);
				
}

标签: 二维码

实例下载地址

c++ 二维码 示例源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 好例子_罗 发表于: 2019-06-04 15:32 46
不行,没有实现,编译都通不过

支持(0) 盖楼(回复)

第 2 楼 对过温柔的眼神 发表于: 2022-07-16 21:04 27
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "wchar_t * __stdcall EnPdfText(char const *,char const *)" (?EnPdfText@@YGPA_WPBD0@Z),函数 "private: void __thiscall CBarCodeDlg::EnCoding(void)" (?EnCoding@CBarCodeDlg@@AAEXXZ) 中引用了该符号 BarCode D:\project\xiaozhang(sw)\tool_display\参考资料\好例子网_二维码\二维码c++\BarCodeDlg.obj 1

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有2条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警