www.pudn.com > CraftFTP_gb.rar > AdvancePage.cpp
// AdvancePage.cpp : implementation file
//
#include "stdafx.h"
#include "CraftFTP.h"
#include "AdvancePage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdvancePage property page
IMPLEMENT_DYNCREATE(CAdvancePage, CPropertyPageExt)
const DWORD CAdvancePage::m_nHelpIDs[] =
{
IDC_CHECK_PASV_MODE, HIDC_CHECK_PASV_MODE,
IDC_CHECK_FOLDER_CATCH, HIDC_CHECK_FOLDER_CATCH,
IDC_CHECK_SHOW_LOGIN_MESSAGE, HIDC_CHECK_SHOW_LOGIN_MESSAGE,
IDC_CHECK_SHOW_DIRECTORY_MESSAGE, HIDC_CHECK_SHOW_DIRECTORY_MESSAGE,
IDC_EDIT_CONTROL_SIZE, HIDC_EDIT_CONTROL_SIZE,
IDC_SPIN_CONTROL_SIZE, HIDC_SPIN_CONTROL_SIZE,
IDC_EDIT_SEND_SIZE, HIDC_EDIT_SEND_SIZE,
IDC_SPIN_SEND_SIZE, HIDC_SPIN_SEND_SIZE,
IDC_EDIT_RECEIVE_SIZE, HIDC_EDIT_RECEIVE_SIZE,
IDC_SPIN_RECEIVE_SIZE, HIDC_SPIN_RECEIVE_SIZE,
IDC_RADIO_ASCII_TEXT, HIDC_RADIO_ASCII_TEXT,
IDC_RADIO_BINARY, HIDC_RADIO_BINARY,
IDC_RADIO_AUTO_TRANMODE, HIDC_RADIO_AUTO_TRANMODE,
IDC_EDIT_EXTENDSION, HIDC_EDIT_EXTENDSION,
IDC_LIST_EXTENDSION, HIDC_LIST_EXTENDSION,
IDC_BUTTON_ADD_EXTENDSION, HIDC_BUTTON_ADD_EXTENDSION,
IDC_BUTTON_REMOVE_EXTENDSION, HIDC_BUTTON_REMOVE_EXTENDSION,
IDC_CHECK_KEEP_CONNECTION, HIDC_CHECK_KEEP_CONNECTION,
IDC_EDIT_IDLETIMES, HIDC_EDIT_IDLETIMES,
IDC_SPIN_IDLETIMES, HIDC_SPIN_IDLETIMES,
IDC_EDIT_IDLECOMMAND, HIDC_EDIT_IDLECOMMAND,
IDC_LIST_IDLECOMMAND, HIDC_LIST_IDLECOMMAND,
IDC_BUTTON_ADD_IDLECMD, HIDC_BUTTON_ADD_IDLECMD,
IDC_BUTTON_REMOVE_IDLECMD, HIDC_BUTTON_REMOVE_IDLECMD,
0 , 0
};
CAdvancePage::CAdvancePage() : CPropertyPageExt(CAdvancePage::IDD)
{
//{{AFX_DATA_INIT(CAdvancePage)
m_bFolderCatch = TRUE;
m_bKeepConnection = TRUE;
m_bPasvMode = TRUE;
m_bShowLoginMsg = TRUE;
m_bShowDirMsg = TRUE;
m_nIdleCmd = 30;
m_nControlSize = 4;
m_nRecvSize = 4;
m_nSendSize = 4;
//}}AFX_DATA_INIT
m_nTransferType = 1; // Auto
m_szSection = _T("Advance");
m_szIdleCmdList = _T("Reload,PWD,NOOP,REST 0,TYPE A,TYPE I");
m_szExtendsionList = _T("TXT,H,C,CPP,JAVA,JSP,VBS,BAS,BAT,HTM,HTML,PL,CGI,MAK,SHTML,DHTML,CFM,PHP,ASP,CSS");
}
CAdvancePage::~CAdvancePage()
{
}
void CAdvancePage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPageExt::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdvancePage)
DDX_Control(pDX, IDC_LIST_EXTENDSION, m_listAsciiExtendsion);
DDX_Control(pDX, IDC_LIST_IDLECOMMAND, m_listFtpCmdBox);
DDX_Check(pDX, IDC_CHECK_FOLDER_CATCH, m_bFolderCatch);
DDX_Check(pDX, IDC_CHECK_KEEP_CONNECTION, m_bKeepConnection);
DDX_Check(pDX, IDC_CHECK_PASV_MODE, m_bPasvMode);
DDX_Check(pDX, IDC_CHECK_SHOW_LOGIN_MESSAGE, m_bShowLoginMsg);
DDX_Check(pDX, IDC_CHECK_SHOW_DIRECTORY_MESSAGE, m_bShowDirMsg);
DDX_Text(pDX, IDC_EDIT_IDLETIMES, m_nIdleCmd);
DDV_MinMaxUInt(pDX, m_nIdleCmd, 30, 90);
DDX_Text(pDX, IDC_EDIT_CONTROL_SIZE, m_nControlSize);
DDV_MinMaxUInt(pDX, m_nControlSize, 1, 8);
DDX_Text(pDX, IDC_EDIT_RECEIVE_SIZE, m_nRecvSize);
DDV_MinMaxUInt(pDX, m_nRecvSize, 1, 8);
DDX_Text(pDX, IDC_EDIT_SEND_SIZE, m_nSendSize);
DDV_MinMaxUInt(pDX, m_nSendSize, 1, 8);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAdvancePage, CPropertyPageExt)
//{{AFX_MSG_MAP(CAdvancePage)
ON_BN_CLICKED(IDC_RADIO_AUTO_TRANMODE, OnRadioAutoTranmode)
ON_BN_CLICKED(IDC_RADIO_ASCII_TEXT, OnRadioAsciiText)
ON_BN_CLICKED(IDC_RADIO_BINARY, OnRadioBinary)
ON_BN_CLICKED(IDC_CHECK_KEEP_CONNECTION, OnCheckKeepConnection)
ON_NOTIFY(NM_CLICK, IDC_LIST_IDLECOMMAND, OnClickListIdlecommand)
ON_NOTIFY(NM_KILLFOCUS, IDC_LIST_IDLECOMMAND, OnKillfocusListIdlecommand)
ON_NOTIFY(LVN_INSERTITEM, IDC_LIST_EXTENDSION, OnInsertitemListExtendsion)
ON_NOTIFY(LVN_INSERTITEM, IDC_LIST_IDLECOMMAND, OnInsertitemListIdlecommand)
ON_NOTIFY(NM_KILLFOCUS, IDC_LIST_EXTENDSION, OnKillfocusListExtendsion)
ON_NOTIFY(NM_CLICK, IDC_LIST_EXTENDSION, OnClickListExtendsion)
ON_BN_CLICKED(IDC_BUTTON_ADD_EXTENDSION, OnButtonAddExtendsion)
ON_BN_CLICKED(IDC_BUTTON_ADD_IDLECMD, OnButtonAddIdlecmd)
ON_EN_CHANGE(IDC_EDIT_EXTENDSION, OnChangeEditExtendsion)
ON_EN_CHANGE(IDC_EDIT_IDLECOMMAND, OnChangeEditIdlecommand)
ON_BN_CLICKED(IDC_BUTTON_REMOVE_EXTENDSION, OnButtonRemoveExtendsion)
ON_BN_CLICKED(IDC_BUTTON_REMOVE_IDLECMD, OnButtonRemoveIdlecmd)
ON_BN_KILLFOCUS(IDC_BUTTON_REMOVE_IDLECMD, OnRemoveIdlecmdKillFocus)
ON_BN_KILLFOCUS(IDC_BUTTON_REMOVE_EXTENDSION, OnRemoveExtendsionKillFocus)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdvancePage message handlers
BOOL CAdvancePage::OnKillActive()
{
// TODO: Add your specialized code here and/or call the base class
return CPropertyPageExt::OnKillActive();
}
BOOL CAdvancePage::OnInitDialog()
{
CPropertyPageExt::OnInitDialog();
// TODO: Add extra initialization here
CWaitCursor w;
m_listFtpCmdBox.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
m_listAsciiExtendsion.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
CRect rect;
m_listFtpCmdBox.GetClientRect(&rect);
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM ;
lvc.iSubItem = 0;
lvc.pszText = _T("");
lvc.cx = rect.Width();
lvc.fmt = LVCFMT_LEFT;
m_listFtpCmdBox.InsertColumn(0,&lvc);
m_listFtpCmdBox.ModifyStyle(WS_HSCROLL, 0);
m_listAsciiExtendsion.GetClientRect(&rect);
lvc.cx = rect.Width();
m_listAsciiExtendsion.InsertColumn(0,&lvc);
//文件扩展名
if(!m_szExtendsionList.IsEmpty())
{
int nPos = m_szExtendsionList.Find(",");
if(nPos!=-1)
{
while(nPos!=-1)
{
CString szCmd = m_szExtendsionList.Left(nPos);
m_listAsciiExtendsion.InsertItem(m_listAsciiExtendsion.GetItemCount(), szCmd);
m_szExtendsionList.Delete(0, nPos+1);
nPos = m_szExtendsionList.Find(",");
}
CString szCmd = m_szExtendsionList;
m_listAsciiExtendsion.InsertItem(m_listAsciiExtendsion.GetItemCount(), szCmd);
}
else
m_listAsciiExtendsion.InsertItem(0, m_szExtendsionList);
}
//空闲命令
if(!m_szIdleCmdList.IsEmpty())
{
int nPos = m_szIdleCmdList.Find(",");
if(nPos!=-1)
{
while(nPos!=-1)
{
CString szCmd = m_szIdleCmdList.Left(nPos);
m_listFtpCmdBox.InsertItem(m_listFtpCmdBox.GetItemCount(), szCmd);
m_szIdleCmdList.Delete(0, nPos+1);
nPos = m_szIdleCmdList.Find(",");
}
CString szCmd = m_szIdleCmdList;
m_listFtpCmdBox.InsertItem(m_listFtpCmdBox.GetItemCount(), szCmd);
}
else
m_listFtpCmdBox.InsertItem(0, m_szIdleCmdList);
}
//传输类型
if( m_nTransferType == 1 ) // Auto
CheckRadioButton(IDC_RADIO_AUTO_TRANMODE,IDC_RADIO_BINARY,IDC_RADIO_AUTO_TRANMODE);
else
if( m_nTransferType == 2 ) // Ascll
CheckRadioButton(IDC_RADIO_AUTO_TRANMODE,IDC_RADIO_BINARY,IDC_RADIO_ASCII_TEXT);
else
if( m_nTransferType == 3 ) // Binaru
CheckRadioButton(IDC_RADIO_AUTO_TRANMODE,IDC_RADIO_BINARY,IDC_RADIO_BINARY);
//微调控件
CSpinButtonCtrl * pSpinCtrl1 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_CONTROL_SIZE);
if(pSpinCtrl1)
{
pSpinCtrl1->SetBuddy(GetDlgItem(IDC_EDIT_CONTROL_SIZE));
pSpinCtrl1->SetRange(1, 8);
}
CSpinButtonCtrl * pSpinCtrl2 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_SEND_SIZE);
if(pSpinCtrl2)
{
pSpinCtrl2->SetBuddy(GetDlgItem(IDC_EDIT_SEND_SIZE));
pSpinCtrl2->SetRange(1, 8);
}
CSpinButtonCtrl * pSpinCtrl3 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_RECEIVE_SIZE);
if(pSpinCtrl3)
{
pSpinCtrl3->SetBuddy(GetDlgItem(IDC_EDIT_RECEIVE_SIZE));
pSpinCtrl3->SetRange(1, 8);
}
CSpinButtonCtrl * pSpinCtrl4 = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_IDLETIMES);
if(pSpinCtrl4)
{
pSpinCtrl4->SetBuddy(GetDlgItem(IDC_EDIT_IDLETIMES));
pSpinCtrl4->SetRange(30, 90);
}
m_oGroupFrame.SetFrame(this, IDC_GROUPFRAME, IDC_CHECK_KEEP_CONNECTION);
if(m_bKeepConnection)
m_oGroupFrame.Enable(TRUE);
else
m_oGroupFrame.Enable(FALSE);
CWnd * pBtn1 = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn1)
pBtn1->EnableWindow(FALSE);
CWnd * pBtn2 = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn2)
pBtn2->EnableWindow(FALSE);
CWnd * pBtn3 = GetDlgItem(IDC_BUTTON_ADD_IDLECMD);
if(pBtn3)
pBtn3->EnableWindow(FALSE);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAdvancePage::OnRadioAutoTranmode()
{
// TODO: Add your control notification handler code here
m_nTransferType = 1;
}
void CAdvancePage::OnRadioAsciiText()
{
// TODO: Add your control notification handler code here
m_nTransferType = 2;
}
void CAdvancePage::OnRadioBinary()
{
// TODO: Add your control notification handler code here
m_nTransferType = 3;
}
void CAdvancePage::LoadValue()
{
CWinApp * theApp = AfxGetApp();
m_bPasvMode = theApp->GetProfileInt(m_szSection, _T("PasvMode"), TRUE);
m_bShowLoginMsg = theApp->GetProfileInt(m_szSection, _T("ShowLoginMsg"), TRUE);
m_bShowDirMsg = theApp->GetProfileInt(m_szSection, _T("ShowDirMsg"), TRUE);
m_bFolderCatch = theApp->GetProfileInt(m_szSection, _T("FolderCatch"), TRUE);
m_nTransferType = theApp->GetProfileInt(m_szSection, _T("TransferType"), 1);
m_nControlSize = theApp->GetProfileInt(m_szSection, _T("ControlSize"), 4);
m_nSendSize = theApp->GetProfileInt(m_szSection, _T("SendSize"), 4);
m_nRecvSize = theApp->GetProfileInt(m_szSection, _T("ReceiveSize"), 4);
m_bKeepConnection = theApp->GetProfileInt(m_szSection, _T("KeepConnection"), TRUE);
m_nIdleCmd = theApp->GetProfileInt(m_szSection, _T("IdleCommand"), 30);
m_szIdleCmdList = theApp->GetProfileString(m_szSection, _T("IdleCmdList"), _T("Reload,PWD,NOOP,REST 0,TYPE A,TYPE I"));
m_szExtendsionList = theApp->GetProfileString(m_szSection, _T("ExtendsionList"), _T("LOG,TXT,H,C,CPP,JAVA,JSP,VBS,BAS,BAT,HTM,HTML,PL,CGI,MAK,SHTML,DHTML,CFM,PHP,ASP,CSS"));
}
void CAdvancePage::SaveValue()
{
CWinApp * theApp = AfxGetApp();
theApp->WriteProfileInt(m_szSection, _T("PasvMode"), m_bPasvMode);
theApp->WriteProfileInt(m_szSection, _T("ShowLoginMsg"), m_bShowLoginMsg);
theApp->WriteProfileInt(m_szSection, _T("ShowDirMsg"), m_bShowDirMsg);
theApp->WriteProfileInt(m_szSection, _T("FolderCatch"), m_bFolderCatch);
theApp->WriteProfileInt(m_szSection, _T("TransferType"), m_nTransferType);
theApp->WriteProfileInt(m_szSection, _T("ControlSize"), m_nControlSize);
theApp->WriteProfileInt(m_szSection, _T("SendSize"), m_nSendSize);
theApp->WriteProfileInt(m_szSection, _T("ReceiveSize"), m_nRecvSize);
theApp->WriteProfileInt(m_szSection, _T("KeepConnection"), m_bKeepConnection);
theApp->WriteProfileInt(m_szSection, _T("IdleCommand"), m_nIdleCmd);
theApp->WriteProfileString(m_szSection, _T("IdleCmdList"), m_szIdleCmdList);
theApp->WriteProfileString(m_szSection, _T("ExtendsionList"), m_szExtendsionList);
}
void CAdvancePage::OnCheckKeepConnection()
{
// TODO: Add your control notification handler code here
UpdateData();
if(m_bKeepConnection)
{
m_oGroupFrame.Enable(TRUE);
OnChangeEditIdlecommand();
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn)
pBtn->EnableWindow(FALSE);
}
else
m_oGroupFrame.Enable(FALSE);
}
void CAdvancePage::OnOK()
{
// TODO: Add your specialized code here and/or call the base class
m_szExtendsionList = _T("");
for(int i=0; i0)
pBtn->EnableWindow(TRUE);
else
pBtn->EnableWindow(FALSE);
*pResult = 0;
}
void CAdvancePage::OnKillfocusListIdlecommand(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CWnd * pFocusWnd = CWnd::GetFocus();
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn && pBtn != pFocusWnd)
pBtn->EnableWindow(FALSE);
*pResult = 0;
}
void CAdvancePage::OnInsertitemListExtendsion(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_listAsciiExtendsion.ShowScrollBar(SB_HORZ, FALSE);
m_listAsciiExtendsion.ModifyStyle(WS_HSCROLL, 0, SWP_DRAWFRAME);
*pResult = 0;
}
void CAdvancePage::OnInsertitemListIdlecommand(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_listFtpCmdBox.ShowScrollBar(SB_HORZ, FALSE);
m_listFtpCmdBox.ModifyStyle(WS_HSCROLL, 0, SWP_DRAWFRAME);
*pResult = 0;
}
void CAdvancePage::OnKillfocusListExtendsion(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CWnd * pFocusWnd = CWnd::GetFocus();
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_EXTENDSION);
if(pBtn && pBtn != pFocusWnd)
pBtn->EnableWindow(FALSE);
*pResult = 0;
}
void CAdvancePage::OnClickListExtendsion(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_EXTENDSION);
if(m_listAsciiExtendsion.GetSelectedCount()>0)
pBtn->EnableWindow(TRUE);
else
pBtn->EnableWindow(FALSE);
*pResult = 0;
}
void CAdvancePage::OnButtonAddExtendsion()
{
// TODO: Add your control notification handler code here
CString szText;
GetDlgItemText(IDC_EDIT_EXTENDSION, szText);
if(!szText.IsEmpty())
{
m_listAsciiExtendsion.InsertItem(m_listAsciiExtendsion.GetItemCount(), szText);
SetDlgItemText(IDC_EDIT_EXTENDSION, _T(""));
}
}
void CAdvancePage::OnButtonAddIdlecmd()
{
// TODO: Add your control notification handler code here
CString szText;
GetDlgItemText(IDC_EDIT_IDLECOMMAND, szText);
if(!szText.IsEmpty())
{
m_listFtpCmdBox.InsertItem(m_listFtpCmdBox.GetItemCount(), szText);
SetDlgItemText(IDC_EDIT_IDLECOMMAND, _T(""));
}
}
void CAdvancePage::OnChangeEditExtendsion()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPageExt::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CWnd * pCtrl = GetDlgItem(IDC_BUTTON_ADD_EXTENDSION);
CString szText;
GetDlgItemText(IDC_EDIT_EXTENDSION, szText);
if(szText.IsEmpty())
pCtrl->EnableWindow(FALSE);
else
pCtrl->EnableWindow(TRUE);
}
void CAdvancePage::OnChangeEditIdlecommand()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPageExt::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CWnd * pCtrl = GetDlgItem(IDC_BUTTON_ADD_IDLECMD);
CString szText;
GetDlgItemText(IDC_EDIT_IDLECOMMAND, szText);
if(szText.IsEmpty())
pCtrl->EnableWindow(FALSE);
else
pCtrl->EnableWindow(TRUE);
}
void CAdvancePage::OnButtonRemoveExtendsion()
{
// TODO: Add your control notification handler code here
POSITION pos = m_listAsciiExtendsion.GetFirstSelectedItemPosition();
if(pos)
{
int nItem = m_listAsciiExtendsion.GetNextSelectedItem(pos);
m_listAsciiExtendsion.DeleteItem(nItem);
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_EXTENDSION);
if(pBtn)
pBtn->EnableWindow(FALSE);
}
}
void CAdvancePage::OnButtonRemoveIdlecmd()
{
// TODO: Add your control notification handler code here
POSITION pos = m_listFtpCmdBox.GetFirstSelectedItemPosition();
if(pos)
{
int nItem = m_listFtpCmdBox.GetNextSelectedItem(pos);
m_listFtpCmdBox.DeleteItem(nItem);
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn)
pBtn->EnableWindow(FALSE);
}
}
void CAdvancePage::OnRemoveIdlecmdKillFocus()
{
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_IDLECMD);
if(pBtn)
pBtn->EnableWindow(FALSE);
}
void CAdvancePage::OnRemoveExtendsionKillFocus()
{
CWnd * pBtn = GetDlgItem(IDC_BUTTON_REMOVE_EXTENDSION);
if(pBtn)
pBtn->EnableWindow(FALSE);
}