⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgdowntattachment.cpp

📁 使用vc开发的个人信息管理系统
💻 CPP
字号:
// DlgDownTAttachment.cpp : implementation file
//

#include "stdafx.h"
#include "dotNET界面.h"
#include "DlgDownTAttachment.h"
#include ".\dlgdowntattachment.h"

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

/////////////////////////////////////////////////////////////////////////////
// DlgDownTAttachment dialog


DlgDownTAttachment::DlgDownTAttachment(CWnd* pParent /*=NULL*/)
	: CDialog(DlgDownTAttachment::IDD, pParent)
	, m_strSavePath(_T(""))
{
	//{{AFX_DATA_INIT(DlgDownTAttachment)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	strID="";
}


void DlgDownTAttachment::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DlgDownTAttachment)
	DDX_Control(pDX, IDC_LIST_DOWNANNEX, m_ListCtrl);
	//}}AFX_DATA_MAP
	DDX_Control(pDX, IDC_PROGRESS, pProg);
	DDX_Text(pDX, IDC_EDIT_SAVEPATH, m_strSavePath);
	DDX_Control(pDX, IDC_BUTTON_SAVEPATH, c_SavePath);
	DDX_Control(pDX, IDOK, c_IdOk);
	DDX_Control(pDX, IDC_EDIT_SAVEPATH, c_EditSavePath);
}


BEGIN_MESSAGE_MAP(DlgDownTAttachment, CDialog)
	//{{AFX_MSG_MAP(DlgDownTAttachment)
	ON_NOTIFY(NM_CLICK, IDC_LIST_DOWNANNEX, OnClickListDownannex)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON_SAVEPATH, OnBnClickedButtonSavepath)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DlgDownTAttachment message handlers

