实例介绍
【实例截图】
【核心代码】
//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);
}
标签: 二维码
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)