📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "EasyFtp.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
#include "EasyFtpDoc.h"
#include "LocalView.h"
#include "WorkView.h"
#include "ProjectTree.h"
#include "WebView.h"
#include "MessageView.h"
#include "SettingBox.h"
#include "ProjectName.h"
#include "wininet.h"
#include "ras.h"
HICON m_hIcon; //任务图标
int iPathNo=0; //路径堆栈计数器
int iPathPoint=0; //路径堆栈计指针
char sWebPathNeedSerch[1024][256];//路径堆栈
char sNowWebPath[256];
RECT rectMainWindowsRect; //窗口大小
CMainFrame *pMainFrame;
extern CLocalView *pLocalView;
extern CWebView *pWebView;
extern CMessageView *pMessageView;
extern CWorkView *pWorkView;
extern CProjectTree *pProjectTree;
extern int iNowProjectNo;
int iIconNumber=0; //图标编号
bool bLinkDataGood=false; //数据传递情况好标志
bool bWebTry=false; //服务重试状态
BOOL bAutoDial=false; //自动拨号
BOOL bAutoHangUp=false; //自动挂断
BOOL bCmpTime=false; //比较时间
BOOL bAutoDialAgain=false; //拨号失败继续重拨
BOOL bDialWhenHangUp=false; //必要时候拨号
BOOL bWebAgain=false; //服务器失败重试
BOOL bMUpThread=false; //允许多个上传线程
BOOL bQuitWhenFinish=false; //完成后退出
BOOL bShutDownWhenFinish=false;//完成后关闭计算机
BOOL bWebToLocal=true; //直接比较记录文件
int iMThreadMax=3; //服务器线程最大值
int iWebLoop=0; //服务器失败重试次数
int iWebTryLoop=0; //已用服务器失败重试次数
int iDialDelay=5; //拨号失败延迟
int iDialLoop=0; //拨号失败次数
volatile int iMThreadWorkTotal=0; //任务个数
volatile int iMThreadWorkNowNo=0; //当前已经分配的任务号码
volatile bool bMThreadWorkReady[5]=
{true,true,true,true,true};//线程空闲
char sDialNumber[256],sDialUser[256],sDialPassword[256];
//申明一个线程指针并建立一个线程函数主体
CWinThread *MyFtpLogoThread; //代表辅助线程
CWinThread *MyFtpUpThread; //上传线程
CWinThread *MyDialThread;
CWinThread *MyMUpThread[10];
UINT MyMUpThreadFunction(LPVOID lpParam);
//void MyMUpThreadEnd(void);
UINT MyDialThreadFunction(LPVOID lpParam);
///void MyDialThreadEnd(void);
UINT MyFtpLogoThreadFunction(LPVOID lpParam);
//void MyFtpLogoThreadEnd(void);
UINT MyFtpUpThreadFunction(LPVOID lpParam);
//void MyFtpUpThreadEnd(void);
bool Dial();
bool HangUp();
bool bAutoLoad=false;
bool bCmpNow=false;
CString csName,csUser,csPassword,csWebPath,csLocalPath;
int iTotalProject=0; //项目个数
int iTotalWebFile=0;
int iTotalWebDir=0;
DWORD dwTotalWebFileLong=0;
volatile bool bExitApp=false;
char sProjectAttrib[256][6][256];
//项目名
//用户名
//地址
//密码
//服务器路径
//本地路径
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_COMMAND(ID_CTL_BREAK, OnCtlBreak)
ON_COMMAND(ID_BUTTON_EXIT, OnButtonExit)
ON_COMMAND(ID_CTL_HUANGUP, OnCtlHuangup)
ON_EN_CHANGE(IDC_FTPADD, OnChangeFtpadd)
ON_EN_CHANGE(IDC_FTPUSER, OnChangeFtpuser)
ON_EN_CHANGE(IDC_FTPPASSWORD, OnChangeFtppassword)
ON_EN_CHANGE(IDC_LOCALPATH, OnChangeLocalpath)
ON_EN_CHANGE(IDC_WEBPATH, OnChangeWebpath)
ON_COMMAND(ID_CTL_FTPUP, OnCtlFtpup)
ON_COMMAND(ID_CTL_DIAL, OnCtlDial)
ON_COMMAND(ID_CTL_SETTING, OnCtlSetting)
ON_COMMAND(ID_CTL_AUTOLOAD, OnCtlAutoload)
ON_COMMAND(ID_CTL_CMP, OnCtlCmp)
ON_COMMAND(ID_PROJECT_ADD, OnProjectAdd)
ON_COMMAND(ID_PROJECT_DELETE, OnProjectDelete)
ON_WM_TIMER()
ON_COMMAND(ID_QUICK_WEBTOLOCAL, OnQuickWebtolocal)
ON_UPDATE_COMMAND_UI(ID_QUICK_WEBTOLOCAL, OnUpdateQuickWebtolocal)
ON_COMMAND(ID_QUICK_SHUTDOWN, OnQuickShutdown)
ON_UPDATE_COMMAND_UI(ID_QUICK_SHUTDOWN, OnUpdateQuickShutdown)
ON_COMMAND(ID_QUICK_QUITWHENFINISH, OnQuickQuitwhenfinish)
ON_UPDATE_COMMAND_UI(ID_QUICK_QUITWHENFINISH, OnUpdateQuickQuitwhenfinish)
ON_COMMAND(ID_QUICK_AUTODIAL, OnQuickAutodial)
ON_UPDATE_COMMAND_UI(ID_QUICK_AUTODIAL, OnUpdateQuickAutodial)
ON_COMMAND(ID_QUICK_HANGUP, OnQuickHangup)
ON_UPDATE_COMMAND_UI(ID_QUICK_HANGUP, OnUpdateQuickHangup)
ON_COMMAND(ID_QUICK_TIMECMP, OnQuickTimecmp)
ON_UPDATE_COMMAND_UI(ID_QUICK_TIMECMP, OnUpdateQuickTimecmp)
ON_EN_UPDATE(IDC_WEBPATH, OnUpdateWebpath)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MY_PROJECT_UPDATE,OnUpdateProject)
ON_MESSAGE(WM_MY_AUTO_LOAD,OnAutoLoad)
ON_MESSAGE(WM_MY_AUTO_LINK,OnAutoLink)
ON_MESSAGE(WM_MY_WEBLOOP_LOGO,OnWebLogoLoop)
ON_MESSAGE(WM_MY_WEBLOOP_UP,OnWebUpLoop)
ON_MESSAGE(WM_MY_APP_EXIT,OnMyExit)
ON_MESSAGE(WM_MY_SHUTDOWN,OnMyShutDown)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
MyDialThread=NULL;
pMainFrame=this;
iTotalProject=0;
int iNo;
int i,j,k;
char ctemp;
FILE *fo;
bAutoDial=false;
bAutoHangUp=false;
bCmpTime=false;
bAutoDialAgain=false; //拨号失败继续重拨
bDialWhenHangUp=false; //必要时候拨号
bMUpThread=false; //允许多个上传线程
bQuitWhenFinish=false; //完成后退出
bShutDownWhenFinish=false;//完成后关闭计算机
bWebToLocal=true; //直接比较记录文件
iDialDelay=5; //拨号失败延迟
iDialLoop=0; //拨号失败次数
strcpy(sDialUser,"anybody");
strcpy(sDialNumber,"999");
strcpy(sDialPassword,"easyftp");
fo=fopen("set.sys","rb");
if(fo!=NULL)
{
fscanf(fo,"%d",&iNo);
if(iNo==1)
bAutoDial=true;
fscanf(fo,"%d",&iNo);
if(iNo==1)
bAutoHangUp=true;
fscanf(fo,"%d",&iNo);
if(iNo==1)
bCmpTime=true;
fscanf(fo,"%d",&iNo);
fscanf(fo,"%c%c",&ctemp,&ctemp);
for(i=0;i<iNo;i++)
{
fscanf(fo,"%c",&sDialNumber[i]);
}
sDialNumber[i]=0x00;
fscanf(fo,"%d",&iNo);
fscanf(fo,"%c%c",&ctemp,&ctemp);
for(i=0;i<iNo;i++)
{
fscanf(fo,"%c",&sDialUser[i]);
}
sDialUser[i]=0x00;
fscanf(fo,"%d",&iNo);
fscanf(fo,"%c%c",&ctemp,&ctemp);
for(i=0;i<iNo;i++)
{
fscanf(fo,"%c",&sDialPassword[i]);
}
sDialPassword[i]=0x00;
fscanf(fo,"%d",&iNo);
if(iNo==1)
bAutoDialAgain=true; //拨号失败继续重拨
fscanf(fo,"%d",&iNo);
if(iNo==1)
bAutoDialAgain=true; //拨号失败继续重拨
fscanf(fo,"%d",&iNo);
if(iNo==1)
bDialWhenHangUp=true; //必要时候拨号
fscanf(fo,"%d",&iDialDelay);//拨号失败延迟
fscanf(fo,"%d",&iDialLoop);//拨号失败次数
fscanf(fo,"%d",&iNo);
if(iNo==1)
bWebAgain=true; //服务器失败重试
fscanf(fo,"%d",&iWebLoop);//服务器失败重试次数
fscanf(fo,"%d",&iNo);
if(iNo==1)
bMUpThread=true; //允许多个上传线程
fscanf(fo,"%d",&iNo);
if(iNo==1)
bQuitWhenFinish=true; //完成后退出
fscanf(fo,"%d",&iNo);
if(iNo==1)
bShutDownWhenFinish=true;//完成后关闭计算机
fscanf(fo,"%d",&iMThreadMax);//服务器线程最大值
if(iMThreadMax<1||iMThreadMax>10)
iMThreadMax=3;
fscanf(fo,"%d",&iNo);
if(iNo==0)
bWebToLocal=false; //直接比较记录文件
fclose(fo);
}
fo=fopen("save.dat","rb");
if(fo==NULL)
{
//AfxMessageBox("无法提取存盘");
return;
}
fscanf(fo,"%d",&iTotalProject);
if(iTotalProject<=0||iTotalProject>256)
{
iTotalProject=0;
fclose(fo);
return;
}
for(i=0;i<iTotalProject;i++)
{
for(k=0;k<6;k++)
{
fscanf(fo,"%d",&iNo);
fscanf(fo,"%c%c",&ctemp,&ctemp);
for(j=0;j<iNo;j++)
{
fscanf(fo,"%c",&sProjectAttrib[i][k][j]);
}
sProjectAttrib[i][k][j]=0x00;
}
}
fclose(fo);
}
CMainFrame::~CMainFrame()
{
//MyFtpLogoThreadEnd();
pMainFrame=NULL;
FILE *fo;
int i,j;
fo=fopen("set.sys","wb");
if(fo!=NULL)
{
if(bAutoDial)
{
fprintf(fo,"1\r\n");
}
else
{
fprintf(fo,"0\r\n");
}
if(bAutoHangUp)
{
fprintf(fo,"1\r\n");
}
else
{
fprintf(fo,"0\r\n");
}
if(bCmpTime)
{
fprintf(fo,"1\r\n");
}
else
{
fprintf(fo,"0\r\n");
}
fprintf(fo,"%d\r\n",strlen(sDialNumber));
fprintf(fo,"%s\r\n",sDialNumber);
fprintf(fo,"%d\r\n",strlen(sDialUser));
fprintf(fo,"%s\r\n",sDialUser);
fprintf(fo,"%d\r\n",strlen(sDialPassword));
fprintf(fo,"%s\r\n",sDialPassword);
if(bAutoDialAgain)//拨号失败继续重拨
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
if(bAutoDialAgain) //拨号失败继续重拨
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
if(bDialWhenHangUp)//必要时候拨号
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
fprintf(fo,"%d\r\n",iDialDelay);//拨号失败延迟
fprintf(fo,"%d\r\n",iDialLoop);//拨号失败次数
if(bWebAgain)//服务器失败重试
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
fprintf(fo,"%d\r\n",iWebLoop);//服务器失败重试次数
if(bMUpThread)//允许多个上传线程
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
if(bQuitWhenFinish)//完成后退出
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
if(bShutDownWhenFinish)//完成后关闭计算机
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
fprintf(fo,"%d\r\n",iMThreadMax);//服务器线程最大值
if(bWebToLocal) //直接比较记录文件
fprintf(fo,"1\r\n");
else
fprintf(fo,"0\r\n");
fclose(fo);
}
fo=fopen("save.dat","wb");
if(fo==NULL)
{
AfxMessageBox("无法存盘");
return;
}
fprintf(fo,"%d\r\n",iTotalProject);
for(i=0;i<iTotalProject;i++)
{
for(j=0;j<6;j++)
{
fprintf(fo,"%d\r\n",strlen(sProjectAttrib[i][j]));
fprintf(fo,"%s\r\n",sProjectAttrib[i][j]);
}
}
fclose(fo);
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// m_wndToolBar.SetButtonStyle(1,TBBS_CHECKBOX);
// m_wndToolBar.SetHeight(50);
// m_wndToolBar.SetButtonText(1,"CKBOX");
//设置为复选模式
if (!m_wndDlgBar.Create(this, IDR_MAINFRAME,
CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
{
TRACE0("Failed to create dialogbar\n");
return -1; // fail to create
}
if (!m_wndReBar.Create(this) ||
!m_wndReBar.AddBar(&m_wndToolBar) ||
!m_wndReBar.AddBar(&m_wndDlgBar))
{
TRACE0("Failed to create rebar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Remove this if you don't want tool tips
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY);
//*****************任务栏显示图标
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
NOTIFYICONDATA tnid;
tnid.cbSize = sizeof(NOTIFYICONDATA);
tnid.hWnd = GetSafeHwnd();
tnid.uID = WM_SCNOTIFYICON;
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
tnid.uCallbackMessage = WM_SCNOTIFYICON;
tnid.hIcon = m_hIcon;
memset(tnid.szTip, 0, 32);
lstrcpy(tnid.szTip, "EasyFtp㊣");//显示浮动提示
Shell_NotifyIcon(NIM_ADD, &tnid);
//-----------------------------
SetTimer(101,500,NULL); //设置定时器101,用于更新图标
return 0;
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
/* return m_wndSplitter.Create(this,
2, 2, // TODO: adjust the number of rows, columns
CSize(10, 10), // TODO: adjust the minimum pane size
pContext);*/
ShowWindow(SW_SHOWMAXIMIZED);
GetClientRect(&rectMainWindowsRect);
//得到客户区域窗口大小
if(!m_wndSplitter1.CreateStatic(this,3,1))
return FALSE; //建立3行
m_wndSplitter1.SetRowInfo(0,rectMainWindowsRect.bottom*3/10,0);
if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))==NULL)
return FALSE; //在第1行中建立2列
if(!m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CProjectTree),CSize(rectMainWindowsRect.right*1/3,rectMainWindowsRect.bottom*3/10),pContext)||
!m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CWorkView),CSize(rectMainWindowsRect.right*2/3,rectMainWindowsRect.bottom*3/10),pContext))
return FALSE; //设置第1行中2列
m_wndSplitter1.SetRowInfo(1,rectMainWindowsRect.bottom*3/10,0);
if(m_wndSplitter3.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(1,0))==NULL)
return FALSE; //在第2行中建立2列
if(!m_wndSplitter3.CreateView(0,0,RUNTIME_CLASS(CLocalView),CSize(rectMainWindowsRect.right*1/2,rectMainWindowsRect.bottom*3/10),pContext)||
!m_wndSplitter3.CreateView(0,1,RUNTIME_CLASS(CWebView),CSize(rectMainWindowsRect.right*1/2,rectMainWindowsRect.bottom*3/10),pContext))
return FALSE; //设置第2行中2列
if(!m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CMessageView),
CSize(rectMainWindowsRect.right,rectMainWindowsRect.bottom*4/10),pContext))
return FALSE; //设置第三行
return TRUE;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
| WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnButton1()
{
// TODO: Add your control notification handler code here
int i;
char temp[256];
bLinkDataGood=false;
bExitApp=false;
iWebTryLoop=0;
m_wndDlgBar.GetDlgItemText(IDC_FTPADD,csName);
m_wndDlgBar.GetDlgItemText(IDC_FTPUSER,csUser);
m_wndDlgBar.GetDlgItemText(IDC_FTPPASSWORD,csPassword);
m_wndDlgBar.GetDlgItemText(IDC_WEBPATH,csWebPath);
strcpy(temp,csWebPath);
if(temp[0]=='\\'||temp[0]=='/')
{
for(i=0;i<255;i++)
{
temp[i]=temp[i+1];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -