基本信息
源码名称:c++ 二维码 示例源码下载
源码大小:0.34M
文件格式:.rar
开发语言:C/C++
更新时间:2018-01-04
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
//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); }