BOOL DlgDownTAttachment::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	UpdateData(true);
	SetWindowText("下载 \""+m_strDlgName+"\" 的附件");
	c_EditSavePath.EnableWindow(false);
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
	m_ListCtrl.InsertColumn(0, "编号", LVCFMT_LEFT, 52);
	m_ListCtrl.InsertColumn(1, "附件名称", LVCFMT_LEFT, 140);
	m_ListCtrl.InsertColumn(2, "附件文件名称", LVCFMT_LEFT, 150);
	CString strFileName, strAnnexName,strTAttachmentID;
	int i=0;
	_RecordsetPtr MySet;
	_variant_t Holder;
	MySet.CreateInstance(__uuidof(Recordset));
	_variant_t _strSQL("SELECT * FROM TAttachment WHERE NodeId='"+m_strNodeID+"'");
	if(!theApp.ADOExecute(MySet,_strSQL)) return false;
	while(!MySet->adoEOF){
		Holder=MySet->GetCollect("TAttachmentID");
		strTAttachmentID = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		Holder=MySet->GetCollect("TAttachmentName");
		strAnnexName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		Holder=MySet->GetCollect("FileName");
		strFileName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		m_ListCtrl.InsertItem(i,strTAttachmentID);//NodeName
		m_ListCtrl.SetItemText(i,1,strAnnexName);
		m_ListCtrl.SetItemText(i,2,strFileName);
		i++;
		MySet->MoveNext();
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void DlgDownTAttachment::OnOK() 
{
	// TODO: Add extra validation here
	if(strID==""){
		AfxMessageBox("你没有选择需要下载的附件");
		return ;
	}
	if(m_strSavePath.IsEmpty()){
		AfxMessageBox("你没有选择保存下载附件的路径");
		return ;
	}
	MSG message;
	long nStep;
	int j=0;
	CFile file;
	CFileException e;
	char * m_pBMPBuffer,*pBufWtrite;
	long m_nFileLen;
	_RecordsetPtr MySet;
	_variant_t Holder;
	MySet.CreateInstance(__uuidof(Recordset));
	//static char BASED_CODE szFilter[];
	c_IdOk.EnableWindow(false);
	c_SavePath.EnableWindow(false);
	m_ListCtrl.EnableWindow(false);
	_variant_t _strSQL("SELECT * FROM TAttachment WHERE TAttachmentID="+strID);
	if(!theApp.ADOExecute(MySet,_strSQL)) return ;
	long lDataSize = MySet->GetFields()->GetItem("Data")->ActualSize;
	if(lDataSize > 0)
	{
		_variant_t			varBLOB;
		varBLOB = MySet->GetFields()->GetItem("Data")->GetChunk(lDataSize);
		if(varBLOB.vt == (VT_ARRAY | VT_UI1))
		{
			if(m_pBMPBuffer = new char[lDataSize+1])				///重新分配必要的存储空间
			{	
				char *pBuf = NULL;
				//SafeArrayPutElement (psa, &i, pBuf++);
				SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
				
				memcpy(m_pBMPBuffer,pBuf,lDataSize);				///复制数据到缓冲区m_pBMPBuffer
				SafeArrayUnaccessData (varBLOB.parray);
				m_nFileLen = lDataSize;
			}
		}
	}
	pProg.SetRange(0,100);
	nStep=(m_nFileLen-m_nFileLen%100)/100;
	pBufWtrite=new char[nStep];
	CString strFilePathName=m_strSavePath+strFilterName;
	if( !file.Open( strFilePathName, CFile::modeCreate|CFile::modeWrite)){
		AfxMessageBox("没有打开文件");
		#ifdef _DEBUG
			afxDump << "File could not be opened " << e.m_cause << "\n";
		#endif
		return ;
	}
	try{
		int i=0,n;
		for(i=0;i<101;i++){
			//file.Write(m_pBMPBuffer++,1);
			n=0;
			if(i!=100){
				for(long j=i*nStep;j<(i+1)*nStep;j++){
					pBufWtrite[n]=m_pBMPBuffer[j];
					//pBuf++;
					n++;
				}
				file.Write(pBufWtrite,nStep);
			}else{
				for(long j=i*nStep;j<m_nFileLen;j++){
					pBufWtrite[n]=m_pBMPBuffer[j];
					n++;
				}
				file.Write(pBufWtrite,m_nFileLen-i*nStep);
			}
			memset(pBufWtrite,0,sizeof(char));
			pProg.SetPos(i+1);
			UpdateData(false);
			if(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}
		}
		pProg.SetPos(0);
		c_IdOk.EnableWindow(true);
		c_SavePath.EnableWindow(true);
		m_ListCtrl.EnableWindow(true);
		m_strSavePath.Empty();
		UpdateData(FALSE);
	}catch(...){
		AfxMessageBox("写入文件错误");
	}
	if(m_pBMPBuffer)
	{
		//delete m_pBMPBuffer;
		m_pBMPBuffer = NULL;
	}
	if(adStateOpen==MySet->State)	MySet->Close();
	MySet.Release();
	//CDialog::OnOK();
}

void DlgDownTAttachment::OnClickListDownannex(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos =m_ListCtrl.GetFirstSelectedItemPosition();
	int iItem =m_ListCtrl.GetNextSelectedItem(pos);
	strID=m_ListCtrl.GetItemText(iItem, 0);
	strFileName=m_ListCtrl.GetItemText(iItem, 2);
	*pResult = 0;
}

void DlgDownTAttachment::OnBnClickedButtonSavepath()
{
	// TODO: 在此添加控件通知处理程序代码
	if(strID==""){
		AfxMessageBox("你没有选择需要下载的附件");
		return ;
	}
	UpdateData(TRUE);
	CString szFilter;
	CString ExtendName=strFileName.Mid(strFileName.GetLength()-3,3);
	ExtendName.MakeLower();
	if(ExtendName=="zip"){
		szFilter ="TAttachment Files (*.zip)|*.zip|";
		strFilterName=".zip";
	}else{
		szFilter ="TAttachment Files (*.rar)|*.rar|";
		strFilterName=".rar";
	}
	CFileDialog dlg(false,NULL,NULL,NULL,szFilter);
	if(dlg.DoModal()==IDCANCEL){
		return ;
	}
	m_strSavePath=dlg.GetPathName();
	UpdateData(FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -