?? transfiledlg.cpp
字號:
// TransFileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "QTS_QQ.h"
#include "TransFileDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTransFileDlg dialog
CTransFileDlg::CTransFileDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTransFileDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTransFileDlg)
m_filename = _T("");
m_percent = _T("");
m_status = _T("");
//}}AFX_DATA_INIT
}
void CTransFileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTransFileDlg)
DDX_Control(pDX, IDCANCEL, m_cancel);
DDX_Control(pDX, IDC_SEND, m_send);
DDX_Control(pDX, IDC_PROGRESS_FILE, m_progress);
DDX_Control(pDX, IDC_OPENFILE, m_openfile);
DDX_Text(pDX, IDC_STATIC_FILENAME, m_filename);
DDX_Text(pDX, IDC_STATIC_PERCENT, m_percent);
DDX_Text(pDX, IDC_STATUS, m_status);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTransFileDlg, CDialog)
//{{AFX_MSG_MAP(CTransFileDlg)
ON_BN_CLICKED(IDC_OPENFILE, OnOpenfile)
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTransFileDlg message handlers
BOOL CTransFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
SetTimer(1000,1,NULL);
percent=0;
iftrans=false;
if(ifsend)
{
m_openfile.SetWindowText("打開文件");
m_send.SetWindowText("發 送");
m_send.EnableWindow(FALSE);
}
else
{
m_openfile.SetWindowText("保存文件");
m_send.SetWindowText("接 收");
m_send.EnableWindow(FALSE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CTransFileDlg::OnCancel()
{
// TODO: Add extra cleanup here
char str0=char(0);
char waste[100];
if(ifsend)
Serial->SendData(&str0,1);
else
Serial->SendData(&str0,1);
Serial->ReadData(waste,Serial->ReadDataWaiting()); //clear buffer
CDialog::OnCancel();
}
void CTransFileDlg::OnOpenfile()
{
// TODO: Add your control notification handler code here
if(ifsend)
{
CFileDialog openFileDlg(TRUE);
if(openFileDlg.DoModal()==IDOK)
{
filename=openFileDlg.GetPathName();
m_filename=openFileDlg.GetFileName();
file.Open(openFileDlg.GetPathName(),CFile::modeRead);
m_status="文件已打開";
}
}
else
{
CFileDialog saveFileDlg(FALSE,m_filename);
if( saveFileDlg.DoModal()==IDOK )
{
filename = saveFileDlg.GetPathName();
file.Open(filename,CFile::modeCreate | CFile::modeWrite);
m_status="文件已選擇";
m_filename=saveFileDlg.GetFileName();
}
}
UpdateData(FALSE);
m_send.EnableWindow(TRUE);
}
void CTransFileDlg::OnSend()
{
// TODO: Add your control notification handler code here
char str1=char(1);
if(ifsend)
{
Serial->SendData(&str1,1); //send request
Serial->SendData(m_filename.GetBuffer(1000),m_filename.GetLength()); //send filename
m_status="等待回應...";
UpdateData(FALSE);
iftrans=true;
}
else
{
if(Serial->ReadDataWaiting()!=0)
{
AfxMessageBox("文件傳送請求已被取消。");
return;
}
Serial->SendData(&str1,1);
m_status="正在接收文件...";
m_cancel.EnableWindow(FALSE);
UpdateStatus();
while(Serial->ReadDataWaiting()<4)
;
Serial->ReadData(&length,4);
remain=length;
iftrans=true;
}
}
void CTransFileDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
unsigned long i;
char data[1000];
char str1=char(1);
if(iftrans==false)
{
UpdateStatus();
CDialog::OnTimer(nIDEvent);
return;
}
if(ifsend)
{
if(Serial->ReadDataWaiting()!=0)
if(Serial->GetByte()==1) //begin to send file
{
m_status="正在傳送文件...";
length=file.GetLength();
Serial->SendData((char*)(&length),4);
for(i=0;i<file.GetLength()/1000;i++)
{
file.Read(data,1000);
Serial->SendData(data,1000);
percent=file.GetPosition()*100/file.GetLength();
UpdateStatus();
while(Serial->ReadDataWaiting()==0)
;
Serial->GetByte();
}
i=file.GetLength()%1000;
file.Read(data,i);
Serial->SendData(data,i);
percent=100;
UpdateStatus();
m_status="文件傳送完成";
iftrans=false;
}
else
{
m_status="請求被拒絕";
UpdateData(FALSE);
}
}
else
{
if(remain<1000)
{
if(Serial->ReadDataWaiting()==remain)
{
Serial->ReadData(data,remain);
file.Write(data,remain);
remain-=remain;
percent=(length-remain)*100/length;
UpdateStatus();
}
}
else
{
if(Serial->ReadDataWaiting()==1000)
{
Serial->ReadData(data,1000);
file.Write(data,1000);
Serial->SendData(&str1,1);
remain-=1000;
percent=(length-remain)*100/length;
UpdateStatus();
}
}
if(remain==0)
{
m_status="接收完畢";
percent=100;
m_cancel.EnableWindow();
iftrans=false;
UpdateStatus();
}
}
UpdateStatus();
CDialog::OnTimer(nIDEvent);
}
void CTransFileDlg::UpdateStatus(void)
{
m_progress.SetPos(percent);
m_percent.Format("%d",percent);
m_percent+="%";
UpdateData(FALSE);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -