workview.cpp
来自「这是主要完成文件上传功能,对要写ftp程序者是一个好的参考源码」· C++ 代码 · 共 310 行
CPP
310 行
// WorkView.cpp : implementation file
//
#include "stdafx.h"
#include "EasyFtp.h"
#include "WorkView.h"
#include "LocalView.h"
#include "WebView.h"
#include "MessageView.h"
#include "mainfrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CMainFrame *pMainFrame;
extern CMessageView *pMessageView;
extern CLocalView *pLocalView;
extern CWebView *pWebView;
CWorkView *pWorkView;
extern CString csWebPath;
LV_ITEM lviWork;
extern bool bAutoLoad;
extern BOOL bCmpTime;
CWinThread *MyWorkListThread;
UINT MyWorkListThreadFunction(LPVOID lpParam);
/////////////////////////////////////////////////////////////////////////////
// CWorkView
IMPLEMENT_DYNCREATE(CWorkView, CFormView)
CWorkView::CWorkView()
: CFormView(CWorkView::IDD)
{
//{{AFX_DATA_INIT(CWorkView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
MyWorkListThread=NULL;
pWorkView=this;
}
CWorkView::~CWorkView()
{
pWorkView=NULL;
}
void CWorkView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWorkView)
DDX_Control(pDX, IDC_WORKLIST, m_WorkList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWorkView, CFormView)
//{{AFX_MSG_MAP(CWorkView)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_WORKLIST, OnDblclkWorklist)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MY_WORK_LISTNEW,OnListNew)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWorkView diagnostics
#ifdef _DEBUG
void CWorkView::AssertValid() const
{
CFormView::AssertValid();
}
void CWorkView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CWorkView message handlers
void CWorkView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
RECT rct;
GetClientRect(&rct); //得到客户区域大小
if(m_WorkList.m_hWnd)
{
m_WorkList.ShowWindow(SW_HIDE);
m_WorkList.SetWindowPos(this,0,0,rct.right,rct.bottom,SWP_NOZORDER|SWP_NOMOVE);
m_WorkList.ShowWindow(SW_SHOW);
} //初始化大小
//******************
//填写列表名
static struct
{
LPSTR pszText;
int uiFormat;
}columns[]={
_T("文件名称"),LVCFMT_LEFT,
_T("文件日期"),LVCFMT_CENTER,
_T("文件大小"),LVCFMT_RIGHT,
_T("文件目录"),LVCFMT_LEFT,
_T("状态"),LVCFMT_CENTER,
_T("进度"),LVCFMT_CENTER,
_T("索引"),LVCFMT_CENTER
};
int j;
for(int i=0;i<sizeof(columns)/sizeof(columns[0]);i++)
{
switch(i)
{
case 0:
j=100;
break;
case 1:
j=100;
break;
case 2:
j=60;
break;
case 3:
j=60;
break;
case 4:
j=50;
break;
case 5:
j=50;
break;
default:
j=50;
break;
}
m_WorkList.InsertColumn(i,columns[i].pszText,columns[i].uiFormat,j);
}
m_WorkList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//画出框格
}
void CWorkView::OnSize(UINT nType, int cx, int cy)
{
//CFormView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(m_WorkList.m_hWnd)
{
m_WorkList.ShowWindow(SW_HIDE);
m_WorkList.SetWindowPos(this,0,0,cx,cy,SWP_NOZORDER|SWP_NOMOVE);
m_WorkList.ShowWindow(SW_SHOW);
} //调整大小
}
void CWorkView::OnListNew(WPARAM wParam, LPARAM lParam)
{
pMessageView->PostMessage(WM_MY_MESSAGE_UPDATE,0,(LPARAM)(LPCTSTR)"正在比较文件列表...");
if((MyWorkListThread = AfxBeginThread(MyWorkListThreadFunction,this)) == NULL)
{
//建立失败处理
return;
}
else //函数会建立一个辅助线程并暂时将其挂起。
{
MyWorkListThread->SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL);
MyWorkListThread->ResumeThread();//调用CWinThread:: ResumeThread使线程开始运行
}
}
UINT MyWorkListThreadFunction(LPVOID lpParam)//char *cPath, char *cBasePath)
{
if(pWorkView->m_WorkList.GetItemCount()>0)
{
pWorkView->m_WorkList.DeleteAllItems();
}
bool bFind=false;
int iOK=0;
int i,j,iRec;
int iLocalTotal,iWebTotal;
char temp1[3][256],temp2[3][256],temp[256];
iLocalTotal=pLocalView->m_LocalList.GetItemCount();
iWebTotal=pWebView->m_WebList.GetItemCount();
for(i=0;i<iLocalTotal;i++)
{
strcpy(temp1[0],pLocalView->m_LocalList.GetItemText(i,3));
strcat(temp1[0],pLocalView->m_LocalList.GetItemText(i,0));
//文件全名
strcpy(temp,strlwr(temp1[0]));
strcpy(temp1[0],temp);
//强制小写
//pMessageView->PostMessage(WM_MY_MESSAGE_UPDATE,0,(LPARAM)(LPCTSTR)"\r\n比较文件");
//pMessageView->PostMessage(WM_MY_MESSAGE_UPDATE,0,(LPARAM)(LPCTSTR)temp1[0]);
strcpy(temp1[1],pLocalView->m_LocalList.GetItemText(i,1));
//文件时间
strcpy(temp1[2],pLocalView->m_LocalList.GetItemText(i,2));
//文件大小
for(j=0;j<iWebTotal;j++)
{
bFind=false;
iOK=0;
strcpy(temp2[0],pWebView->m_WebList.GetItemText(j,3));
strcat(temp2[0],pWebView->m_WebList.GetItemText(j,0));
//文件全名
strcpy(temp,strlwr(temp2[0]));
strcpy(temp2[0],temp);
//强制小写
if(strcmp(temp1[0],temp2[0])==0)
{
iRec=j;
pWebView->m_WebList.SetItemText(j,4,"OK");
bFind=true;
if(bCmpTime)
{
strcpy(temp2[1],pWebView->m_WebList.GetItemText(j,1));
//文件时间
if(strcmp(temp1[1],temp2[1])>0)
{
iOK+=1;
pWebView->m_WebList.SetItemText(j,4,"过时");
}
}
strcpy(temp2[2],pWebView->m_WebList.GetItemText(j,2));
//文件大小
if(strcmp(temp1[2],temp2[2])!=0)
{
iOK+=8;
pWebView->m_WebList.SetItemText(j,4,"不同");
}
break;
}
}
if(!bFind)
{
pLocalView->m_LocalList.SetItemText(i,4,"新");
}
else
{
switch(iOK)
{
case 0: //一样
pLocalView->m_LocalList.SetItemText(i,4,"OK");
break;
case 1://时间不同
pLocalView->m_LocalList.SetItemText(i,4,"更新");
break;
case 8://大小不同
pLocalView->m_LocalList.SetItemText(i,4,"不同");
break;
case 9://时间和大小不同
pLocalView->m_LocalList.SetItemText(i,4,"替换");
break;
default:
break;
}
}
if(!(bFind&&(iOK==0)))
{
lviWork.iItem=pWorkView->m_WorkList.GetItemCount();
lviWork.pszText="";
lviWork.lParam=(LPARAM)lviWork.iItem;
pWorkView->m_WorkList.InsertItem(&lviWork);
pWorkView->m_WorkList.SetItemText(lviWork.iItem,0,pLocalView->m_LocalList.GetItemText(i,0));
pWorkView->m_WorkList.SetItemText(lviWork.iItem,1,pLocalView->m_LocalList.GetItemText(i,1));
pWorkView->m_WorkList.SetItemText(lviWork.iItem,2,pLocalView->m_LocalList.GetItemText(i,2));
pWorkView->m_WorkList.SetItemText(lviWork.iItem,3,pLocalView->m_LocalList.GetItemText(i,3));
pWorkView->m_WorkList.SetItemText(lviWork.iItem,4,pLocalView->m_LocalList.GetItemText(i,4));
//填写索引
if(!bFind)//新文件
{
sprintf(temp,"新");
}
else
{
sprintf(temp,"%d",iRec);
}
pWorkView->m_WorkList.SetItemText(lviWork.iItem,6,temp);//填写索引
pWorkView->m_WorkList.SetHotItem(lviWork.iItem); //标注当前项目
pWorkView->m_WorkList.EnsureVisible(lviWork.iItem,true); //滚动影响的卷轴
pWorkView->m_WorkList.Update(lviWork.iItem); //重绘List界面,防止花屏
}
}
pMessageView->PostMessage(WM_MY_MESSAGE_UPDATE,0,(LPARAM)(LPCTSTR)"ok\r\n");
if(bAutoLoad)//自动模式
{
pMainFrame->PostMessage(WM_MY_AUTO_LOAD);
}
return true;
}
void CWorkView::OnDblclkWorklist(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i=m_WorkList.GetNextItem(-1,LVNI_SELECTED);
if(i!=-1)
{
m_WorkList.DeleteItem(i);
}
*pResult = 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?