📄 dlgdowntattachment.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 + -