This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
@@ -0,0 +1,46 @@
// BandwidthDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "BandwidthDlg.h"
#include ".\bandwidthdlg.h"
// CBandwidthDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CBandwidthDlg, CDialog)
CBandwidthDlg::CBandwidthDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBandwidthDlg::IDD, pParent)
, m_sPath(_T(""))
, m_nLevel(0)
{
}
CBandwidthDlg::~CBandwidthDlg()
{
}
void CBandwidthDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_PATH, m_sPath);
DDX_Control(pDX, IDC_CBO_LEVEL, m_cboLevel);
}
BEGIN_MESSAGE_MAP(CBandwidthDlg, CDialog)
END_MESSAGE_MAP()
// CBandwidthDlg 메시지 처리기입니다.
BOOL CBandwidthDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_cboLevel.SetCurSel(m_nLevel);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
@@ -0,0 +1,30 @@
#pragma once
#include "afxwin.h"
// CBandwidthDlg 대화 상자입니다.
class CBandwidthDlg : public CDialog
{
DECLARE_DYNAMIC(CBandwidthDlg)
public:
CBandwidthDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CBandwidthDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_BANDWIDTH };
public:
CString m_sPath;
int m_nLevel;
CComboBox m_cboLevel;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,53 @@
// ConfigCommonDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigCommonDlg.h"
// CConfigCommonDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigCommonDlg, CDialog)
CConfigCommonDlg::CConfigCommonDlg(CWnd* pParent /*=NULL*/)
: CConfigSubDlg(CConfigCommonDlg::IDD, pParent)
, m_nAfterExec(0)
, m_bAutoConnect(FALSE)
, m_bSavePassword(FALSE)
{
}
CConfigCommonDlg::~CConfigCommonDlg()
{
}
void CConfigCommonDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CBO_AFTEREXEC, m_cboAfterExec);
DDX_Check(pDX, IDC_CHK_AUTOCONNECT, m_bAutoConnect);
DDX_Check(pDX, IDC_CHK_SAVEPASSWORD, m_bSavePassword);
}
BEGIN_MESSAGE_MAP(CConfigCommonDlg, CDialog)
ON_CBN_SELCHANGE(IDC_CBO_AFTEREXEC, OnCboAfterexecSelchange)
END_MESSAGE_MAP()
// CConfigCommonDlg 메시지 처리기입니다.
BOOL CConfigCommonDlg::OnInitDialog()
{
CConfigSubDlg::OnInitDialog();
m_cboAfterExec.SetCurSel(m_nAfterExec);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigCommonDlg::OnCboAfterexecSelchange()
{
m_nAfterExec = m_cboAfterExec.GetCurSel();
}
@@ -0,0 +1,33 @@
#pragma once
#include "ConfigSubDlg.h"
// CConfigCommonDlg 대화 상자입니다.
class CConfigCommonDlg : public CConfigSubDlg
{
DECLARE_DYNAMIC(CConfigCommonDlg)
public:
CConfigCommonDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConfigCommonDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONFIG_COMMON };
public:
CComboBox m_cboAfterExec;
BOOL m_bAutoConnect;
BOOL m_bSavePassword;
int m_nAfterExec;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
afx_msg void OnCboAfterexecSelchange();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,162 @@
// ConfigDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigDlg.h"
// CConfigDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigDlg, CDialog)
CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConfigDlg::IDD, pParent)
{
m_iPage = -1;
}
CConfigDlg::~CConfigDlg()
{
for (int i = 0; i < m_paPage.GetCount(); i++)
delete (PCONFIG_PAGE_STRUCT)m_paPage[i];
}
void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STC_TITLE, m_stcTitle);
DDX_Control(pDX, IDC_TAB, m_tab);
}
BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnSelchangeTb)
ON_BN_CLICKED(IDOK, OnOk)
END_MESSAGE_MAP()
// CConfigDlg 메시지 처리기입니다.
BOOL CConfigDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_stcTitle.m_crText = ::GetSysColor(COLOR_3DFACE);
m_stcTitle.m_nFontWeight = FW_BOLD;
m_stcTitle.m_nFontSize = 14;
m_stcTitle.m_sFontName = _T("Verdana");
m_stcTitle.SetConstantText(APP_TITLE);
m_tab.InsertItem(0, "기본");
m_tab.InsertItem(1, "URL 저장");
m_tab.InsertItem(2, "프록시");
// m_tab.SetItemSize(CSize(130, 17));
m_tab.GetClientRect(&m_rcFrame);
m_rcFrame.left += 1;
m_rcFrame.top += 23;
m_rcFrame.right -= 1;
m_rcFrame.bottom -= 1;
m_dlgCommon.m_bAutoConnect = COptions::GetOptionVal(OPTION_AUTOCONNECT);
m_dlgCommon.m_bSavePassword = COptions::GetOptionVal(OPTION_SAVEPASSWORD);
m_dlgCommon.m_nAfterExec = COptions::GetOptionVal(OPTION_AFTEREXEC);
m_dlgUrl.m_bSearchSub = COptions::GetOptionVal(OPTION_SEARCHSUBURL);
m_dlgUrl.m_nTag = COptions::GetOptionVal(OPTION_URLTAGTYPE);
m_dlgUrl.m_sSTag = COptions::GetOption(OPTION_URLSTAG);
m_dlgUrl.m_sETag = COptions::GetOption(OPTION_URLETAG);
m_dlgProxy.m_sHost = COptions::GetOption(OPTION_PROXYHOST);
m_dlgProxy.m_sPort = COptions::GetOption(OPTION_PROXYPORT);
m_dlgProxy.m_bUseIEProxy = COptions::GetOptionVal(OPTION_USEIEPROXY);
AddPage(m_dlgCommon, "기본");
AddPage(m_dlgUrl, "URL 저장");
AddPage(m_dlgProxy, "프록시");
ShowPage(0);
#ifdef _OPENDISK
SetWindowText("Opensidk Console 설정");
#else
SetWindowText("SP-Console 설정");
#endif
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigDlg::AddPage(CConfigSubDlg &dlg, LPCTSTR pszCaption)
{
PCONFIG_PAGE_STRUCT pcp = new CONFIG_PAGE_STRUCT;
pcp->pdlg = &dlg;
pcp->nID = dlg.GetID();
pcp->sCaption = pszCaption;
m_paPage.Add(pcp);
if (!::IsWindow(dlg.m_hWnd))
dlg.Create(dlg.GetID(), this);
}
BOOL CConfigDlg::ShowPage(int iPage)
{
if (m_iPage >= 0) {
PCONFIG_PAGE_STRUCT pcp = (PCONFIG_PAGE_STRUCT)m_paPage[m_iPage];
if (!pcp)
return FALSE;
if (pcp->pdlg) {
if (::IsWindow(pcp->pdlg->GetSafeHwnd()))
pcp->pdlg->ShowWindow(SW_HIDE);
}
}
PCONFIG_PAGE_STRUCT pcp = (PCONFIG_PAGE_STRUCT)m_paPage[iPage];
if (!pcp)
return FALSE;
if (pcp->pdlg) {
if (::IsWindow(pcp->pdlg->GetSafeHwnd())) {
pcp->pdlg->SetParent(&m_tab);
pcp->pdlg->MoveWindow(m_rcFrame.left, m_rcFrame.top, m_rcFrame.Width(), m_rcFrame.Height());
pcp->pdlg->ShowWindow(SW_SHOW);
pcp->pdlg->RedrawWindow();
pcp->pdlg->SetFocus();
}
m_tab.SetCurSel(iPage);
m_iPage = iPage;
}
m_stcTitle.SetWindowText(pcp->sCaption);
return TRUE;
}
void CConfigDlg::OnSelchangeTb(NMHDR *pNMHDR, LRESULT *pResult)
{
ShowPage(m_tab.GetCurSel());
*pResult = 0;
}
void CConfigDlg::OnOk()
{
m_dlgCommon.UpdateData();
m_dlgUrl.UpdateData();
m_dlgProxy.UpdateData();
COptions::SetOption(OPTION_AUTOCONNECT, m_dlgCommon.m_bAutoConnect);
COptions::SetOption(OPTION_SAVEPASSWORD, m_dlgCommon.m_bSavePassword);
COptions::SetOption(OPTION_AFTEREXEC, m_dlgCommon.m_nAfterExec);
COptions::SetOption(OPTION_SEARCHSUBURL, m_dlgUrl.m_bSearchSub);
COptions::SetOption(OPTION_URLTAGTYPE, m_dlgUrl.m_nTag);
COptions::SetOption(OPTION_URLSTAG, m_dlgUrl.m_sSTag);
COptions::SetOption(OPTION_URLETAG, m_dlgUrl.m_sETag);
COptions::SetOption(OPTION_PROXYHOST, m_dlgProxy.m_sHost);
COptions::SetOption(OPTION_PROXYPORT, m_dlgProxy.m_sPort);
COptions::SetOption(OPTION_USEIEPROXY, m_dlgProxy.m_bUseIEProxy);
CDialog::OnOK();
}
@@ -0,0 +1,56 @@
#pragma once
#include "ConfigSubDlg.h"
#include "ConfigCommonDlg.h"
#include "ConfigUrlDlg.h"
#include "ConfigProxyDlg.h"
#include "GdStatic.h"
// CConfigDlg 대화 상자입니다.
class CConfigDlg : public CDialog
{
DECLARE_DYNAMIC(CConfigDlg)
public:
CConfigDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConfigDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONFIG };
private:
typedef struct {
UINT nID;
CString sCaption;
CWnd *pdlg;
} CONFIG_PAGE_STRUCT, *PCONFIG_PAGE_STRUCT;
CConfigCommonDlg m_dlgCommon;
CConfigUrlDlg m_dlgUrl;
CConfigProxyDlg m_dlgProxy;
CRect m_rcFrame;
CPtrArray m_paPage;
int m_iPage;
public:
CGdStatic m_stcTitle;
CTabCtrl m_tab;
protected:
void AddPage(CConfigSubDlg &dlg, LPCTSTR pszCaption);
BOOL ShowPage(int iPage);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
afx_msg void OnSelchangeTb(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnOk();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,64 @@
// ConfigShProxyDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigProxyDlg.h"
// CConfigProxyDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigProxyDlg, CDialog)
CConfigProxyDlg::CConfigProxyDlg(CWnd* pParent /*=NULL*/)
: CConfigSubDlg(CConfigProxyDlg::IDD, pParent)
, m_sHost(_T(""))
, m_sPort(_T(""))
, m_bUseIEProxy(FALSE)
{
}
CConfigProxyDlg::~CConfigProxyDlg()
{
}
void CConfigProxyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDT_HOST, m_edtHost);
DDX_Control(pDX, IDC_EDT_PORT, m_edtPort);
DDX_Text(pDX, IDC_EDT_HOST, m_sHost);
DDX_Text(pDX, IDC_EDT_PORT, m_sPort);
DDX_Check(pDX, IDC_CHK_USE_IEPROXY, m_bUseIEProxy);
}
BEGIN_MESSAGE_MAP(CConfigProxyDlg, CDialog)
ON_BN_CLICKED(IDC_CHK_USE_IEPROXY, OnUseIeproxy)
END_MESSAGE_MAP()
// CConfigProxyDlg 메시지 처리기입니다.
BOOL CConfigProxyDlg::OnInitDialog()
{
CConfigSubDlg::OnInitDialog();
OnUseIeproxy();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigProxyDlg::OnUseIeproxy()
{
UpdateData(TRUE);
if (m_bUseIEProxy) {
GetDlgItem(IDC_EDT_HOST)->EnableWindow(FALSE);
GetDlgItem(IDC_EDT_PORT)->EnableWindow(FALSE);
}
else {
GetDlgItem(IDC_EDT_HOST)->EnableWindow(TRUE);
GetDlgItem(IDC_EDT_PORT)->EnableWindow(TRUE);
}
}
@@ -0,0 +1,34 @@
#pragma once
#include "ConfigSubDlg.h"
// CConfigProxyDlg 대화 상자입니다.
class CConfigProxyDlg : public CConfigSubDlg
{
DECLARE_DYNAMIC(CConfigProxyDlg)
public:
CConfigProxyDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConfigProxyDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONFIG_PROXY };
public:
CEdit m_edtHost;
CEdit m_edtPort;
CString m_sHost;
CString m_sPort;
BOOL m_bUseIEProxy;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
afx_msg void OnUseIeproxy();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,69 @@
// ConfigUrlDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigUrlDlg.h"
// CConfigUrlDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigUrlDlg, CDialog)
CConfigUrlDlg::CConfigUrlDlg(CWnd* pParent /*=NULL*/)
: CConfigSubDlg(CConfigUrlDlg::IDD, pParent)
, m_bSearchSub(FALSE)
, m_nTag(0)
, m_sSTag(_T(""))
, m_sETag(_T(""))
{
}
CConfigUrlDlg::~CConfigUrlDlg()
{
}
void CConfigUrlDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDT_STAG, m_edtSTag);
DDX_Control(pDX, IDC_EDT_ETAG, m_edtETag);
DDX_Check(pDX, IDC_CHK_SEARCHSUB, m_bSearchSub);
DDX_Radio(pDX, IDC_RDO_TAG1, m_nTag);
DDX_Text(pDX, IDC_EDT_STAG, m_sSTag);
DDX_Text(pDX, IDC_EDT_ETAG, m_sETag);
}
BEGIN_MESSAGE_MAP(CConfigUrlDlg, CDialog)
ON_BN_CLICKED(IDC_RDO_TAG1, OnTag)
ON_BN_CLICKED(IDC_RDO_TAG2, OnTag)
ON_BN_CLICKED(IDC_RDO_TAG3, OnTag)
ON_BN_CLICKED(IDC_RDO_TAG4, OnTag)
END_MESSAGE_MAP()
// CConfigUrlDlg 메시지 처리기입니다.
BOOL CConfigUrlDlg::OnInitDialog()
{
CConfigSubDlg::OnInitDialog();
OnTag();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigUrlDlg::OnTag()
{
UpdateData(TRUE);
if (m_nTag != 3) {
GetDlgItem(IDC_EDT_STAG)->EnableWindow(FALSE);
GetDlgItem(IDC_EDT_ETAG)->EnableWindow(FALSE);
}
else {
GetDlgItem(IDC_EDT_STAG)->EnableWindow(TRUE);
GetDlgItem(IDC_EDT_ETAG)->EnableWindow(TRUE);
}
}
@@ -0,0 +1,35 @@
#pragma once
#include "ConfigSubDlg.h"
// CConfigUrlDlg 대화 상자입니다.
class CConfigUrlDlg : public CConfigSubDlg
{
DECLARE_DYNAMIC(CConfigUrlDlg)
public:
CConfigUrlDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConfigUrlDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONFIG_URL };
public:
CEdit m_edtSTag;
CEdit m_edtETag;
BOOL m_bSearchSub;
int m_nTag;
CString m_sSTag;
CString m_sETag;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
afx_msg void OnTag();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,141 @@
// ConnectDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConnectDlg.h"
#include "ConnectProxyDlg.h"
// CConnectDlg 대화 상자입니다.
#define TIMER_ID_FOCUS 1
IMPLEMENT_DYNAMIC(CConnectDlg, CDialog)
CConnectDlg::CConnectDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConnectDlg::IDD, pParent)
, m_sUserId(_T(""))
, m_sPassword(_T(""))
, m_bAutoConnect(FALSE)
, m_bSavePassword(FALSE)
{
}
CConnectDlg::~CConnectDlg()
{
}
void CConnectDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STC_LOGO, m_stcLogo);
DDX_Text(pDX, IDC_EDT_USERID, m_sUserId);
DDX_Text(pDX, IDC_EDT_PASSWORD, m_sPassword);
DDX_Check(pDX, IDC_CHK_AUTOCONNECT, m_bAutoConnect);
DDX_Check(pDX, IDC_CHK_SAVEPASSWORD, m_bSavePassword);
DDX_Control(pDX, IDC_CHK_AUTOCONNECT, m_chkAutoConnect);
DDX_Control(pDX, IDC_CHK_SAVEPASSWORD, m_chkSavePassword);
}
BEGIN_MESSAGE_MAP(CConnectDlg, CDialog)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BTN_PROXY, OnBtnProxy)
ON_BN_CLICKED(IDC_CHK_AUTOCONNECT, OnChkAutoconnect)
END_MESSAGE_MAP()
// CConnectDlg 메시지 처리기입니다.
BOOL CConnectDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// m_stcLogo.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), (LPCSTR)IDB_LOGO));
CenterWindow();
ShowWindow(SW_SHOW);
m_nTimer = (UINT)SetTimer(TIMER_ID_FOCUS, 100, 0);
CBrush brBkgnd;
brBkgnd.CreateSysColorBrush(COLOR_BTNFACE);
RECT rc;
rc.left = rc.top = 0;
rc.right = 147;
rc.bottom = 61;
CClientDC cdcSrc(this);
CClientDC cdcDst(this);
HDC hdcSrc = ::CreateCompatibleDC(cdcSrc.m_hDC);
HDC hdcDst = ::CreateCompatibleDC(cdcDst.m_hDC);
#ifdef _LGU
// 2014.07.16
HBITMAP hbmSrc = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_LOGO_LGU));
#else //
HBITMAP hbmSrc = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_LOGO));
#endif //
HBITMAP hbmDst = ::CreateCompatibleBitmap(cdcDst.m_hDC, rc.right, rc.bottom);
HBITMAP hbmOldSrc = (HBITMAP)SelectObject(hdcSrc, hbmSrc);
HBITMAP hbmOldDst = (HBITMAP)SelectObject(hdcDst, hbmDst);
::FillRect(hdcDst, &rc, brBkgnd);
TransparentBlt(hdcDst, 0, 0, 144, 36, hdcSrc, 0, 0, 144, 36, RGB(255, 255, 255));
SelectObject(hdcSrc, hbmOldSrc);
SelectObject(hdcDst, hbmOldDst);
// Attach to Bitmap and Replace image in CImageList
m_stcLogo.SetBitmap(hbmDst);
DeleteDC(hdcSrc);
DeleteDC(hdcDst);
DeleteObject(hbmSrc);
// DeleteObject(hbmDst);
brBkgnd.DeleteObject();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConnectDlg::OnTimer(UINT nIDEvent)
{
KillTimer(m_nTimer);
m_nTimer = 0;
if (m_sUserId == "")
GetDlgItem(IDC_EDT_USERID)->SetFocus();
else if (m_sPassword == "")
GetDlgItem(IDC_EDT_PASSWORD)->SetFocus();
else
GetDlgItem(IDOK)->SetFocus();
CDialog::OnTimer(nIDEvent);
}
void CConnectDlg::OnOK()
{
UpdateData(TRUE);
CDialog::OnOK();
}
void CConnectDlg::OnChkAutoconnect()
{
if (m_chkAutoConnect.GetCheck() == BST_CHECKED) {
m_chkSavePassword.SetCheck(BST_CHECKED);
m_chkSavePassword.EnableWindow(FALSE);
}
else {
m_chkSavePassword.EnableWindow(TRUE);
}
}
void CConnectDlg::OnBtnProxy()
{
CConnectProxyDlg dlg;
dlg.DoModal();
}
@@ -0,0 +1,42 @@
#pragma once
#include "afxwin.h"
// CConnectDlg 대화 상자입니다.
class CConnectDlg : public CDialog
{
DECLARE_DYNAMIC(CConnectDlg)
public:
CConnectDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConnectDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONNECT };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
CStatic m_stcLogo;
CString m_sUserId;
CString m_sPassword;
BOOL m_bAutoConnect;
BOOL m_bSavePassword;
CButton m_chkAutoConnect;
CButton m_chkSavePassword;
UINT m_nTimer;
protected:
virtual BOOL OnInitDialog();
virtual void OnOK();
public:
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnChkAutoconnect();
afx_msg void OnBtnProxy();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,62 @@
// ConnectProxyDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConnectProxyDlg.h"
// CConnectProxyDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConnectProxyDlg, CDialog)
CConnectProxyDlg::CConnectProxyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConnectProxyDlg::IDD, pParent)
{
}
CConnectProxyDlg::~CConnectProxyDlg()
{
}
void CConnectProxyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CConnectProxyDlg, CDialog)
END_MESSAGE_MAP()
// CConnectProxyDlg 메시지 처리기입니다.
BOOL CConnectProxyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_dlg.Create(IDD_CONFIG_PROXY, this);
m_dlg.m_sHost = COptions::GetOption(OPTION_PROXYHOST);
m_dlg.m_sPort = COptions::GetOption(OPTION_PROXYPORT);
m_dlg.m_bUseIEProxy = COptions::GetOptionVal(OPTION_USEIEPROXY);
m_dlg.UpdateData(FALSE);
m_dlg.OnInitDialog();
m_dlg.MoveWindow(0, 0, 250, 130);
m_dlg.ShowWindow(SW_SHOW);
m_dlg.RedrawWindow();
m_dlg.SetFocus();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConnectProxyDlg::OnOK()
{
m_dlg.UpdateData(TRUE);
COptions::SetOption(OPTION_PROXYHOST, m_dlg.m_sHost);
COptions::SetOption(OPTION_PROXYPORT, m_dlg.m_sPort);
COptions::SetOption(OPTION_USEIEPROXY, m_dlg.m_bUseIEProxy);
CDialog::OnOK();
}
@@ -0,0 +1,30 @@
#pragma once
#include "ConfigSubDlg.h"
#include "ConfigProxyDlg.h"
// CConnectProxyDlg 대화 상자입니다.
class CConnectProxyDlg : public CDialog
{
DECLARE_DYNAMIC(CConnectProxyDlg)
public:
CConnectProxyDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConnectProxyDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONNECT_PROXY };
protected:
CConfigProxyDlg m_dlg;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
protected:
virtual void OnOK();
};
@@ -0,0 +1,411 @@
// SPConsole.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "MainFrm.h"
#include "CustomControlSite.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CSPConsoleApp
BEGIN_MESSAGE_MAP(CSPConsoleApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
END_MESSAGE_MAP()
// CSPConsoleApp 생성
CSPConsoleApp::CSPConsoleApp()
{
m_pimpldisp = NULL;
}
CSPConsoleApp::~CSPConsoleApp()
{
if (m_pimpldisp)
delete m_pimpldisp;
}
// 유일한 CSPConsoleApp 개체입니다.
CSPConsoleApp theApp;
// CSPConsoleApp 초기화
BOOL CSPConsoleApp::InitInstance()
{
// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControls()가 필요합니다.
// InitCommonControls()를 사용하지 않으면 창을 만들 수 없습니다.
InitCommonControls();
CWinApp::InitInstance();
// OLE 라이브러리를 초기화합니다.
if (!AfxOleInit()) {
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
CCustomOccManager *poccmgr = new CCustomOccManager;
m_pimpldisp = new CImpIDispatch;
AfxEnableControlContainer(poccmgr);
CString strCmd = m_lpCmdLine;
if (strCmd.IsEmpty())
{
char szPath[MAX_PATH]={0};
GetCurrentPath(szPath);
CString strPath;
strPath.Format("%s\\SP-Updater.exe",szPath);
#ifndef _DEBUG
ShellExecute(NULL,"open",strPath,NULL,NULL,SW_SHOW);
return FALSE;
#endif
}
HANDLE hMutex;
do
{
hMutex = ::CreateMutex(NULL, TRUE, _T("SP-UpdaterXXXXXXXXXXXXXXX"));
}while(GetLastError() == ERROR_ALREADY_EXISTS);
CloseHandle(hMutex);
// 업데이터 업데이트 - 업데이터에 의해 실행되는 경우 뿐이다.
if (strCmd == "1")
{
char szPath[MAX_PATH]={0};
GetCurrentPath(szPath);
CString strSrcPath;
CString strDesPath;
strSrcPath.Format("%s\\update\\SP-Updater.exe",szPath);
strDesPath.Format("%s\\SP-Updater.exe",szPath);
if(CopyFile(strSrcPath,strDesPath,FALSE))
DeleteFile(strSrcPath);
}
char szPath[MAX_PATH]={0};
GetCurrentPath(szPath);
CString strPath;
strPath.Format(_T("%s\\%s"),szPath,CFG_FILENAME);
COptions::Init(strPath);
CMainFrame* pFrame = new CMainFrame;
if (!pFrame)
return FALSE;
m_pMainWnd = pFrame;
if (pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW, NULL, NULL)) {
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
}
#ifdef _DEBUG
AfxCheckMemory();
#endif
return TRUE;
}
// CSPConsoleApp 메시지 처리기
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 대화 상자 데이터
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// 대화 상자를 실행하기 위한 응용 프로그램 명령입니다.
void CSPConsoleApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
// CSPConsoleApp 메시지 처리기
// 사용자 정의 함수
CString GetErrorMessage(DWORD dwError)
{
CString sError;
LPVOID lpBuffer;
if (!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpBuffer, 0, NULL))
sError = "알 수 없는 오류입니다.";
else
sError = (LPCTSTR)lpBuffer;
LocalFree(lpBuffer);
return sError;
}
BOOL DeleteDirectory(CString sDirectory)
{
/*
// no UI
if (sDirectory.Right(1) != _T("\\"))
sDirectory += _T("\\");
sDirectory += _T("*");
CFileFind finder;
BOOL bFound = finder.FindFile(sDirectory);
while (bFound) {
bFound = finder.FindNextFile();
if (finder.IsDots())
continue;
if (finder.IsDirectory()) {
if (!DeleteDirectory(finder.GetFilePath()))
return false;
}
else {
if (!DeleteFile(finder.GetFilePath()))
return false;
}
}
finder.Close();
sDirectory = sDirectory.Left(sDirectory.ReverseFind('\\'));
RemoveDirectory(sDirectory);
return true;
*/
// UI
if (sDirectory.Right(1) == _T("\\"))
sDirectory.Delete(sDirectory.GetLength());
char szPath[MAX_PATH];
ZeroMemory(szPath, sizeof(szPath));
CopyMemory(szPath, sDirectory, sDirectory.GetLength());
SHFILEOPSTRUCT shfo = {0};
shfo.hwnd = NULL;
shfo.wFunc = FO_DELETE;
shfo.pFrom = szPath;
shfo.pTo = NULL;
shfo.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI;
shfo.fAnyOperationsAborted = false;
shfo.hNameMappings = NULL;
shfo.lpszProgressTitle = NULL;
return SHFileOperation(&shfo) == 0;
}
int KrCompare(LPCTSTR pszText1, LPCTSTR pszText2)
{
int nLen = (int)strlen(pszText1);
PBYTE pbyText1 = (PBYTE)pszText1;
PBYTE pbyText2 = (PBYTE)pszText2;
BOOL bText1Alpha, bText2Alpha;
for (int i = 0; i < nLen; i++) {
if (pbyText2[i] == NULL)
return 1;
if (pbyText1[i] == pbyText2[i])
continue;
bText1Alpha = isalpha(pbyText1[i]);
bText2Alpha = isalpha(pbyText2[i]);
if (!bText1Alpha && bText2Alpha)
return -1;
if (bText1Alpha && !bText2Alpha)
return 1;
if (pbyText1[i] < pbyText2[i])
return -1;
if (pbyText1[i] > pbyText2[i])
return 1;
}
if (pbyText2[nLen] != NULL)
return -1;
return 0;
}
CString NumericFormat(__int64 nNumeric)
{
CString sNumeric;
sNumeric.Format("%I64d", nNumeric);
int nStartPos = sNumeric.GetLength();
for (int i = nStartPos, j = 0; i > 0; i--, j++) {
if (i != nStartPos && (j % 3) == 0)
sNumeric.Insert(i, ',');
}
return sNumeric;
}
CString NumericFormatWithPoint(long double nNumeric)
{
CString sNumeric;
sNumeric.Format("%.2f", nNumeric);
int nStartPos = sNumeric.Find('.');
for (int i = nStartPos, j = 0; i > 0; i--, j++) {
if (i != nStartPos && (j % 3) == 0)
sNumeric.Insert(i, ',');
}
return sNumeric;
}
CString BYTE2KMBYTE(__int64 nBytes, int nFlag, bool bShowDecimalPoint)
{
CString sValue;
char* szUnit[] = {"Bytes", "KB", "MB", "GB", "TB", "PT"};
if (nFlag == 0) {
for (nFlag = 5; nFlag > 0; nFlag--)
if (((UINT64)nBytes >> (nFlag * 10)) >= 1)
break;
}
double nPow = pow(1024.0, (double)nFlag);
if (bShowDecimalPoint && nFlag > 0)
sValue = NumericFormatWithPoint((long double)nBytes / nPow) + szUnit[nFlag];
else
sValue = NumericFormat((__int64)ceil((long double)nBytes / nPow)) + szUnit[nFlag];
return sValue;
}
CString GetValidFileName(LPCTSTR pszFileName)
{
CString sFileName = pszFileName;
if (sFileName.Find('/') >= 0 || sFileName.Find('\\') >= 0 || sFileName.Find(':') >= 0
|| sFileName.Find('*') >= 0 || sFileName.Find('?') >= 0 || sFileName.Find('"') >= 0
|| sFileName.Find('<') >= 0 || sFileName.Find('>') >= 0 || sFileName.Find('|') >= 0) {
AfxMessageBox("파일명에 다음과 같은 문자가 올 수 없습니다:\n/ \\ : * ? \" < > |", MB_ICONEXCLAMATION);
return "";
}
sFileName.Trim();
return sFileName;
}
bool IsPathItself(CString sSrcPath, CString sDstPath)
{
int nSrcLen = sSrcPath.GetLength();
if (nSrcLen > sDstPath.GetLength())
return false;
// 2012-05-21 trozan
// 상위 디렉토리를 하위 디렉토리로 이동 되는 버그 수정
int iPos = sDstPath.Find(sSrcPath);
if(iPos == 0)
return true;
iPos = sDstPath.Find(nSrcLen, '/');
if (iPos > 0)
sDstPath = sDstPath.Left(iPos);
return sSrcPath == sDstPath;
}
bool WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite)
{
DWORD dwWritten;
while (nNumberOfBytesToWrite > 0) {
if (!WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, &dwWritten, NULL))
return false;
nNumberOfBytesToWrite -= dwWritten;
}
return true;
}
int GetCurrentPath(char* pszPath)
{
char szPath[MAX_PATH*2]={0};
char* pData;
GetModuleFileName(NULL,szPath,MAX_PATH);
pData = strrchr(szPath,'\\');
__w64 int len = pData-szPath;
strncpy(pszPath,szPath,len);
pszPath[len] = 0; //cause wcsncpy does not appent null character
return (int)len;
}
#include "VERSION_INFO.h"
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
// 2014.07.16
CString strAbout;
strAbout.Format("SP-Console Version %s", STRFILEVER);
GetDlgItem(IDC_STATIC_ABOUT)->SetWindowText(strAbout);
#ifdef _LGU
GetDlgItem(IDC_STATIC_COPYRIGHT)->SetWindowText("Copyright (C) LG Uplus Corporation All rights reserved");
#else //
GetDlgItem(IDC_STATIC_COPYRIGHT)->SetWindowText("Copyright (C) KT Corporation All rights reserved ");
#endif //
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
@@ -0,0 +1,41 @@
// SPConsole.h : SPConsole 응용 프로그램에 대한 주 헤더 파일
//
#pragma once
#ifndef __AFXWIN_H__
#error PCH에서 이 파일을 포함하기 전에 'stdafx.h'를 포함하십시오.
#endif
#include "resource.h" // 주 기호
#define WM_CANCEL_GETLIST WM_USER + 20
#define WM_CANCEL_MAKETREE WM_USER + 21
// CSPConsoleApp:
// 이 클래스의 구현에 대해서는 SPConsole.cpp을 참조하십시오.
//
int GetCurrentPath(char* pszPath);
class CSPConsoleApp : public CWinApp
{
public:
CSPConsoleApp();
~CSPConsoleApp();
public:
class CImpIDispatch* m_pimpldisp;
CString m_sAppPath;
// 재정의
public:
virtual BOOL InitInstance();
// 구현
public:
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
};
extern CSPConsoleApp theApp;
@@ -0,0 +1,718 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 한국어(대한민국) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
#pragma code_page(949)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n"
"LANGUAGE 18, 1\r\n"
"#pragma code_page(949)\r\n"
"#include ""res\\ConsoleApp.rc2"" // Microsoft Visual C++에서 편집되지 않은 리소스\r\n"
"#include ""afxres.rc"" // 표준 구성 요소\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//
1 RT_MANIFEST "res\\ConsoleApp.manifest"
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_SORT_NONE ICON "res\\SortNone.ico"
IDI_SORT_ASC ICON "res\\SortAsc.ico"
IDI_SORT_DESC ICON "res\\SortDesc.ico"
IDI_ANONY_FOLDER ICON "res\\AnonyFolder.ico"
/////////////////////////////////////////////////////////////////////////////
//
// GIF
//
IDR_ADVERT GIF "res\\Advert.gif"
IDR_WAIT GIF "res\\Wait.gif"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAINFRAME MENU
BEGIN
POPUP "파일(&F)"
BEGIN
MENUITEM "다시 접속\tCtrl+R", ID_FILE_RECONNECT
MENUITEM "접속 끊기\tCtrl+X", ID_FILE_DISCONNECT
MENUITEM SEPARATOR
MENUITEM "올리기", ID_FILE_UPLOAD
MENUITEM "내리기", ID_FILE_DOWNLOAD
MENUITEM SEPARATOR
MENUITEM "종료(&X)", ID_APP_EXIT
END
POPUP "보기(&V)"
BEGIN
MENUITEM "툴바", ID_VIEW_TOOLBAR
MENUITEM "가운데 툴바", ID_VIEW_MID_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "새로고침", ID_VIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "서버 트리", ID_VIEW_RTREE
POPUP "서버 리스트"
BEGIN
MENUITEM "큰 아이콘", ID_VIEW_RLIST_TYPE1
MENUITEM "아이콘", ID_VIEW_RLIST_TYPE2
MENUITEM "간단히", ID_VIEW_RLIST_TYPE3
MENUITEM "자세히", ID_VIEW_RLIST_TYPE4
END
MENUITEM "서버 상태바", ID_VIEW_RSTATUS
MENUITEM SEPARATOR
MENUITEM "로컬 트리", ID_VIEW_LTREE
POPUP "로컬 리스트"
BEGIN
MENUITEM "미리보기", ID_VIEW_LLIST_TYPE0
MENUITEM "큰 아이콘", ID_VIEW_LLIST_TYPE1
MENUITEM "아이콘", ID_VIEW_LLIST_TYPE2
MENUITEM "간단히", ID_VIEW_LLIST_TYPE3
MENUITEM "자세히", ID_VIEW_LLIST_TYPE4
END
MENUITEM "로컬 상태바", ID_VIEW_LSTATUS
END
POPUP "설정(&S)"
BEGIN
POPUP "덮어쓰기 설정"
BEGIN
MENUITEM "물어보기", ID_CFG_OVERWITE_ASK
MENUITEM SEPARATOR
MENUITEM "덮어쓰기", ID_CFG_OVERWITE1
MENUITEM "이어받기", ID_CFG_OVERWITE2
MENUITEM "이름변경", ID_CFG_OVERWITE3
MENUITEM "건너뛰기", ID_CFG_OVERWITE4
END
MENUITEM "설정\tCtrl+O", ID_CFG_CONFIG
END
POPUP "도움말(&H)"
BEGIN
MENUITEM "도움말(&H)", ID_HELP_HELP
MENUITEM "SP-Console 홈페이지(&G)", ID_HELP_HOMEPAGE
MENUITEM SEPARATOR
MENUITEM "SP-Console 정보(&A)", ID_APP_ABOUT
END
END
IDR_POP_LLIST MENU
BEGIN
POPUP "LIST"
BEGIN
MENUITEM "새 폴더", ID_LIST_NEWFOLDER
MENUITEM SEPARATOR
MENUITEM "새로고침", ID_LIST_REFRESH
MENUITEM SEPARATOR
POPUP "보기"
BEGIN
MENUITEM "미리보기", ID_LIST_TYPE0
MENUITEM "큰 아이콘", 32891
MENUITEM "아이콘", 32892
MENUITEM "간단히", 32893
MENUITEM "자세히", 32894
END
POPUP "정렬순서"
BEGIN
MENUITEM "이름", ID_LIST_SORT1
MENUITEM "크기", ID_LIST_SORT2
MENUITEM "형식", ID_LIST_SORT3
MENUITEM "최종수정일", ID_LIST_SORT4
END
MENUITEM SEPARATOR
MENUITEM "붙여넣기", ID_LIST_PASTE
MENUITEM SEPARATOR
MENUITEM "모두선택", ID_LIST_ALL
END
END
IDR_POP_RTREE MENU
BEGIN
POPUP "TREE"
BEGIN
MENUITEM "잘라내기", ID_TREE_CUT
MENUITEM "붙여넣기", ID_TREE_PASTE
MENUITEM SEPARATOR
MENUITEM "삭제", ID_TREE_DELETE
MENUITEM "이름 바꾸기", ID_TREE_RENAME
MENUITEM SEPARATOR
MENUITEM "무인증 설정", ID_TREE_SETANONY
MENUITEM "무인증 해제", ID_TREE_UNSETANONY
MENUITEM SEPARATOR
MENUITEM "속성", ID_TREE_INFO
END
END
IDR_POP_RLISTFILE MENU
BEGIN
POPUP "LIST"
BEGIN
MENUITEM "다운로드", ID_LISTFILE_DOWNLOAD
MENUITEM SEPARATOR
MENUITEM "URL을 파일로 저장하기", ID_LISTFILE_SAVEURL
MENUITEM SEPARATOR
MENUITEM "잘라내기", ID_LISTFILE_CUT
MENUITEM "붙여넣기", ID_LISTFILE_PASTE
MENUITEM SEPARATOR
MENUITEM "삭제", ID_LISTFILE_DELETE
MENUITEM "이름 바꾸기", ID_LISTFILE_RENAME
END
END
IDR_POP_RLIST MENU
BEGIN
POPUP "LIST"
BEGIN
MENUITEM "새 폴더", ID_LIST_NEWFOLDER
MENUITEM SEPARATOR
MENUITEM "새로고침", ID_LIST_REFRESH
MENUITEM SEPARATOR
POPUP "보기"
BEGIN
MENUITEM "큰 아이콘", ID_LIST_TYPE1
MENUITEM "아이콘", ID_LIST_TYPE2
MENUITEM "간단히", ID_LIST_TYPE3
MENUITEM "자세히", ID_LIST_TYPE4
END
POPUP "정렬순서"
BEGIN
MENUITEM "이름", ID_LIST_SORT1
MENUITEM "크기", ID_LIST_SORT2
MENUITEM "형식", ID_LIST_SORT3
MENUITEM "최종수정일", ID_LIST_SORT4
END
MENUITEM SEPARATOR
MENUITEM "붙여넣기", ID_LIST_PASTE
MENUITEM SEPARATOR
MENUITEM "모두선택", ID_LIST_ALL
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_MAINFRAME ACCELERATORS
BEGIN
"O", ID_CFG_CONFIG, VIRTKEY, CONTROL, NOINVERT
"X", ID_FILE_DISCONNECT, VIRTKEY, CONTROL, NOINVERT
"R", ID_FILE_RECONNECT, VIRTKEY, CONTROL, NOINVERT
VK_F5, ID_VIEW_REFRESH, VIRTKEY, NOINVERT
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_VOLUME_INFO, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 223
TOPMARGIN, 7
BOTTOMMARGIN, 122
END
IDD_REMOTE_VIEW, DIALOG
BEGIN
RIGHTMARGIN, 37
END
IDD_CONNECT_PROXY, DIALOG
BEGIN
BOTTOMMARGIN, 104
END
IDD_CONNECT, DIALOG
BEGIN
END
IDD_CONFIG_COMMON, DIALOG
BEGIN
BOTTOMMARGIN, 132
END
IDD_CONFIG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 203
TOPMARGIN, 7
BOTTOMMARGIN, 192
END
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 189
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_BANDWIDTH, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 163
TOPMARGIN, 7
BOTTOMMARGIN, 58
END
IDD_VOLUME_INFO1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 223
TOPMARGIN, 7
BOTTOMMARGIN, 122
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_WAITMESSAGE DIALOGEX 0, 0, 193, 67
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "",IDC_PICTURE,"Static",SS_BLACKRECT,11,9,32,34,WS_EX_TRANSPARENT
LTEXT "처리중 입니다.",IDC_STC2,53,9,130,8
LTEXT "잠시만 기다려 주시기 바랍니다.",IDC_STC3,53,20,130,8
LTEXT "",IDC_STC,53,36,130,8
CONTROL "",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,11,52,130,8
PUSHBUTTON "취소",IDC_CANCEL_BTN,145,50,37,13
END
IDD_VOLUME_INFO DIALOGEX 0, 0, 230, 129
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "서비스정보"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,173,108,50,14
ICON "",IDC_STC_ICON,7,7,20,20
LTEXT "종류 :",IDC_STATIC,7,39,22,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,33,216,1
LTEXT "Static",IDC_STC_TYPE,35,39,188,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,52,216,1
LTEXT "사용 중인 공간 :",IDC_STC_USETITLE,7,58,58,8
LTEXT "사용 가능한 공간 :",IDC_STC_FREETITLE,7,70,66,8
RTEXT "Static",IDC_STC_USESPACE,76,58,98,8
RTEXT "999,999,999,999,999바이트",IDC_STC_FREESPACE,76,70,98,8
RTEXT "Static",IDC_STC_USESPACET,184,58,37,8
RTEXT "999.999TB",IDC_STC_FREESPACET,184,70,37,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,83,216,1
RTEXT "999,999,999,999,999바이트",IDC_STC_TOTALSPACE,76,88,98,8
RTEXT "999.999TB",IDC_STC_TOTALSPACET,184,88,37,8
EDITTEXT IDC_EDT_TITLE,37,12,186,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "전체 :",IDC_STC_TOTALTITLE,7,88,22,8
END
IDD_REMOTE_VIEW DIALOGEX 0, 0, 49, 12
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "",IDC_REMOTE_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_EDITLABELS | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | WS_BORDER | WS_TABSTOP,15,0,20,12
CONTROL "",IDC_REMOTE_LIST,"SysListView32",LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_EDITLABELS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,35,0,13,12
CONTROL "",IDC_REMOTE_CBO_ADDR,"ComboBoxEx32",CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP,0,0,16,189
END
IDD_CONNECT_PROXY DIALOGEX 0, 0, 134, 105
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "프락시 설정"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,42,85,40,14
PUSHBUTTON "취소",IDCANCEL,87,85,40,14
END
IDD_CONNECT DIALOGEX 0, 0, 238, 92
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "접속"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "접속",IDOK,32,70,50,14
PUSHBUTTON "닫기",IDCANCEL,93,70,50,14
LTEXT "아이디",IDC_STATIC,113,13,25,8
LTEXT "비밀번호",IDC_STATIC,113,29,33,8
EDITTEXT IDC_EDT_USERID,151,11,77,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_PASSWORD,151,27,77,12,ES_PASSWORD | ES_AUTOHSCROLL
CONTROL "자동접속",IDC_CHK_AUTOCONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,113,46,45,10
CONTROL "비밀번호저장",IDC_CHK_SAVEPASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,46,62,10
PUSHBUTTON "프락시설정",IDC_BTN_PROXY,154,70,50,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,9,62,224,1
CONTROL "",IDC_STC_LOGO,"Static",SS_BITMAP,10,12,15,13,WS_EX_TRANSPARENT
END
IDD_CONFIG_PROXY DIALOGEX 0, 0, 196, 133
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
EDITTEXT IDC_EDT_HOST,9,19,96,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_PORT,9,46,96,12,ES_AUTOHSCROLL
CONTROL "Internet Explorer 설정 사용",IDC_CHK_USE_IEPROXY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,66,166,10
LTEXT "호스트 :",IDC_STATIC,9,9,30,8
LTEXT "포트 :",IDC_STATIC,9,36,22,8
LTEXT "변경된 설정은 다음 프로그램 시작시부터 적용 됩니다.",IDC_STATIC,9,82,148,16
END
IDD_CONFIG_COMMON DIALOGEX 0, 0, 196, 134
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "전송 후 실행",IDC_STATIC,9,51,45,8
COMBOBOX IDC_CBO_AFTEREXEC,57,49,112,123,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "비밀번호 저장",IDC_CHK_SAVEPASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,111,23,67,8
GROUPBOX "로그인",IDC_STATIC,10,10,175,28
CONTROL "자동접속",IDC_CHK_AUTOCONNECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,23,59,8
END
IDD_CONFIG DIALOGEX 0, 0, 210, 199
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "SP-Console 설정"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,98,177,50,14
PUSHBUTTON "취소",IDCANCEL,153,177,50,14
CONTROL "",IDC_TAB,"SysTabControl32",TCS_FOCUSONBUTTONDOWN,7,24,196,146
LTEXT "Static",IDC_STC_TITLE,7,7,196,12
END
IDD_ABOUTBOX DIALOGEX 0, 0, 225, 53
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "SP-Console 정보"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON 128,IDC_STATIC,8,8,20,20
LTEXT "About",IDC_STATIC_ABOUT,35,7,181,8,SS_NOPREFIX
LTEXT "Copyright",IDC_STATIC_COPYRIGHT,35,20,180,8
DEFPUSHBUTTON "확인",IDOK,181,34,37,14,WS_GROUP
END
IDD_CONFIG_URL DIALOGEX 0, 0, 196, 134
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "하위폴더 검색",IDC_CHK_SEARCHSUB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,11,66,10
GROUPBOX "태그",IDC_STATIC,10,25,175,93
CONTROL "태그 사용 안함",IDC_RDO_TAG1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,21,40,68,10
CONTROL "<img 태그 사용",IDC_RDO_TAG2,"Button",BS_AUTORADIOBUTTON,21,54,68,10
CONTROL "<a href 태그 사용",IDC_RDO_TAG3,"Button",BS_AUTORADIOBUTTON,21,68,77,10
CONTROL "Custom 태그 사용",IDC_RDO_TAG4,"Button",BS_AUTORADIOBUTTON,21,82,76,10
EDITTEXT IDC_EDT_STAG,33,95,69,12,ES_AUTOHSCROLL
LTEXT "URL",IDC_STATIC,105,96,14,8
EDITTEXT IDC_EDT_ETAG,119,95,52,12,ES_AUTOHSCROLL
END
IDD_BANDWIDTH DIALOGEX 0, 0, 170, 65
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Bandwidth 설정"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,55,44,50,14
PUSHBUTTON "취소",IDCANCEL,113,44,50,14
LTEXT "경로 : ",IDC_STATIC,7,9,24,8
EDITTEXT IDC_EDT_PATH,33,7,130,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "레벨 : ",IDC_STATIC,7,24,24,8
COMBOBOX IDC_CBO_LEVEL,33,22,50,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
IDD_VOLUME_INFO1 DIALOGEX 0, 0, 230, 129
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "폴더/파일 정보"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,173,108,50,14
ICON "",IDC_STC_ICON,7,7,20,20
LTEXT "종류 :",IDC_STATIC,7,39,22,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,33,216,1
LTEXT "Static",IDC_STC_TYPE,35,39,188,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,52,216,1
LTEXT "파일 갯수 :",IDC_STC_USETITLE,7,58,40,8
LTEXT "총 사이즈 :",IDC_STC_FREETITLE,7,89,40,8
RTEXT "999,999",IDC_STC_USESPACE,76,58,98,8
RTEXT "999,999,999,999,999바이트",IDC_STC_FREESPACE,76,89,98,8
RTEXT "개",IDC_STC_USESPACET,184,58,37,8
RTEXT "999.999TB",IDC_STC_FREESPACET,184,89,37,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,103,216,1
EDITTEXT IDC_EDT_TITLE,37,12,186,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "폴더 갯수 :",IDC_STC_USETITLE2,7,70,40,8
RTEXT "999,999",IDC_STC_USESPACE2,76,70,98,8
RTEXT "개",IDC_STC_USESPACET2,184,70,37,8
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info
//
IDD_CONFIG_COMMON DLGINIT
BEGIN
IDC_CBO_AFTEREXEC, 0x403, 9, 0
0xe7bb, 0xebbf, 0xc8be, 0xd4c7, "\000"
IDC_CBO_AFTEREXEC, 0x403, 9, 0
0xceb7, 0xd7b1, 0xc0bf, 0xc1c7, "\000"
IDC_CBO_AFTEREXEC, 0x403, 14, 0
0xc3bd, 0xbabd, 0xdbc5, 0xc020, 0xbde7, 0xc0c3, 0x00db,
IDC_CBO_AFTEREXEC, 0x403, 12, 0
0xc3bd, 0xbabd, 0xdbc5, 0xc120, 0xb7be, 0x00e1,
0
END
IDD_BANDWIDTH DLGINIT
BEGIN
IDC_CBO_LEVEL, 0x403, 2, 0
0x0030,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0031,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0032,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0033,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0034,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0035,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0036,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0037,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0038,
IDC_CBO_LEVEL, 0x403, 2, 0
0x0039,
0
END
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_MAINFRAME BITMAP "res\\Toolbar.bmp"
IDB_TOOLBAR BITMAP "res\\ToolbarEx24x.bmp"
IDB_M_PASTE BITMAP "res\\mPaste.bmp"
IDB_M_FOLDER BITMAP "res\\mFolder.bmp"
IDB_M_CUT BITMAP "res\\mCut.bmp"
IDB_M_COPY BITMAP "res\\mCopy.bmp"
IDB_LOGO BITMAP "res\\Logo.bmp"
IDB_CAP_REMOTE BITMAP "res\\capRemote.bmp"
IDB_CAP_LOCAL BITMAP "res\\capLocal.bmp"
IDB_BTN_UPLOAD BITMAP "res\\btnUpload.bmp"
IDB_BTN_UP BITMAP "res\\btnUp.bmp"
IDB_BTN_TOOLBAR2 BITMAP "res\\btnToolbar2.bmp"
IDB_BTN_TOOLBAR1 BITMAP "res\\btnToolbar1.bmp"
IDB_BTN_NEWFOLDER BITMAP "res\\btnNewFolder.bmp"
IDB_BTN_LISTSTYLE BITMAP "res\\btnListstyle.bmp"
IDB_BTN_GO BITMAP "res\\btnGo.bmp"
IDB_BTN_DOWNLOAD BITMAP "res\\btnDownload.bmp"
IDB_BTN_DELETE BITMAP "res\\btnDelete.bmp"
IDB_MENUBAR BITMAP "res\\MenubarEx24x.bmp"
IDB_LOGO_LGU BITMAP "res\\logo_lgu.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
//
IDR_MAINFRAME TOOLBAR 16, 16
BEGIN
BUTTON ID_FILE_RECONNECT
BUTTON ID_FILE_DISCONNECT
SEPARATOR
BUTTON ID_VIEW_REFRESH
SEPARATOR
BUTTON ID_VIEW_RTREE
BUTTON ID_VIEW_LTREE
SEPARATOR
BUTTON ID_CFG_CONFIG
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDR_MAINFRAME "SP-Console"
IDS_COPY_NOT_ALLOWD "복사를 지원하지 않습니다."
END
STRINGTABLE
BEGIN
AFX_IDS_APP_TITLE "SP-Console"
AFX_IDS_IDLEMESSAGE "준비"
END
STRINGTABLE
BEGIN
ID_INDICATOR_EXT "EXT"
ID_INDICATOR_CAPS "CAP"
ID_INDICATOR_NUM "NUM"
ID_INDICATOR_SCRL "SCRL"
ID_INDICATOR_OVR "OVR"
ID_INDICATOR_REC "REC"
END
STRINGTABLE
BEGIN
ID_APP_ABOUT "프로그램 정보, 버전 번호, 저작권을 표시합니다.\n정보"
ID_APP_EXIT "문서를 저장할지를 묻고 응용 프로그램을 끝냅니다.\n끝내기"
END
STRINGTABLE
BEGIN
ID_NEXT_PANE "다음 창으로 전환합니다.\n다음 창"
ID_PREV_PANE "이전 창으로 전환합니다.\n이전 창"
END
STRINGTABLE
BEGIN
ID_WINDOW_SPLIT "활성 창을 여러 개의 창으로 분할합니다.\n분할"
END
STRINGTABLE
BEGIN
ID_EDIT_CLEAR "선택 영역을 지웁니다.\n지우기"
ID_EDIT_CLEAR_ALL "모든 것을 지웁니다.\n모두 지우기"
ID_EDIT_COPY "선택 영역을 복사하여 클립보드에 넣습니다.\n복사"
ID_EDIT_CUT "선택 영역을 잘라내어 클립보드에 넣습니다.\n잘라내기"
ID_EDIT_FIND "지정한 텍스트를 찾습니다.\n찾기"
ID_EDIT_PASTE "클립보드 내용을 삽입합니다.\n붙여넣기"
ID_EDIT_REPEAT "마지막 작업을 반복합니다.\n반복"
ID_EDIT_REPLACE "특정 텍스트를 다른 텍스트로 바꿉니다.\n바꾸기"
ID_EDIT_SELECT_ALL "전체 문서를 선택합니다.\n모두 선택"
ID_EDIT_UNDO "마지막 작업 실행을 취소합니다.\n실행 취소"
ID_EDIT_REDO "이전에 실행 취소된 작업을 다시 실행합니다.\n다시 실행"
END
STRINGTABLE
BEGIN
AFX_IDS_SCSIZE "창 크기를 변경합니다."
AFX_IDS_SCMOVE "창 위치를 변경합니다."
AFX_IDS_SCMINIMIZE "창을 아이콘으로 축소합니다."
AFX_IDS_SCMAXIMIZE "창을 전체 화면 크기로 확대합니다."
AFX_IDS_SCNEXTWINDOW "다음 문서 창으로 전환합니다."
AFX_IDS_SCPREVWINDOW "이전 문서 창으로 전환합니다."
AFX_IDS_SCCLOSE "문서를 저장할 것인지 확인하고 활성 창을 닫습니다."
END
STRINGTABLE
BEGIN
AFX_IDS_SCRESTORE "창을 보통 크기로 복원합니다."
AFX_IDS_SCTASKLIST "작업 목록 활성화"
END
STRINGTABLE
BEGIN
ID_INFORMATION "공지사항"
ID_INFORMATIONSTR "공지사항"
END
STRINGTABLE
BEGIN
ID_FILE_RECONNECT "재접속"
ID_FILE_DISCONNECT "로그아웃"
ID_VIEW_REFRESH "새로고침"
ID_VIEW_RTREE "서버트리"
END
STRINGTABLE
BEGIN
ID_VIEW_LTREE "로컬트리"
ID_CFG_CONFIG "설정"
END
STRINGTABLE
BEGIN
ID_VIEW_ALL "하위폴더보기"
END
#endif // 한국어(대한민국) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
LANGUAGE 18, 1
#pragma code_page(949)
#include "res\ConsoleApp.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
#include "afxres.rc" // 표준 구성 요소
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
@@ -0,0 +1,99 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2320E669-0FE5-4782-B8DB-DD979167C3E3}"
ProjectSection(SolutionItems) = preProject
..\Changelog.txt = ..\Changelog.txt
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleApp", "ConsoleApp_vs100.vcxproj", "{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommLib", "..\CommLib\CommLib_vs100.vcxproj", "{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleTransfer", "..\ConsoleTransfer\ConsoleTransfer_vs100.vcxproj", "{8CF33995-4DDD-492E-9533-F73F82AEC607}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleUpdater", "..\ConsoleUpdater\ConsoleUpdater_vs100.vcxproj", "{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_LGU|Win32 = Debug_LGU|Win32
Debug_Opendisk|Win32 = Debug_Opendisk|Win32
Debug|Win32 = Debug|Win32
Release_LGU|Win32 = Release_LGU|Win32
Release_Opendisk|Win32 = Release_Opendisk|Win32
Release|Win32 = Release|Win32
Unicode Debug|Win32 = Unicode Debug|Win32
Unicode Release|Win32 = Unicode Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.Build.0 = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(DPCodeReviewSolutionGUID) = preSolution
DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
EndGlobalSection
EndGlobal
@@ -0,0 +1,498 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug_LGU|Win32">
<Configuration>Debug_LGU</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug_Opendisk|Win32">
<Configuration>Debug_Opendisk</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_LGU|Win32">
<Configuration>Release_LGU</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release_Opendisk|Win32">
<Configuration>Release_Opendisk</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Template|Win32">
<Configuration>Template</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>ConsoleApp</ProjectName>
<ProjectGuid>{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}</ProjectGuid>
<RootNamespace>ConsoleApp</RootNamespace>
<Keyword>MFCProj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Dynamic</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Dynamic</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Dynamic</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Dynamic</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../_bin/SPConsole/Debug/</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">../_bin/SPConsole/Debug_LGU/</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Debug\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">Debug\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">true</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</GenerateManifest>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">true</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../_bin/SPConsole/Release</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">Release\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Release\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">Release\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Template|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Template|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Template|Win32'" />
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">SP-Console</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">SP-Console</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">SP-Console</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../Common/PTxControl;../Common;../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WINVER=0x0500;_WIN32_WINNT=0x0500;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Debug/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Debug/SP-Console.exe</OutputFile>
<AdditionalLibraryDirectories>../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/lib/vc100;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../Common/PTxControl;../Common;../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;WINVER=0x0500;_WIN32_WINNT=0x0500;_LGU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;_LGU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Debug_LGU/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Debug_LGU/SP-Console.exe</OutputFile>
<AdditionalLibraryDirectories>../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/lib/vc100;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>../Common/PTxControl;../common;../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;WINVER=0x0500;_WIN32_WINNT=0x0500;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Release/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Release/SP-Console.exe</OutputFile>
<AdditionalLibraryDirectories>../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/lib/vc100;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapExports>true</MapExports>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>../Common/PTxControl;../common;../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;WINVER=0x0500;_WIN32_WINNT=0x0500;_LGU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;_LGU;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/Source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Release_LGU/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Release_LGU/SP-Console.exe</OutputFile>
<AdditionalLibraryDirectories>../../../../tags/develop_component/CodeJock Software/MFC/Xtreme ToolkitPro v10.4.2/lib/vc100;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapExports>true</MapExports>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">
<Midl>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../Common/PTxControl;../Common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_OPENDISK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Debug/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Debug_OD/OD-Console.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">
<Midl>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MkTypLibCompatible>false</MkTypLibCompatible>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>../Common/PTxControl;../common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_OPENDISK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0412</Culture>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>../_lib/Release/SPCComm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>../_bin/SPConsole/Release_OD/OD-Console.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ConsoleApp.cpp" />
<ClCompile Include="..\Common\Crypt.cpp" />
<ClCompile Include="CustomControlSite.cpp" />
<ClCompile Include="..\Common\ImpIDispatch.cpp" />
<ClCompile Include="LocalView.cpp" />
<ClCompile Include="MainFrm.cpp" />
<ClCompile Include="..\Common\MarkupSTL.cpp" />
<ClCompile Include="..\Common\MFC64bitFix.cpp" />
<ClCompile Include="Options.cpp" />
<ClCompile Include="..\Common\RegUtil.cpp" />
<ClCompile Include="RemoteView.cpp" />
<ClCompile Include="RLDropTarget.cpp" />
<ClCompile Include="RTDropTarget.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\Common\GdStatic.cpp" />
<ClCompile Include="HCButton.cpp" />
<ClCompile Include="LocalComboBox.cpp" />
<ClCompile Include="LocalListCtrl.cpp" />
<ClCompile Include="LocalTreeCtrl.cpp" />
<ClCompile Include="..\Common\PictureEx.cpp" />
<ClCompile Include="RemoteComboBox.cpp" />
<ClCompile Include="RemoteListCtrl.cpp" />
<ClCompile Include="RemoteTreeCtrl.cpp" />
<ClCompile Include="..\Common\TextProgressCtrl.cpp" />
<ClCompile Include="..\Common\PTxControl\ptxshcombo.cpp" />
<ClCompile Include="..\Common\PTxControl\ptxshlist.cpp" />
<ClCompile Include="..\Common\PTxControl\ptxshtree.cpp" />
<ClCompile Include="..\Common\WebBrowser2.cpp" />
<ClCompile Include="BandwidthDlg.cpp" />
<ClCompile Include="ConfigCommonDlg.cpp" />
<ClCompile Include="ConfigDlg.cpp" />
<ClCompile Include="ConfigProxyDlg.cpp" />
<ClCompile Include="..\Common\ConfigSubDlg.cpp" />
<ClCompile Include="ConfigUrlDlg.cpp" />
<ClCompile Include="ConnectDlg.cpp" />
<ClCompile Include="ConnectProxyDlg.cpp" />
<ClCompile Include="VolumeInfo1Dlg.cpp" />
<ClCompile Include="VolumeInfoDlg.cpp" />
<ClCompile Include="WaitMessageDlg.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="ConsoleApp.h" />
<ClInclude Include="..\Common\Crypt.h" />
<ClInclude Include="CustomControlSite.h" />
<ClInclude Include="..\Common\ImpIDispatch.h" />
<ClInclude Include="LocalView.h" />
<ClInclude Include="MainFrm.h" />
<ClInclude Include="..\Common\MarkupSTL.h" />
<ClInclude Include="..\Common\MFC64bitFix.h" />
<ClInclude Include="Options.h" />
<ClInclude Include="..\Common\RegUtil.h" />
<ClInclude Include="..\..\Common\RegUtil.h" />
<ClInclude Include="RemoteView.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="RLDropTarget.h" />
<ClInclude Include="RTDropTarget.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="Struct.h" />
<ClInclude Include="..\Common\GdStatic.h" />
<ClInclude Include="HCButton.h" />
<ClInclude Include="LocalComboBox.h" />
<ClInclude Include="LocalListCtrl.h" />
<ClInclude Include="LocalTreeCtrl.h" />
<ClInclude Include="..\Common\PictureEx.h" />
<ClInclude Include="RemoteComboBox.h" />
<ClInclude Include="RemoteListCtrl.h" />
<ClInclude Include="RemoteTreeCtrl.h" />
<ClInclude Include="..\Common\TextProgressCtrl.h" />
<ClInclude Include="..\Common\PTxControl\PTxSCP.h" />
<ClInclude Include="..\Common\PTxControl\ptxshcombo.h" />
<ClInclude Include="..\Common\PTxControl\ptxshlist.h" />
<ClInclude Include="..\Common\PTxControl\ptxshtree.h" />
<ClInclude Include="..\Common\WebBrowser2.h" />
<ClInclude Include="BandwidthDlg.h" />
<ClInclude Include="ConfigCommonDlg.h" />
<ClInclude Include="ConfigDlg.h" />
<ClInclude Include="ConfigProxyDlg.h" />
<ClInclude Include="..\Common\ConfigSubDlg.h" />
<ClInclude Include="ConfigUrlDlg.h" />
<ClInclude Include="ConnectDlg.h" />
<ClInclude Include="ConnectProxyDlg.h" />
<ClInclude Include="VERSION_INFO.h" />
<ClInclude Include="VolumeInfo1Dlg.h" />
<ClInclude Include="VolumeInfoDlg.h" />
<ClInclude Include="WaitMessageDlg.h" />
</ItemGroup>
<ItemGroup>
<None Include="res\Advert.gif" />
<None Include="res\AnonyFolder.ico" />
<None Include="res\bitmap1.bmp" />
<None Include="res\btnDelete.bmp" />
<None Include="res\btnDownload.bmp" />
<None Include="res\btnGo.bmp" />
<None Include="res\btnListstyle.bmp" />
<None Include="res\btnNewFolder.bmp" />
<None Include="res\btnToolbar1.bmp" />
<None Include="res\btnToolbar2.bmp" />
<None Include="res\btnUp.bmp" />
<None Include="res\btnUpload.bmp" />
<None Include="res\capLocal.bmp" />
<None Include="res\capRemote.bmp" />
<None Include="res\ConsoleApp.rc2" />
<None Include="res\ConsoleApp_KT.ico" />
<None Include="res\ConsoleApp_LGU.ico" />
<None Include="res\ConsoleApp_OD.ico" />
<None Include="res\Down.ico" />
<None Include="res\Empty.ico" />
<None Include="res\icon1.ico" />
<None Include="res\Logo.bmp" />
<None Include="res\logo1.bmp" />
<None Include="res\logo_lgu.bmp" />
<None Include="res\Logo_old.bmp" />
<None Include="res\mCopy.bmp" />
<None Include="res\mCut.bmp" />
<None Include="res\MenubarEx24x.bmp" />
<None Include="res\mFolder.bmp" />
<None Include="res\mPaste.bmp" />
<None Include="res\SiteManager.bmp" />
<None Include="res\SortAsc.ico" />
<None Include="res\SortDesc.ico" />
<None Include="res\SortNone.ico" />
<None Include="res\systemhosting_logo.bmp" />
<None Include="res\Toolbar.bmp" />
<None Include="res\ToolbarEx24x.bmp" />
<None Include="res\Up.ico" />
<None Include="res\Wait.gif" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="ConsoleApp.rc" />
</ItemGroup>
<ItemGroup>
<CustomBuildStep Include="res\ConsoleApp.manifest">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_Opendisk|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug_LGU|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Opendisk|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_LGU|Win32'">true</ExcludedFromBuild>
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CommLib\CommLib_vs100.vcxproj">
<Project>{fd6f8a99-22b0-45fa-bab6-1cc3dd5aae2c}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Manifest Include="res\SP-Console.exe.manifest" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties RESOURCE_FILE="ConsoleApp.rc" />
</VisualStudio>
</ProjectExtensions>
</Project>
@@ -0,0 +1,418 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="소스 파일">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="소스 파일\Controls">
<UniqueIdentifier>{bd84e45c-9c39-48c4-8035-dc1b644c9db4}</UniqueIdentifier>
</Filter>
<Filter Include="소스 파일\Controls\OCX">
<UniqueIdentifier>{aaf61275-1660-4daa-b187-8e759137e9d6}</UniqueIdentifier>
</Filter>
<Filter Include="소스 파일\Dialogs">
<UniqueIdentifier>{b118b810-5815-4e2c-b410-07c31340b2ed}</UniqueIdentifier>
</Filter>
<Filter Include="헤더 파일">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="헤더 파일\Controls">
<UniqueIdentifier>{98ff6ff1-f7a0-4609-a6bf-05a9b76fe2ed}</UniqueIdentifier>
</Filter>
<Filter Include="헤더 파일\Controls\OCX">
<UniqueIdentifier>{fa5fb2aa-a3a7-459b-8793-9c4c8d84fac4}</UniqueIdentifier>
</Filter>
<Filter Include="헤더 파일\Dialogs">
<UniqueIdentifier>{b9d0ae21-0ec1-44d2-8962-d1f14ccdf7d5}</UniqueIdentifier>
</Filter>
<Filter Include="리소스 파일">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ConsoleApp.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\Crypt.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="CustomControlSite.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\ImpIDispatch.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="LocalView.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="MainFrm.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\MarkupSTL.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\MFC64bitFix.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="Options.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\RegUtil.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="RemoteView.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="RLDropTarget.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="RTDropTarget.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="stdafx.cpp">
<Filter>소스 파일</Filter>
</ClCompile>
<ClCompile Include="..\Common\GdStatic.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="HCButton.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="LocalComboBox.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="LocalListCtrl.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="LocalTreeCtrl.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="..\Common\PictureEx.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="RemoteComboBox.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="RemoteListCtrl.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="RemoteTreeCtrl.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="..\Common\TextProgressCtrl.cpp">
<Filter>소스 파일\Controls</Filter>
</ClCompile>
<ClCompile Include="..\Common\PTxControl\ptxshcombo.cpp">
<Filter>소스 파일\Controls\OCX</Filter>
</ClCompile>
<ClCompile Include="..\Common\PTxControl\ptxshlist.cpp">
<Filter>소스 파일\Controls\OCX</Filter>
</ClCompile>
<ClCompile Include="..\Common\PTxControl\ptxshtree.cpp">
<Filter>소스 파일\Controls\OCX</Filter>
</ClCompile>
<ClCompile Include="..\Common\WebBrowser2.cpp">
<Filter>소스 파일\Controls\OCX</Filter>
</ClCompile>
<ClCompile Include="BandwidthDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConfigCommonDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConfigDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConfigProxyDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="..\Common\ConfigSubDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConfigUrlDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConnectDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="ConnectProxyDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="VolumeInfo1Dlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="VolumeInfoDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
<ClCompile Include="WaitMessageDlg.cpp">
<Filter>소스 파일\Dialogs</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ConsoleApp.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\Crypt.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="CustomControlSite.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\ImpIDispatch.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="LocalView.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="MainFrm.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\MarkupSTL.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\MFC64bitFix.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="Options.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\RegUtil.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\..\Common\RegUtil.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="RemoteView.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="Resource.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="RLDropTarget.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="RTDropTarget.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="Struct.h">
<Filter>헤더 파일</Filter>
</ClInclude>
<ClInclude Include="..\Common\GdStatic.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="HCButton.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="LocalComboBox.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="LocalListCtrl.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="LocalTreeCtrl.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="..\Common\PictureEx.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="RemoteComboBox.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="RemoteListCtrl.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="RemoteTreeCtrl.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="..\Common\TextProgressCtrl.h">
<Filter>헤더 파일\Controls</Filter>
</ClInclude>
<ClInclude Include="..\Common\PTxControl\PTxSCP.h">
<Filter>헤더 파일\Controls\OCX</Filter>
</ClInclude>
<ClInclude Include="..\Common\PTxControl\ptxshcombo.h">
<Filter>헤더 파일\Controls\OCX</Filter>
</ClInclude>
<ClInclude Include="..\Common\PTxControl\ptxshlist.h">
<Filter>헤더 파일\Controls\OCX</Filter>
</ClInclude>
<ClInclude Include="..\Common\PTxControl\ptxshtree.h">
<Filter>헤더 파일\Controls\OCX</Filter>
</ClInclude>
<ClInclude Include="..\Common\WebBrowser2.h">
<Filter>헤더 파일\Controls\OCX</Filter>
</ClInclude>
<ClInclude Include="BandwidthDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConfigCommonDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConfigDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConfigProxyDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="..\Common\ConfigSubDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConfigUrlDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConnectDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="ConnectProxyDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="VolumeInfo1Dlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="VolumeInfoDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="WaitMessageDlg.h">
<Filter>헤더 파일\Dialogs</Filter>
</ClInclude>
<ClInclude Include="VERSION_INFO.h">
<Filter>헤더 파일</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="res\Advert.gif">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\AnonyFolder.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\bitmap1.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnDelete.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnDownload.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnGo.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnListstyle.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnNewFolder.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnToolbar1.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnToolbar2.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnUp.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\btnUpload.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\capLocal.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\capRemote.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\ConsoleApp.rc2">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\ConsoleApp_OD.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Down.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Empty.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\icon1.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Logo.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Logo_old.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\mCopy.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\mCut.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\MenubarEx24x.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\mFolder.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\mPaste.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\SiteManager.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\SortAsc.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\SortDesc.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\SortNone.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\systemhosting_logo.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Toolbar.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\ToolbarEx24x.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Up.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\Wait.gif">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\ConsoleApp_LGU.ico">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\logo1.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\logo_lgu.bmp">
<Filter>리소스 파일</Filter>
</None>
<None Include="res\ConsoleApp_KT.ico">
<Filter>리소스 파일</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="ConsoleApp.rc">
<Filter>리소스 파일</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<CustomBuildStep Include="res\ConsoleApp.manifest" />
</ItemGroup>
<ItemGroup>
<Manifest Include="res\SP-Console.exe.manifest" />
</ItemGroup>
</Project>
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
@@ -0,0 +1,127 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleApp", "ConsoleApp_vs80.vcproj", "{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
ProjectSection(ProjectDependencies) = postProject
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C} = {FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommLib", "..\CommLib\CommLib_vs80.vcproj", "{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleTransfer", "..\ConsoleTransfer\ConsoleTransfer_vs80.vcproj", "{8CF33995-4DDD-492E-9533-F73F82AEC607}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
ProjectSection(ProjectDependencies) = postProject
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C} = {FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleUpdater", "..\ConsoleUpdater\ConsoleUpdater_vs80.vcproj", "{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2320E669-0FE5-4782-B8DB-DD979167C3E3}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
ProjectSection(SolutionItems) = preProject
..\Changelog.txt = ..\Changelog.txt
ReadMe.txt = ReadMe.txt
..\SP-Console.ini = ..\SP-Console.ini
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_LGU|Win32 = Debug_LGU|Win32
Debug_Opendisk|Win32 = Debug_Opendisk|Win32
Debug|Win32 = Debug|Win32
Release_LGU|Win32 = Release_LGU|Win32
Release_Opendisk|Win32 = Release_Opendisk|Win32
Release|Win32 = Release|Win32
Unicode Debug|Win32 = Unicode Debug|Win32
Unicode Release|Win32 = Unicode Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.Build.0 = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(DPCodeReviewSolutionGUID) = preSolution
DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,107 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2320E669-0FE5-4782-B8DB-DD979167C3E3}"
ProjectSection(SolutionItems) = preProject
..\Changelog.txt = ..\Changelog.txt
readme.txt = readme.txt
..\SP-Console.ini = ..\SP-Console.ini
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleApp", "ConsoleApp_vs90.vcproj", "{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}"
ProjectSection(ProjectDependencies) = postProject
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C} = {FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommLib", "..\CommLib\CommLib_vs90.vcproj", "{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleTransfer", "..\ConsoleTransfer\ConsoleTransfer_vs90.vcproj", "{8CF33995-4DDD-492E-9533-F73F82AEC607}"
ProjectSection(ProjectDependencies) = postProject
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C} = {FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleUpdater", "..\ConsoleUpdater\ConsoleUpdater_vs90.vcproj", "{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_LGU|Win32 = Debug_LGU|Win32
Debug_Opendisk|Win32 = Debug_Opendisk|Win32
Debug|Win32 = Debug|Win32
Release_LGU|Win32 = Release_LGU|Win32
Release_Opendisk|Win32 = Release_Opendisk|Win32
Release|Win32 = Release|Win32
Unicode Debug|Win32 = Unicode Debug|Win32
Unicode Release|Win32 = Unicode Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release|Win32.Build.0 = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug|Win32.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_LGU|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_LGU|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release|Win32.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug|Win32.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release|Win32.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug|Win32.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.ActiveCfg = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_LGU|Win32.Build.0 = Debug_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.ActiveCfg = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk|Win32.Build.0 = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.ActiveCfg = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_LGU|Win32.Build.0 = Release_LGU|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.ActiveCfg = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk|Win32.Build.0 = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release|Win32.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug|Win32.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(DPCodeReviewSolutionGUID) = preSolution
DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,204 @@
// CustomControlSite.cpp (IDispatch for Extending Dynamic HTML Object Model)
#include "stdafx.h"
// NOTE: THis line is a hardcoded reference to an MFC header file
// this path may need to be changed to refer to the location of VC5 install
// for successful compilation.
#undef AFX_DATA
#define AFX_DATA AFX_DATA_IMPORT
#undef AFX_DATA
#define AFX_DATA AFX_DATA_EXPORT
#include "ConsoleApp.h"
#include "CustomControlSite.h"
BEGIN_INTERFACE_MAP(CCustomControlSite, COleControlSite)
INTERFACE_PART(CCustomControlSite, IID_IDocHostUIHandler, DocHostUIHandler)
END_INTERFACE_MAP()
ULONG FAR EXPORT CCustomControlSite::XDocHostUIHandler::AddRef()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CCustomControlSite::XDocHostUIHandler::Release()
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::QueryInterface(REFIID riid, void **ppvObj)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
HRESULT hr = (HRESULT)pThis->ExternalQueryInterface(&riid, ppvObj);
return hr;
}
// * CImpIDocHostUIHandler::GetHostInfo
// *
// * Purpose: Called at initialization
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::GetHostInfo( DOCHOSTUIINFO* pInfo )
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_SCROLL_NO;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT;
return S_OK;
}
// * CImpIDocHostUIHandler::ShowUI
// *
// * Purpose: Called when MSHTML.DLL shows its UI
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ShowUI(
DWORD dwID,
IOleInPlaceActiveObject * /*pActiveObject*/,
IOleCommandTarget * pCommandTarget,
IOleInPlaceFrame * /*pFrame*/,
IOleInPlaceUIWindow * /*pDoc*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
// We've already got our own UI in place so just return S_OK
return S_OK;
}
// * CImpIDocHostUIHandler::HideUI
// *
// * Purpose: Called when MSHTML.DLL hides its UI
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::HideUI(void)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return S_OK;
}
// * CImpIDocHostUIHandler::UpdateUI
// *
// * Purpose: Called when MSHTML.DLL updates its UI
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::UpdateUI(void)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
// MFC is pretty good about updating it's UI in it's Idle loop so I don't do anything here
return S_OK;
}
// * CImpIDocHostUIHandler::EnableModeless
// *
// * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::EnableModeless
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::EnableModeless(BOOL /*fEnable*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
// * CImpIDocHostUIHandler::OnDocWindowActivate
// *
// * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnDocWindowActivate
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::OnDocWindowActivate(BOOL /*fActivate*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
// * CImpIDocHostUIHandler::OnFrameWindowActivate
// *
// * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::OnFrameWindowActivate
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::OnFrameWindowActivate(BOOL /*fActivate*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
// * CImpIDocHostUIHandler::ResizeBorder
// *
// * Purpose: Called from MSHTML.DLL's IOleInPlaceActiveObject::ResizeBorder
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ResizeBorder(
LPCRECT /*prcBorder*/,
IOleInPlaceUIWindow* /*pUIWindow*/,
BOOL /*fRameWindow*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
// * CImpIDocHostUIHandler::ShowContextMenu
// *
// * Purpose: Called when MSHTML.DLL would normally display its context menu
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::ShowContextMenu(
DWORD /*dwID*/,
POINT* /*pptPosition*/,
IUnknown* /*pCommandTarget*/,
IDispatch* /*pDispatchObjectHit*/)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return S_OK; // We've shown our own context menu. MSHTML.DLL will no longer try to show its own.
}
// * CImpIDocHostUIHandler::TranslateAccelerator
// *
// * Purpose: Called from MSHTML.DLL's TranslateAccelerator routines
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::TranslateAccelerator(
LPMSG lpMsg,
/* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
/* [in] */ DWORD nCmdID)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return S_FALSE;
}
// * CImpIDocHostUIHandler::GetOptionKeyPath
// *
// * Purpose: Called by MSHTML.DLL to find where the host wishes to store
// * its options in the registry
// *
HRESULT FAR EXPORT CCustomControlSite::XDocHostUIHandler::GetOptionKeyPath(BSTR* pbstrKey, DWORD)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetDropTarget(
/* [in] */ IDropTarget __RPC_FAR *pDropTarget,
/* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::GetExternal(
/* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch)
{
// return the IDispatch we have for extending the object Model
IDispatch* pDisp = (IDispatch*)theApp.m_pimpldisp;
pDisp->AddRef();
*ppDispatch = pDisp;
return S_OK;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::TranslateUrl(
/* [in] */ DWORD dwTranslate,
/* [in] */ OLECHAR __RPC_FAR *pchURLIn,
/* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
STDMETHODIMP CCustomControlSite::XDocHostUIHandler::FilterDataObject(
/* [in] */ IDataObject __RPC_FAR *pDO,
/* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet)
{
METHOD_PROLOGUE(CCustomControlSite, DocHostUIHandler)
return E_NOTIMPL;
}
@@ -0,0 +1,76 @@
// CustomControlSite.h
#ifndef __CUSTOMSITEH__
#define __CUSTOMSITEH__
#pragma once
#include "ImpIDispatch.h"
#include <afxocc.h>
#include <mshtmhst.h>
class CCustomControlSite:public COleControlSite
{
public:
CCustomControlSite(COleControlContainer *pCnt):COleControlSite(pCnt){}
protected:
DECLARE_INTERFACE_MAP();
BEGIN_INTERFACE_PART(DocHostUIHandler, IDocHostUIHandler)
STDMETHOD(ShowContextMenu)(
/* [in] */ DWORD dwID,
/* [in] */ POINT __RPC_FAR *ppt,
/* [in] */ IUnknown __RPC_FAR *pcmdtReserved,
/* [in] */ IDispatch __RPC_FAR *pdispReserved);
STDMETHOD(GetHostInfo)(
/* [out][in] */ DOCHOSTUIINFO __RPC_FAR *pInfo);
STDMETHOD(ShowUI)(
/* [in] */ DWORD dwID,
/* [in] */ IOleInPlaceActiveObject __RPC_FAR *pActiveObject,
/* [in] */ IOleCommandTarget __RPC_FAR *pCommandTarget,
/* [in] */ IOleInPlaceFrame __RPC_FAR *pFrame,
/* [in] */ IOleInPlaceUIWindow __RPC_FAR *pDoc);
STDMETHOD(HideUI)(void);
STDMETHOD(UpdateUI)(void);
STDMETHOD(EnableModeless)(/* [in] */ BOOL fEnable);
STDMETHOD(OnDocWindowActivate)(/* [in] */ BOOL fEnable);
STDMETHOD(OnFrameWindowActivate)(/* [in] */ BOOL fEnable);
STDMETHOD(ResizeBorder)(
/* [in] */ LPCRECT prcBorder,
/* [in] */ IOleInPlaceUIWindow __RPC_FAR *pUIWindow,
/* [in] */ BOOL fRameWindow);
STDMETHOD(TranslateAccelerator)(
/* [in] */ LPMSG lpMsg,
/* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
/* [in] */ DWORD nCmdID);
STDMETHOD(GetOptionKeyPath)(
/* [out] */ LPOLESTR __RPC_FAR *pchKey,
/* [in] */ DWORD dw);
STDMETHOD(GetDropTarget)(
/* [in] */ IDropTarget __RPC_FAR *pDropTarget,
/* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget);
STDMETHOD(GetExternal)(
/* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch);
STDMETHOD(TranslateUrl)(
/* [in] */ DWORD dwTranslate,
/* [in] */ OLECHAR __RPC_FAR *pchURLIn,
/* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut);
STDMETHOD(FilterDataObject)(
/* [in] */ IDataObject __RPC_FAR *pDO,
/* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet);
END_INTERFACE_PART(DocHostUIHandler)
};
class CCustomOccManager :public COccManager
{
public:
CCustomOccManager(){}
COleControlSite* CreateSite(COleControlContainer* pCtrlCont)
{
CCustomControlSite *pSite = new CCustomControlSite(pCtrlCont);
return pSite;
}
};
#endif
@@ -0,0 +1,51 @@
// HCButton.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "HCButton.h"
// CHCButton
IMPLEMENT_DYNAMIC(CHCButton, CBitmapButton)
CHCButton::CHCButton()
{
}
CHCButton::~CHCButton()
{
}
BEGIN_MESSAGE_MAP(CHCButton, CBitmapButton)
ON_WM_MOUSEMOVE()
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
// CHCButton 메시지 처리기입니다.
void CHCButton::OnMouseMove(UINT nFlags, CPoint point)
{
//::SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadStandardCursor(IDC_HAND);
::SetCursor(hCursor);
CBitmapButton::OnMouseMove(nFlags, point);
}
BOOL CHCButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadStandardCursor(IDC_HAND);
::SetCursor(hCursor);
return TRUE;
return CBitmapButton::OnSetCursor(pWnd, nHitTest, message);
}
@@ -0,0 +1,21 @@
#pragma once
// CHCButton
class CHCButton : public CBitmapButton
{
DECLARE_DYNAMIC(CHCButton)
public:
CHCButton();
virtual ~CHCButton();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};
@@ -0,0 +1,35 @@
// LocalComboBox.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "LocalComboBox.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLocalComboBox
CLocalComboBox::CLocalComboBox()
{
}
CLocalComboBox::~CLocalComboBox()
{
}
#ifdef _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalComboBox, CXTComboBoxEx)
#else // _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalComboBox, CComboBox)
#endif // _USE_XTREME_TOOLKITPRO
//{{AFX_MSG_MAP(CLocalComboBox)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocalComboBox message handlers
@@ -0,0 +1,47 @@
// LocalComboBox.h : header file
//
#pragma once
#ifdef _USE_XTREME_TOOLKITPRO
#else // _USE_XTREME_TOOLKITPRO
#include "ptxshcombo.h"
#endif // _USE_XTREME_TOOLKITPRO
/////////////////////////////////////////////////////////////////////////////
// CLocalComboBox window
#ifdef _USE_XTREME_TOOLKITPRO
class CLocalComboBox : public CXTComboBoxEx
#else // _USE_XTREME_TOOLKITPRO
class CLocalComboBox : public CPTxShCombo
#endif // _USE_XTREME_TOOLKITPRO
{
// Construction
public:
CLocalComboBox();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLocalComboBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CLocalComboBox();
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CLocalComboBox)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
};
@@ -0,0 +1,323 @@
// LocalListCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "LocalListCtrl.h"
#include "MainFrm.h"
#include "LocalView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL DeleteDirectory(CString sDirectory);
/////////////////////////////////////////////////////////////////////////////
// CLocalListCtrl
CLocalListCtrl::CLocalListCtrl()
{
}
CLocalListCtrl::~CLocalListCtrl()
{
}
#ifdef _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalListCtrl, CXTShellListCtrl)
#else // _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalListCtrl, CListCtrl)
#endif // _USE_XTREME_TOOLKITPRO
//{{AFX_MSG_MAP(CLocalListCtrl)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocalListCtrl message handlers
BOOL CLocalListCtrl::PreTranslateMessage(MSG* pMsg)
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
switch (pMsg->message)
{
case WM_SETFOCUS:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
pmf->SetFocus(this);
break;
case WM_KEYDOWN:
if (GetKeyState(VK_CONTROL) & 128) {
if (pMsg->wParam == VK_D) {
DeleteSelectedItem();
return TRUE;
}
else if (pMsg->wParam == VK_V) {
if (PasteClipboard())
return TRUE;
}
}
break;
}
return CListCtrl::PreTranslateMessage(pMsg);
}
void CLocalListCtrl::DeleteSelectedItem()
{
if (AfxMessageBox("선택된 파일을 삭제하시겠습니까?", MB_YESNO) != IDYES)
return;
#ifndef _USE_XTREME_TOOLKITPRO
IPTxShListItems *pitems = (IPTxShListItems *)get_Items();
long nTotalCount;
pitems->get_Count(&nTotalCount);
VARIANT_BOOL bFileSystem;
IPTxShTreeNode *pnode = (IPTxShTreeNode*)((CLocalView*)GetParent())->m_tree.get_SelectedNode();
pnode->get_IsFileSystem(&bFileSystem);
if (bFileSystem) {
IPTxShListItem *pitem;
for (int i = 0; i < nTotalCount; i++) {
pitems->get_Item(i, &pitem);
VARIANT_BOOL bSelected;
pitem->get_Selected(&bSelected);
if (!bSelected)
continue;
BSTR bstr;
pitem->get_PathName(&bstr);
CString sPath(bstr);
::SysFreeString(bstr);
if (sPath == "")
continue;
DWORD dwAttr = GetFileAttributes(sPath);
if (dwAttr == INVALID_FILE_ATTRIBUTES)
continue;
if (dwAttr & FILE_ATTRIBUTE_DIRECTORY)
DeleteDirectory(sPath);
else
DeleteFile(sPath);
}
Refresh();
}
#endif // !_USE_XTREME_TOOLKITPRO
}
BOOL CLocalListCtrl::PasteClipboard(CString sFolder)
{
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CLocalTreeCtrl* ptree = &((CLocalView*)GetParent())->m_tree;
#ifndef _USE_XTREME_TOOLKITPRO
VARIANT_BOOL bFileSystem;
IPTxShTreeNode *pnode = (IPTxShTreeNode*)ptree->get_SelectedNode();
pnode->get_IsFileSystem(&bFileSystem);
if (!bFileSystem)
return FALSE;
BSTR bstr;
pnode->get_PathName(&bstr);
CString sPath(bstr);
::SysFreeString(bstr);
COleDataObject odo;
if (odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP))
return ((CLocalView*)GetParent())->CopyClipboard(odo, sPath);
if (pmf->m_cbs == CBS_NONE)
return FALSE;
if (pmf->m_saDragSource.GetCount() == 0)
return FALSE;
pmf->m_sDragTarget = sFolder == "" ? sPath : sFolder;
#endif // _USE_XTREME_TOOLKITPRO
return pmf->Download(false);
}
#ifdef _USE_XTREME_TOOLKITPRO
#define ISZIPFILE(dw) (BOOL)(dw & SFGAO_FOLDER) && (dw & SFGAO_STREAM)
BOOL CLocalListCtrl::InitListViewItems(XT_TVITEMDATA* lptvid, LPSHELLFOLDER lpsf)
{
CShellMalloc lpMalloc;
if (!lpMalloc)
return FALSE;
LPENUMIDLIST lpe = NULL;
if (FAILED(lpsf->EnumObjects(::GetParent(m_pListCtrl->m_hWnd), m_uFlags, &lpe)))
return FALSE;
if (lpe == NULL)
return FALSE;
int iCtr = 0;
ULONG ulFetched = 0;
LPITEMIDLIST lpi = NULL;
while (lpe->Next(1, &lpi, &ulFetched) == S_OK)
{
// Now get the friendly name that we'll put in the treeview...
CString szFileName, szFullFilePath;
GetName(lpsf, lpi, SHGDN_NORMAL, szFileName);
GetName(lpsf, lpi, SHGDN_FORPARSING, szFullFilePath);
// Note that since we are interested in the display attributes as well as
// the other attributes, we need to set ulAttrs to SFGAO_DISPLAYATTRMASK
// before calling GetAttributesOf();
ULONG ulAttrs = SFGAO_FOLDER | SFGAO_STREAM | SFGAO_FILESYSANCESTOR | SFGAO_DISPLAYATTRMASK | SFGAO_REMOVABLE | SFGAO_COMPRESSED | SFGAO_ENCRYPTED;
UINT uFlags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON;
lpsf->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lpi, &ulAttrs);
BOOL bIncludeFile = !IsItemFiltered(szFullFilePath, ulAttrs);
if (bIncludeFile)
{
// allocate memory for ITEMDATA struct
XT_LVITEMDATA* lplvid = (XT_LVITEMDATA*)lpMalloc.Alloc(sizeof(XT_LVITEMDATA));
if (lplvid == NULL)
{
if (lpe)
{
lpe->Release();
}
return FALSE;
}
lplvid->ulAttribs = ulAttrs;
LPITEMIDLIST lpifqThisItem = ConcatPidls(lpMalloc, lptvid->lpifq, lpi);
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvi.iItem = iCtr++;
lvi.iSubItem = 0;
lvi.pszText = (LPTSTR)(LPCTSTR)szFileName;
lvi.cchTextMax = 0;
lvi.iImage = GetItemIcon(lpifqThisItem, uFlags);
lplvid->lpsfParent = lpsf;
lpsf->AddRef();
// Make a copy of the ITEMIDLIST
lplvid->lpi = DuplicateItem(lpMalloc, lpi);
lvi.lParam = (LPARAM)lplvid;
// Add the item to the listview
int iIndex = m_pListCtrl->InsertItem(&lvi);
SetAttributes(iIndex, ulAttrs);
if (iIndex >= 0)
{
TCHAR szItemPath[_MAX_PATH];
::SHGetPathFromIDList(lpifqThisItem, szItemPath);
//if (((ulAttrs & SFGAO_FILESYSTEM) == SFGAO_FILESYSTEM) &&
// ((ulAttrs & SFGAO_FOLDER) == 0))
if (!(ulAttrs & SFGAO_FOLDER) || // folder
((ulAttrs & SFGAO_FOLDER) && (ulAttrs & SFGAO_STREAM))) // zip file
{
WIN32_FIND_DATA fdata;
HANDLE handle = ::FindFirstFile(szItemPath, &fdata);
if (handle != INVALID_HANDLE_VALUE)
{
{
LONGLONG fsize = fdata.nFileSizeHigh*((LONGLONG)ULONG_MAX + 1) + fdata.nFileSizeLow;
TCHAR szBuffer[16];
CString strSize;
strSize.Format(_T("%s KB"), InsertCommas((fsize + 1024)/1024, szBuffer, 15));
m_pListCtrl->SetItemText(iIndex, 1, strSize);
}
FILETIME ltime;
::FileTimeToLocalFileTime(&fdata.ftLastWriteTime, &ltime);
SYSTEMTIME time;
::FileTimeToSystemTime(&ltime, &time);
if ((time.wYear >= 1970 && time.wYear <= 2038) &&
(time.wMonth >= 1 && time.wMonth <= 12))
{
CTime cTime;
cTime = CTime(
time.wYear,
time.wMonth,
time.wDay,
time.wHour,
time.wMinute,
time.wSecond);
m_pListCtrl->SetItemText(iIndex, 3, cTime.Format(_T("%m/%d/%y %I:%M %p")));
}
else
{
m_pListCtrl->SetItemText(iIndex, 3, _T("")); // Invalid date
}
::FindClose(handle);
}
}
else
{
m_pListCtrl->SetItemText(iIndex, 2, _T("0 bytes"));
}
SHFILEINFO sfi;
::SHGetFileInfo((TCHAR*)lpifqThisItem, 0, &sfi,
sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_TYPENAME);
m_pListCtrl->SetItemText(iIndex, 2, sfi.szTypeName);
}
else
{
if (lpifqThisItem)
{
lpMalloc.Free(lpifqThisItem);
}
return FALSE;
}
if (lpifqThisItem)
{
lpMalloc.Free(lpifqThisItem);
}
}
// Free the pidl that the shell gave us.
if (lpi)
{
lpMalloc.Free(lpi);
lpi = NULL;
}
}
if (lpe)
{
lpe->Release();
}
return TRUE;
}
#endif // _USE_XTREME_TOOLKITPRO
@@ -0,0 +1,57 @@
// LocalListCtrl.h : header file
//
#pragma once
#ifdef _USE_XTREME_TOOLKITPRO
#else // _USE_XTREME_TOOLKITPRO
#include "ptxshlist.h"
#endif // _USE_XTREME_TOOLKITPRO
/////////////////////////////////////////////////////////////////////////////
// CLocalListCtrl window
#ifdef _USE_XTREME_TOOLKITPRO
class CLocalListCtrl : public CXTShellListCtrl
#else // _USE_XTREME_TOOLKITPRO
class CLocalListCtrl : public CPTxShList
#endif // _USE_XTREME_TOOLKITPRO
{
// Construction
public:
CLocalListCtrl();
// Attributes
public:
// Operations
protected:
void DeleteSelectedItem();
public:
BOOL PasteClipboard(CString sFolder = "");
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLocalListCtrl)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CLocalListCtrl();
protected:
virtual BOOL PreTranslateMessage(MSG* pMsg);
#ifdef _USE_XTREME_TOOLKITPRO
virtual BOOL InitListViewItems(XT_TVITEMDATA* lptvid, LPSHELLFOLDER lpsf);
#endif // _USE_XTREME_TOOLKITPRO
protected:
//{{AFX_MSG(CLocalListCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
};
@@ -0,0 +1,250 @@
// LocalTreeCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "LocalTreeCtrl.h"
#include "MainFrm.h"
#include "LocalView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL DeleteDirectory(CString sDirectory);
/////////////////////////////////////////////////////////////////////////////
// CLocalTreeCtrl
CLocalTreeCtrl::CLocalTreeCtrl()
{
}
CLocalTreeCtrl::~CLocalTreeCtrl()
{
}
#ifdef _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalTreeCtrl, CXTShellTreeCtrl)
#else // _USE_XTREME_TOOLKITPRO
BEGIN_MESSAGE_MAP(CLocalTreeCtrl, CTreeCtrl)
#endif // _USE_XTREME_TOOLKITPRO
//{{AFX_MSG_MAP(CLocalTreeCtrl)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocalTreeCtrl message handlers
BOOL CLocalTreeCtrl::PreTranslateMessage(MSG* pMsg)
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
switch (pMsg->message)
{
case WM_SETFOCUS:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
pmf->SetFocus(this);
break;
case WM_KEYDOWN:
if (GetKeyState(VK_CONTROL) & 128) {
if (pMsg->wParam == VK_D) {
DeleteSelectedItem();
return TRUE;
}
else if (pMsg->wParam == VK_V) {
if (PasteClipboard())
return TRUE;
}
}
break;
}
return CTreeCtrl::PreTranslateMessage(pMsg);
}
void CLocalTreeCtrl::DeleteSelectedItem()
{
#ifndef _USE_XTREME_TOOLKITPRO
IPTxShTreeNode* pnode = (IPTxShTreeNode*)get_SelectedNode();
if (((CLocalView*)GetParent())->m_pnodeRoot == pnode)
return;
if (AfxMessageBox("선택된 폴더를 삭제하시겠습니까?", MB_YESNO) != IDYES)
return;
VARIANT_BOOL bFileSystem;
pnode->get_IsFileSystem(&bFileSystem);
if (bFileSystem) {
BSTR bstr;
pnode->get_PathName(&bstr);
CString sPath(bstr);
::SysFreeString(bstr);
if (sPath == "")
return;
if (!DeleteDirectory(sPath))
return;
Refresh();
}
#endif // !_USE_XTREME_TOOLKITPRO
}
BOOL CLocalTreeCtrl::PasteClipboard()
{
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
#ifndef _USE_XTREME_TOOLKITPRO
VARIANT_BOOL bFileSystem;
IPTxShTreeNode *pnode = (IPTxShTreeNode*)get_SelectedNode();
pnode->get_IsFileSystem(&bFileSystem);
if (!bFileSystem)
return FALSE;
BSTR bstr;
pnode->get_PathName(&bstr);
CString sPath(bstr);
::SysFreeString(bstr);
COleDataObject odo;
if (odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP))
return ((CLocalView*)GetParent())->CopyClipboard(odo, sPath);
if (pmf->m_cbs == CBS_NONE)
return FALSE;
if (pmf->m_saDragSource.GetCount() == 0)
return FALSE;
pmf->m_sDragTarget = sPath;
#endif // !_USE_XTREME_TOOLKITPRO
return pmf->Download(false);
}
#ifdef _USE_XTREME_TOOLKITPRO
BOOL CLocalTreeCtrl::InitTreeViewItems(LPSHELLFOLDER lpsf, LPITEMIDLIST lpifq, HTREEITEM hParent)
{
CWaitCursor wait; // show wait cursor.
// Allocate a shell memory object.
CShellMalloc lpMalloc;
if (!lpMalloc)
return FALSE;
// Get the IEnumIDList object for the given folder.
LPENUMIDLIST lpe = NULL;
if (FAILED(lpsf->EnumObjects(::GetParent(m_pTreeCtrl->m_hWnd), m_uFlags, &lpe)))
return FALSE;
if (lpe == NULL)
return FALSE;
ULONG ulFetched = 0;
HTREEITEM hPrev = NULL;
LPITEMIDLIST lpi = NULL;
// Enumerate through the list of folder and non-folder objects.
while (lpe->Next(1, &lpi, &ulFetched) == S_OK)
{
// Create a fully qualified path to the current item
// the SH* shell api's take a fully qualified path pidl,
// (see GetIcon above where I call SHGetFileInfo) whereas the
// interface methods take a relative path pidl.
ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_DISPLAYATTRMASK | SFGAO_REMOVABLE | SFGAO_COMPRESSED | SFGAO_ENCRYPTED;
// Determine what type of object we have.
lpsf->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lpi, &ulAttrs);
// We need this next if statement so that we don't add things like
// the MSN to our tree. MSN is not a folder, but according to the
// shell it has subfolders.
if ((ulAttrs & SFGAO_FOLDER) || m_bShowFiles)
{
TV_ITEM tvi;
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
if ((ulAttrs & SFGAO_HASSUBFOLDER) || (m_bShowFiles && (ulAttrs & SFGAO_FOLDER)))
{
//This item has sub-folders, so let's put the + in the TreeView.
//The first time the user clicks on the item, we'll populate the
//sub-folders.
tvi.cChildren = 1;
tvi.mask |= TVIF_CHILDREN;
}
// Allocate memory for ITEMDATA struct
CString szBuff;
XT_TVITEMDATA* lptvid = (XT_TVITEMDATA*)lpMalloc.Alloc(sizeof(XT_TVITEMDATA));
if (lptvid == NULL || GetName(lpsf, lpi, SHGDN_NORMAL, szBuff) == FALSE)
{
if (lptvid)
{
lpMalloc.Free(lptvid);
}
if (lpe)
{
lpe->Release();
}
if (lpi)
{
lpMalloc.Free(lpi);
}
return FALSE;
}
// Now, make a copy of the ITEMIDLIST and store the parent folders SF.
lptvid->lpi = DuplicateItem(lpMalloc, lpi);
lptvid->lpsfParent = lpsf;
lptvid->lpifq = ConcatPidls(lpMalloc, lpifq, lpi);
lpsf->AddRef();
GetNormalAndSelectedIcons(lptvid->lpifq, &tvi);
tvi.lParam = (LPARAM)lptvid;
tvi.pszText = (LPTSTR)(LPCTSTR)szBuff;
tvi.cchTextMax = 0;
// Populate the TreeVeiw Insert Struct
// The item is the one filled above.
// Insert it after the last item inserted at this level.
// And indicate this is a root entry.
TV_INSERTSTRUCT tvins;
tvins.item = tvi;
tvins.hInsertAfter = hPrev;
tvins.hParent = hParent;
// Add the item to the tree
hPrev = m_pTreeCtrl->InsertItem(&tvins);
SetAttributes(hPrev, ulAttrs);
}
// Free the pidl that the shell gave us.
if (lpi)
{
lpMalloc.Free(lpi);
lpi = 0;
}
}
if (lpi)
{
lpMalloc.Free(lpi);
}
if (lpe)
{
lpe->Release();
}
return TRUE;
}
#endif // _USE_XTREME_TOOLKITPRO
@@ -0,0 +1,54 @@
// LocalTreeCtrl.h : header file
//
#pragma once
#ifdef _USE_XTREME_TOOLKITPRO
#else // _USE_XTREME_TOOLKITPRO
#include "ptxshtree.h"
#endif // _USE_XTREME_TOOLKITPRO
/////////////////////////////////////////////////////////////////////////////
// CLocalTreeCtrl window
#ifdef _USE_XTREME_TOOLKITPRO
class CLocalTreeCtrl : public CXTShellTreeCtrl
#else
class CLocalTreeCtrl : public CPTxShTree
#endif // USE_XTREME_TOOLKITPRO
{
// Construction
public:
CLocalTreeCtrl();
// Attributes
public:
// Operations
protected:
void DeleteSelectedItem();
public:
BOOL PasteClipboard();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLocalTreeCtrl)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CLocalTreeCtrl();
protected:
virtual BOOL PreTranslateMessage(MSG* pMsg);
#ifdef _USE_XTREME_TOOLKITPRO
virtual BOOL InitTreeViewItems(LPSHELLFOLDER lpsf, LPITEMIDLIST lpifq, HTREEITEM hParent);
#endif // _USE_XTREME_TOOLKITPRO
protected:
//{{AFX_MSG(CLocalTreeCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,176 @@
#pragma once
#include "LocalComboBox.h"
#include "LocalTreeCtrl.h"
#include "LocalListCtrl.h"
#ifndef _USE_XTREME_TOOLKITPRO
#include "PTxSCP.h"
#endif // !_USE_XTREME_TOOLKITPRO
#include "WebBrowser2.h"
#include "PictureEx.h"
#include "TextProgressCtrl.h"
#include "HCButton.h"
// CLocalView 폼 뷰입니다.
class CLocalView : public CView
{
protected:
CLocalView(); // 동적 만들기에 사용되는 protected 생성자입니다.
DECLARE_DYNCREATE(CLocalView)
public:
virtual ~CLocalView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
int m_cxSplitter;
BOOL m_bDragSplitter;
UINT m_nTimer;
long m_nUploadMenuId;
long m_nPasteMenuId;
CString m_sSelectedPath;
CWnd* m_pwndPrevFocused;
#ifndef _USE_XTREME_TOOLKITPRO
IPTxShListItem* m_pitemPrev;
#endif // !_USE_XTREME_TOOLKITPRO
VARIANT_BOOL m_bPrevItemSelected;
BOOL m_bIgnoreEvent;
public:
CXTCaption m_capToolBar;
CPictureEx m_stcAdvert;
CHCButton m_btnToolBar;
CXTButton m_btnUpload;
CXTButton m_btnDownload;
CXTButton m_btnNewFolder;
CXTButton m_btnDelete;
CBitmapButton m_capTitleIcon;
CXTCaption m_capTitle;
CLocalTreeCtrl m_tree;
CStatic m_capAddr;
CLocalComboBox m_cboAddr;
CXTButton m_btnGoAddr;
CXTButton m_btnUpAddr;
CXTButton m_btnListStyle;
CLocalListCtrl m_list;
CXTCaption m_capStatus;
CTextProgressCtrl m_prgStatusSpace;
CStatic m_stcStatusSpace;
CStatic m_stcStatusObject;
CStatic m_stcStatusMsg;
CStatic m_stcSeparator1;
CStatic m_stcSeparator2;
long m_nSelectedCount;
__int64 m_nSelectedBytes;
long m_nSelectedFiles;
long m_nSelectedSecialObj;
long m_nTotalCount;
__int64 m_nTotalBytes;
#ifndef _USE_XTREME_TOOLKITPRO
IPTxShTreeNode* m_pnodeRoot;
#endif // !_USE_XTREME_TOOLKITPRO
bool m_bUpdating;
protected:
void RedrawControl(int cx, int cy);
BOOL SetPath(CString sFolder);
void InvertTracker(int x);
#ifndef _USE_XTREME_TOOLKITPRO
DECLARE_EVENTSINK_MAP()
void OnMouseDownLocalCombo(short aButton, short aShift, float ax, float ay);
void OnAfterSelChangeLocalTree(LPDISPATCH aSelectedNode);
void OnBeforeShellMenuPopupLocalTree(LPDISPATCH aMenu, LPDISPATCH aSelectedNode, long aNextCustomMenuId, BOOL* aCancelMenu);
void OnAfterShellMenuSelectionLocalTree(LPDISPATCH aSelectedNode, long aSelectedMenuId, BOOL* aCancelDefaultBehaviour);
void OnOleDragOverLocalTree(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay, short aState);
void OnOleDragDropLocalTree(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay);
void OnMouseDownLocalTree(short aButton, short aShift, float ax, float ay);
void OnFolderChangedLocalList();
void OnAfterFillLocalList();
void OnBeforeSelectionChangeLocalList(LPDISPATCH aItem, BOOL* aCancel);
void OnItemContextMenuLocalList(LPDISPATCH aItem, float ax, float ay, BOOL* aCancelDefaultMenu);
void OnBeforeShellMenuPopupLocalList(LPDISPATCH aMenu, LPDISPATCH aSelectedItems, long aNextCustomMenuId, BOOL* aCancelMenu);
void OnAfterShellMenuSelectionLocalList(LPDISPATCH aSelectedItems, long aSelectedMenuItemId, BOOL* aCancelDefaultBehaviour);
void OnOleDragOverLocalList(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay, short aState);
void OnOleDragDropLocalList(LPDISPATCH AData, long* aEffect, short* aButton, short* aShift, float ax, float ay);
void OnMouseUpLocalList(short aButton, short aShift, float ax, float ay);
#endif // !_USE_XTREME_TOOLKITPRO
public:
void RedrawFocus();
void RedrawControlEx();
void ApplyListStyle();
BOOL GetSelectedObject(CStringArray &saObject);
CString GetSelectedPath();
BOOL IsSelected();
BOOL IsSpecialObjectSelected();
void RefreshItem();
void StartDrag();
void EndDrag();
BOOL CopyClipboard(COleDataObject& odo, CString sTargetPath, BOOL bErase = FALSE);
void DeleteFile();
protected:
virtual void OnDraw(CDC* pDC); // 이 뷰를 그리기 위해 재정의되었습니다.
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLocalAdvert();
afx_msg void OnLocalBtnToolbar();
afx_msg void OnLocalBtnUpload();
afx_msg void OnLocalBtnDownload();
afx_msg void OnLocalBtnNewFolder();
afx_msg void OnLocalBtnDelete();
afx_msg void OnLocalTitle();
// afx_msg void OnLocalBtnGoAddr();
afx_msg void OnLocalBtnUpAddr();
afx_msg void OnLocalBtnListStyle();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnListNewfolder();
afx_msg void OnListRefresh();
afx_msg void OnListType0();
afx_msg void OnListType1();
afx_msg void OnListType2();
afx_msg void OnListType3();
afx_msg void OnListType4();
afx_msg void OnListSort1();
afx_msg void OnListSort2();
afx_msg void OnListSort3();
afx_msg void OnListSort4();
afx_msg void OnListPaste();
afx_msg void OnListAll();
DECLARE_MESSAGE_MAP()
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,239 @@
// MainFrm.h : CMainFrame 클래스의 인터페이스
//
#pragma once
#define WMU_UPDATE_CONTROL_STATUS (WM_USER + 1)
enum CLIPBOARD_STATE {
CBS_NONE = 0,
CBS_CUT,
CBS_COPY,
};
typedef struct{
CString strName;
int nCountFolder;
int nCountFile;
__int64 nSize;
}RFOLDERINFO_STRUCT,*LPRFOLDERINFO_STRUCT;
typedef struct {
int nClass;
bool bCached;
CString sName;
CStringArray saAttr;
CPtrArray paObject;
} RTREEITEM_STRUCT, *PRTREEITEM_STRUCT;
typedef struct {
bool bFolder;
CString sName;
__int64 nSize;
int iIcon;
CStringArray saAttr;
} RLISTITEM_STRUCT, *PRLISTITEM_STRUCT;
enum TREENODE_CLASS {
TNS_ROOT = 0,
TNS_VOLUME,
TNS_FOLDER,
};
enum FOCUS_LOCATION {
FL_LOCAL,
FL_REMOTE
};
class CMainFrame : public CXTPFrameWnd
{
public:
CMainFrame();
protected:
DECLARE_DYNAMIC(CMainFrame)
public:
void ShowLoginDialog();
void Connect();
void Disconnect();
bool ContNextOnError(LPCSTR pszErrMSg);
int ConfirmExists(LPCSTR pszName, BOOL bMove = TRUE);
bool MakeRemoteFolder(HTREEITEM hti, CString& sFolder);
bool Move1RemoteObject(HTREEITEM hti, CString& sSrcPath, CString& sDstPath);
bool Delete1RemoteObject(HTREEITEM hti, CString& sPath);
bool Upload(bool bUseSelected = true);
bool Download(bool bUseSelected = true);
void CopyRemoteObject(HTREEITEM hti, CStringArray& saSrcPath, CString& sDstPath, CStringArray& saSucceed);
void MoveRemoteObject(HTREEITEM hti, CStringArray& saSrcPath, CString& sDstPath, CStringArray& saSucceed);
void DeleteRemoteObject(HTREEITEM hti, CStringArray& saPath, CStringArray& saSucceed);
void SaveUrl();
void UpdateVolumeInfo(HTREEITEM hti);
void GetFolderInfo(HTREEITEM hti,LPRFOLDERINFO_STRUCT pfolderinfo);
void BeginWaitMessage(CCmdTarget *pct = NULL);
void EndWaitMessage(CCmdTarget *pct = NULL);
void SetFocus(CWnd* pwnd);
CString GetProxyHost();
int GetProxyPort();
private:
BOOL RestorePlacement();
void RemoveDragSource(HTREEITEM hti, LPCTSTR pszPath);
void SaveFileUrl(CString sURI, CStdioFile& file, CString sStag, CString sEtag);
// 특성
public:
CFont m_font;
class CRemoteView* m_pRemoteView;
class CLocalView* m_pLocalView;
// 프레임 상태...
BOOL m_bShowTopToolBar;
BOOL m_bShowMidToolBar;
BOOL m_bShowRemoteTree;
BOOL m_bShowLocalTree;
int m_nRemoteListType;
int m_nLocalListType;
BOOL m_bShowRemoteStatus;
BOOL m_bShowLocalStatus;
FOCUS_LOCATION m_fl;
CWnd* m_pwndRemote;
CWnd* m_pwndLocal;
CLIPBOARD_STATE m_cbs;
bool m_bDragFromRemote;
CStringArray m_saDragSource;
CString m_sDragTarget;
HTREEITEM m_htiDragTarget;
int m_iComputerIcon;
int m_iNetworkIcon;
int m_iDriveIcon;
int m_iFolderIcon;
int m_iAnonyAuthIcon;
CBitmap m_bmFolder;
CBitmap m_bmCopy;
CBitmap m_bmCut;
CBitmap m_bmPaste;
CString m_sUserId;
CString m_sPassword;
bool m_bSizing;
CMapPtrToPtr m_mapHcl;
private:
CXTSplitterWnd m_splitter;
bool m_bInitialzed;
// 재정의
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
// 구현
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// 메시지 맵 함수를 생성했습니다.
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClose();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnFileReconnect();
afx_msg void OnUpdateFileReconnect(CCmdUI *pCmdUI);
afx_msg void OnFileDisconnect();
afx_msg void OnUpdateFileDisconnect(CCmdUI *pCmdUI);
afx_msg void OnFileUpload();
afx_msg void OnUpdateFileUpload(CCmdUI *pCmdUI);
afx_msg void OnFileDownload();
afx_msg void OnUpdateFileDownload(CCmdUI *pCmdUI);
afx_msg void OnViewRefresh();
afx_msg void OnViewLtree();
afx_msg void OnUpdateViewLtree(CCmdUI *pCmdUI);
afx_msg void OnViewRtree();
afx_msg void OnUpdateViewRtree(CCmdUI *pCmdUI);
afx_msg void OnViewLstatus();
afx_msg void OnUpdateViewLstatus(CCmdUI *pCmdUI);
afx_msg void OnViewRstatus();
afx_msg void OnUpdateViewRstatus(CCmdUI *pCmdUI);
afx_msg void OnViewMidToolbar();
afx_msg void OnUpdateViewMidToolbar(CCmdUI *pCmdUI);
afx_msg void OnViewRlistType1();
afx_msg void OnUpdateViewRlistType1(CCmdUI *pCmdUI);
afx_msg void OnViewRlistType2();
afx_msg void OnUpdateViewRlistType2(CCmdUI *pCmdUI);
afx_msg void OnViewRlistType3();
afx_msg void OnUpdateViewRlistType3(CCmdUI *pCmdUI);
afx_msg void OnViewRlistType4();
afx_msg void OnUpdateViewRlistType4(CCmdUI *pCmdUI);
afx_msg void OnViewLlistType0();
afx_msg void OnUpdateViewLlistType0(CCmdUI *pCmdUI);
afx_msg void OnViewLlistType1();
afx_msg void OnUpdateViewLlistType1(CCmdUI *pCmdUI);
afx_msg void OnViewLlistType2();
afx_msg void OnUpdateViewLlistType2(CCmdUI *pCmdUI);
afx_msg void OnViewLlistType3();
afx_msg void OnUpdateViewLlistType3(CCmdUI *pCmdUI);
afx_msg void OnViewLlistType4();
afx_msg void OnUpdateViewLlistType4(CCmdUI *pCmdUI);
afx_msg void OnCfgOverwriteAsk();
afx_msg void OnUpdateCfgOverwriteAsk(CCmdUI *pCmdUI);
afx_msg void OnCfgOverwrite1();
afx_msg void OnUpdateCfgOverwrite1(CCmdUI *pCmdUI);
afx_msg void OnCfgOverwrite2();
afx_msg void OnUpdateCfgOverwrite2(CCmdUI *pCmdUI);
afx_msg void OnCfgOverwrite3();
afx_msg void OnUpdateCfgOverwrite3(CCmdUI *pCmdUI);
afx_msg void OnCfgOverwrite4();
afx_msg void OnUpdateCfgOverwrite4(CCmdUI *pCmdUI);
afx_msg void OnCfgConfig();
afx_msg LRESULT OnTransferDlgClose(WPARAM, LPARAM);
afx_msg LRESULT OnUpdateControlStatus(WPARAM wParam, LPARAM lParam);
int OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl);
DECLARE_MESSAGE_MAP()
};
#define MIN_REMOTE_HEIGHT 100
#define MIN_TREE_WIDTH 90
#define MIN_LIST_WIDTH 150
#define HIGHLIGHT_SIZE 1
#define TOOLBAR_HEIGHT 42
#define TOOLBAR_BTN_HEIGHT 6
#define TOOLBAR_BTN_WIDTH 75
#define CAPTION_HEIGHT 22
#define ADDRESS_WIDTH 35
#define SPLITTER_SIZE 5
#define ADDRESS_BTN_WIDTH 23
#define HEADER_HEIGHT (HIGHLIGHT_SIZE + CAPTION_HEIGHT)
#define STATUS_HEIGHT 19
#define STATUS_TEXT_HEIGHT 12
#define TIMER_ID_UPDATESTATUS 1
#define TIMER_ID_CHANGEFOLDER 2
@@ -0,0 +1,248 @@
// Options.cpp: Implementierungsdatei
//
#include "stdafx.h"
#include "afxmt.h"
#include "ConsoleApp.h"
#include "Options.h"
#include "MarkupSTL.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
bool COptions::m_bInitialized = false;
CString COptions::m_sConfigFile = "";
CCriticalSection COptions::m_csSync;
CMarkupSTL COptions::m_markup;
COptions::OPTIONCACHE_STRUCT COptions::m_aoc[OPTIONS_NUM];
/////////////////////////////////////////////////////////////////////////////
// Dialogfeld COptions
typedef struct
{
TCHAR szName[35];
int type;
} OPTION_STRUCT;
static OPTION_STRUCT g_aopt[OPTIONS_NUM] = {
_T("Windows Position"), 0, _T("Splitter Size"), 0,
_T("Remote Tree Size"), 1, _T("Local Tree Size"), 1,
_T("Show Remote Tree"), 1, _T("Show Local Tree"), 1,
_T("Remote List Style"), 1, _T("Local List Style"), 1,
_T("Show Remote Status"), 1, _T("Show Local Status"), 1,
_T("Remote Column Widths"), 0, _T("Local Column Widths"), 0,
_T("Remote Column Sort"), 1, _T("Local Column Sort"), 1,
_T("Show Top Toolbar"), 1, _T("Show Mid Toolbar"), 1,
_T("User ID"), 0, _T("Password"), 0,
_T("Auto Connect"), 1, _T("Save Password"), 1,
_T("File Exists Action"), 1,
_T("After Execution"), 1,
_T("Search Sub Url"), 1, _T("Url Tag Type"), 1,
_T("Url Start Tag"), 0, _T("Url End Tag"), 0,
_T("Proxy Host"), 0, _T("Proxy Port"), 0,
_T("Use IE Proxy"), 1, _T("Write Policy"), 1
};
void COptions::SetOption(int nOptionID,int nValue)
{
ASSERT(g_aopt[(OPTION_TYPE)nOptionID].type == OT_NUMBER);
CSingleLock lock(&m_csSync, TRUE);
m_aoc[nOptionID].bCached = true;
m_aoc[nOptionID].type = OT_NUMBER;
m_aoc[nOptionID].nValue = nValue;
m_markup.ResetPos();
if (!m_markup.FindChildElem(_T("Settings")))
m_markup.AddChildElem(_T("Settings"));
CString sValue;
sValue.Format(_T("%d"), nValue);
m_markup.IntoElem();
BOOL bRet = m_markup.FindChildElem();
while (bRet) {
CString sName = m_markup.GetChildAttrib( _T("name"));
if (_tcscmp(sName, g_aopt[nOptionID].szName) == 0) {
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
m_markup.SetChildData(sValue);
break;
}
bRet = m_markup.FindChildElem();
}
if (!bRet) {
m_markup.InsertChildElem(_T("Item"), sValue);
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
}
m_markup.Save(m_sConfigFile);
}
void COptions::SetOption(int nOptionID, CString sValue)
{
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_STRING);
CSingleLock lock(&m_csSync, TRUE);
m_aoc[nOptionID].bCached = true;
m_aoc[nOptionID].type = OT_STRING;
m_aoc[nOptionID].sValue = sValue;
m_markup.ResetPos();
if (!m_markup.FindChildElem(_T("Settings")))
m_markup.AddChildElem(_T("Settings"));
m_markup.IntoElem();
CString sTag;
sTag = m_markup.GetTagName();
BOOL bRet = m_markup.FindChildElem();
while (bRet) {
CString sName = m_markup.GetChildAttrib(_T("name"));
if (_tcscmp(sName, g_aopt[nOptionID].szName) == 0) {
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
m_markup.SetChildAttrib(_T("type"), _T("string"));
m_markup.SetChildData(sValue);
break;
}
bRet = m_markup.FindChildElem();
}
if (!bRet) {
m_markup.InsertChildElem(_T("Item"), sValue);
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
m_markup.SetChildAttrib(_T("type"), _T("string"));
}
m_markup.Save(m_sConfigFile);
}
int COptions::GetOptionVal(int nOptionID)
{
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_NUMBER);
CSingleLock lock(&m_csSync, TRUE);
int nResult = m_aoc[nOptionID].nValue;
if (!m_aoc[nOptionID].bCached) {
switch (nOptionID) {
case OPTION_SHOWTOPTOOLBAR:
case OPTION_SHOWMIDTOOLBAR:
nResult = 1;
break;
case OPTION_SHOWLOCALTREE:
case OPTION_SHOWREMOTETREE:
nResult = 1;
break;
case OPTION_SHOWLOCALSTATUS:
case OPTION_SHOWREMOTESTATUS:
nResult = 1;
break;
case OPTION_LOCALTREESIZE:
case OPTION_REMOTETREESIZE:
nResult = 300;
break;
case OPTION_LOCALLISTSTYLE:
case OPTION_REMOTELISTSTYLE:
nResult = 4;
break;
case OPTION_USEIEPROXY:
case OPTION_SEARCHSUBURL:
nResult = 1;
break;
}
}
return nResult;
}
CString COptions::GetOption(int nOptionID)
{
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_STRING);
CSingleLock lock(&m_csSync, TRUE);
CString sResult = m_aoc[nOptionID].sValue;
if (!m_aoc[nOptionID].bCached) {
// if (nOptionID == OPTION_URLDIVIDER)
// sResult = _T("|");
}
return sResult;
}
bool COptions::Init(LPCTSTR pszConfigFile)
{
CSingleLock lock(&m_csSync, TRUE);
if (m_bInitialized)
return true;
m_sConfigFile = pszConfigFile;
m_bInitialized = true;
for (int i = 0; i < OPTIONS_NUM; i++)
m_aoc[i].bCached = false;
CFileStatus64 fs;
if (!GetStatus64(m_sConfigFile, fs) || fs.m_size <= 45) {
m_markup.AddElem(_T(APP_TITLE));
m_markup.Save(m_sConfigFile);
}
else if (fs.m_attribute & FILE_ATTRIBUTE_DIRECTORY)
return false;
if (!m_markup.Load(m_sConfigFile))
return false;
if (!m_markup.FindElem(_T(APP_TITLE)))
return false;
if (!m_markup.FindChildElem(_T("Settings")))
m_markup.AddChildElem(_T("Settings"));
CString sTag;
m_markup.IntoElem();
sTag = m_markup.GetTagName();
while (m_markup.FindChildElem()) {
CString sValue = m_markup.GetChildData();
CString sName = m_markup.GetChildAttrib(_T("name"));
CString sType = m_markup.GetChildAttrib(_T("type"));
for (int i = 0;i < OPTIONS_NUM; i++) {
if (_tcscmp(sName, g_aopt[i].szName) == 0) {
m_aoc[i].bCached = true;
if (sType == "numeric") {
m_aoc[i].type = OT_NUMBER;
m_aoc[i].nValue = _ttoi(sValue);
}
else {
if (sType != "string")
::AfxTrace( _T("Unknown option type '%s' for item '%s', assuming string\n"), sType, sName);
m_aoc[i].type = OT_STRING;
m_aoc[i].sValue = sValue;
}
break;
}
}
}
return true;
}
@@ -0,0 +1,75 @@
// Options.h
//
#pragma once
#include "MarkupSTL.h"
#define OPTIONS_NUM 30
class COptions
{
public:
static bool Init(LPCTSTR pszConfigFile);
static void SetOption(int OptionID,CString sValue);
static void SetOption(int OptionID,int nValue);
static CString GetOption(int nOptionID);
static int GetOptionVal(int nOptionID);
static class CCriticalSection m_csSync;
protected:
static CString m_sConfigFile;
enum OPTION_TYPE {
OT_STRING = 0,
OT_NUMBER,
};
typedef struct {
bool bCached;
OPTION_TYPE type;
CString sValue;
int nValue;
} OPTIONCACHE_STRUCT;
static bool m_bInitialized;
static CMarkupSTL m_markup;
static OPTIONCACHE_STRUCT m_aoc[OPTIONS_NUM];
};
enum OPTIONS {
OPTION_WINDOWSPOS = 0,
OPTION_SPLITTERSIZE,
OPTION_REMOTETREESIZE,
OPTION_LOCALTREESIZE,
OPTION_SHOWREMOTETREE,
OPTION_SHOWLOCALTREE,
OPTION_REMOTELISTSTYLE,
OPTION_LOCALLISTSTYLE,
OPTION_SHOWREMOTESTATUS,
OPTION_SHOWLOCALSTATUS, // 10
OPTION_REMOTECOLUMNWIDTHS,
OPTION_LOCALCOLUMNWIDTHS,
OPTION_REMOTECOLUMNSORT,
OPTION_LOCALCOLUMNSORT,
OPTION_SHOWTOPTOOLBAR,
OPTION_SHOWMIDTOOLBAR,
OPTION_USERID,
OPTION_PASSWORD,
OPTION_AUTOCONNECT,
OPTION_SAVEPASSWORD, // 20
OPTION_FILEEXISTSACTION,
OPTION_AFTEREXEC,
OPTION_SEARCHSUBURL,
OPTION_URLTAGTYPE,
OPTION_URLSTAG,
OPTION_URLETAG,
OPTION_PROXYHOST,
OPTION_PROXYPORT,
OPTION_USEIEPROXY,
OPTION_WRITEPOLICY,
};
@@ -0,0 +1,290 @@
// RLDropTarget.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RLDropTarget.h"
#include "MainFrm.h"
#include "RemoteView.h"
#include "RemoteTreeCtrl.h"
#include "RemoteListCtrl.h"
bool IsPathItself(CString sSrcPath, CString sDstPath);
// CRLDropTarget
#ifndef _AFXDLL
// 2014.07.25 Support statically linked to MFC
IMPLEMENT_DYNAMIC(CRLDropTarget, CObject)
#else
IMPLEMENT_DYNAMIC(CRLDropTarget, COleDropTarget)
#endif //
CRLDropTarget::CRLDropTarget()
{
}
CRLDropTarget::~CRLDropTarget()
{
}
BEGIN_MESSAGE_MAP(CRLDropTarget, COleDropTarget)
END_MESSAGE_MAP()
// CRLDropTarget 메시지 처리기입니다.
DROPEFFECT CRLDropTarget::OnDragEnter(CWnd* pwnd, COleDataObject* podo, DWORD dwKeyState, CPoint point)
{
m_hwndFocused = GetFocus();
((CRemoteView*)pwnd->GetParent())->m_bUpdating = TRUE;
m_iPrevItem = -1;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (!pmf->m_bDragFromRemote) {
if (!podo->IsDataAvailable(CF_HDROP))
return DROPEFFECT_NONE;
pmf->m_saDragSource.RemoveAll();
if (!GetDragFileInfo(podo))
return DROPEFFECT_NONE;
}
m_dePrev = DROPEFFECT_NONE;
return OnDragOver(pwnd, podo, dwKeyState, point);
}
DROPEFFECT CRLDropTarget::OnDragOver(CWnd* pwnd, COleDataObject* podo, DWORD dwKeyState, CPoint point)
{
DROPEFFECT de = DROPEFFECT_NONE;
if (((CMainFrame*)AfxGetMainWnd())->m_saDragSource.GetCount() == 0)
return de;
CRemoteListCtrl* plist = (CRemoteListCtrl*)pwnd;
plist->SetFocus();
if (m_iPrevItem >= 0)
plist->SetItemState(m_iPrevItem, m_dwPrevItemState, LVIS_SELECTED);
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
int iItem = plist->HitTest(point);
if (iItem < 0) {
m_iPrevItem = -1;
CRemoteTreeCtrl* ptree = ((CRemoteView*)pwnd->GetParent())->GetTreeCtrl();
HTREEITEM htiSelected = ptree->GetSelectedItem();
if (!pmf->m_bDragFromRemote) {
if (htiSelected != ptree->GetRootItem())
de = DROPEFFECT_COPY;
}
else {
CString sSourcePath = pmf->m_saDragSource.GetAt(0);
CString sTargetPath = ptree->GetPath(htiSelected);
sSourcePath = sSourcePath.Left(sSourcePath.ReverseFind('/'));
if (ptree->GetVolumeItem(htiSelected) == pmf->m_htiDragTarget
&& sSourcePath != sTargetPath.Left(sSourcePath.GetLength()))
// 2014.07.25 dadamin copy 제거
#ifdef _USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
#else // !_USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_NONE : DROPEFFECT_MOVE;
#endif // _USE_COPY_
}
}
else {
m_dwPrevItemState = plist->GetItemState(iItem, LVIS_SELECTED);
plist->SetItemState(iItem, LVIS_SELECTED, LVIS_SELECTED);
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)plist->GetItemData(iItem);
m_iPrevItem = iItem;
if (prli->bFolder) {
if (!pmf->m_bDragFromRemote)
de = DROPEFFECT_COPY;
else {
CRemoteTreeCtrl* ptree = ((CRemoteView*)pwnd->GetParent())->GetTreeCtrl();
HTREEITEM htiSelected = ptree->GetSelectedItem();
if (htiSelected == ptree->GetRootItem()) {
CString sPath = ((CRemoteListCtrl*)pwnd)->GetItemText(iItem, 0);
HTREEITEM hti = ptree->GetChildItem(ptree->GetRootItem());
while (hti) {
if (sPath == ptree->GetItemText(hti)) {
if (ptree->GetVolumeItem(hti) == pmf->m_htiDragTarget)
// 2014.07.25 dadmain copy 제거
#ifdef _USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
#else // !_USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_NONE : DROPEFFECT_MOVE;
#endif // _USE_COPY_
break;
}
hti = ptree->GetNextSiblingItem(hti);
}
}
else {
CString sTargetPath = ptree->GetPath(htiSelected) + "/" + plist->GetItemText(iItem, 0);
BOOL bAvail = TRUE;
if (ptree->GetVolumeItem(htiSelected) != pmf->m_htiDragTarget)
bAvail = FALSE;
else {
for (int i = 0; i < pmf->m_saDragSource.GetCount(); i++) {
if (IsPathItself(pmf->m_saDragSource[i], sTargetPath)) {
bAvail = FALSE;
break;
}
}
}
if (bAvail)
// 2014.07.25 dadamin copy 제거
#ifdef _USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
#else // !_USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_NONE : DROPEFFECT_MOVE;
#endif //_USE_COPY_
}
}
}
}
m_dePrev = de;
return de;
}
void CRLDropTarget::OnDragLeave(CWnd* pwnd)
{
((CRemoteView*)pwnd->GetParent())->m_bUpdating = FALSE;
if (m_iPrevItem >= 0) {
CRemoteListCtrl* plist = (CRemoteListCtrl*)pwnd;
plist->SetItemState(m_iPrevItem, m_dwPrevItemState, LVIS_SELECTED);
}
if (m_hwndFocused)
CWnd::FromHandle(m_hwndFocused)->SetFocus();
}
BOOL CRLDropTarget::OnDrop(CWnd* pwnd, COleDataObject* podo, DROPEFFECT de, CPoint point)
{
CString sPath = m_iPrevItem >= 0 ? "/" + ((CRemoteListCtrl*)pwnd)->GetItemText(m_iPrevItem, 0) : "";
if (m_dePrev != DROPEFFECT_NONE) {
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CRemoteTreeCtrl* ptree = ((CRemoteView*)pwnd->GetParent())->GetTreeCtrl();
HTREEITEM hti = NULL;
if (!pmf->m_bDragFromRemote) {
// 리스트에 표시된 아이템이 볼륨이면...
if (ptree->GetSelectedItem() == ptree->GetRootItem()) {
hti = ptree->GetChildItem(ptree->GetRootItem());
while (hti) {
if (sPath.Mid(1) == ptree->GetItemText(hti)) {
sPath = "";
break;
}
hti = ptree->GetNextSiblingItem(hti);
}
}
else {
hti = ptree->GetSelectedItem();
}
pmf->m_sDragTarget = ptree->GetPath(hti) + sPath;
pmf->m_htiDragTarget = ptree->GetVolumeItem(hti);
pmf->Upload(false);
}
else {
HTREEITEM htiTarget = ptree->GetSelectedItem();
if (htiTarget == ptree->GetRootItem())
sPath = "";
pmf->m_sDragTarget = ptree->GetPath(htiTarget) + sPath;
pmf->BeginWaitMessage();
CStringArray saSucceed;
if (de == DROPEFFECT_COPY)
pmf->CopyRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
else
pmf->MoveRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
CRemoteView* pview = (CRemoteView*)ptree->GetParent();
for (int i = 0; i < saSucceed.GetCount(); i++) {
HTREEITEM hti = ptree->GetItem(pmf->m_htiDragTarget, saSucceed[i]);
if (!hti)
continue;
CString sName = saSucceed[i].Mid(saSucceed[i].ReverseFind('/') + 1);
if (!ptree->IsExistsChild(htiTarget, sName))
pview->AppendObject(htiTarget, true, sName, 0, "");
if (de == DROPEFFECT_MOVE)
ptree->DeleteItem(hti);
}
pmf->EndWaitMessage();
if (saSucceed.GetCount() > 0)
pmf->m_pRemoteView->RefreshItem();
}
}
OnDragLeave(pwnd);
return TRUE;
}
BOOL CRLDropTarget::GetDragFileInfo(COleDataObject* podo)
{
STGMEDIUM sm;
FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (!podo->GetData(CF_HDROP, &sm, &fe))
return FALSE;
HDROP hdrop = (HDROP)sm.hGlobal;
int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);
if (nDragCount == 0)
return FALSE;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
char szFile[MAX_PATH];
for (int i = 0; i < nDragCount; i++) {
::DragQueryFile(hdrop, i, szFile, sizeof(szFile));
CString sFile(szFile);
if (sFile.Find('\\') < 0) {
pmf->m_saDragSource.RemoveAll();
break;
}
pmf->m_saDragSource.Add(sFile);
}
if (pmf->m_saDragSource.GetCount() == 0)
return FALSE;
return TRUE;
}
@@ -0,0 +1,34 @@
#pragma once
// CRLDropTarget ¸í·É ´ë»óÀÔ´Ï´Ù.
class CRLDropTarget : public COleDropTarget
{
DECLARE_DYNAMIC(CRLDropTarget)
public:
CRLDropTarget();
virtual ~CRLDropTarget();
// Override
protected:
virtual DROPEFFECT OnDragEnter(CWnd*, COleDataObject*, DWORD, CPoint);
virtual DROPEFFECT OnDragOver(CWnd*, COleDataObject*, DWORD, CPoint);
virtual void OnDragLeave(CWnd*);
virtual BOOL OnDrop(CWnd*, COleDataObject*, DROPEFFECT, CPoint);
protected:
BOOL GetDragFileInfo(COleDataObject* podo);
protected:
DROPEFFECT m_dePrev;
int m_iPrevItem;
DWORD m_dwPrevItemState;
HWND m_hwndFocused;
protected:
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,207 @@
// RTDropTarget.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RTDropTarget.h"
#include "MainFrm.h"
#include "RemoteView.h"
#include "RemoteTreeCtrl.h"
bool IsPathItself(CString sSrcPath, CString sDstPath);
// CRTDropTarget
#ifndef _AFXDLL
// 2014.07.25 Support statically linked to MFC
IMPLEMENT_DYNAMIC(CRTDropTarget, CObject)
#else
IMPLEMENT_DYNAMIC(CRTDropTarget, COleDropTarget)
#endif
CRTDropTarget::CRTDropTarget()
{
}
CRTDropTarget::~CRTDropTarget()
{
}
BEGIN_MESSAGE_MAP(CRTDropTarget, COleDropTarget)
END_MESSAGE_MAP()
// CRTDropTarget 메시지 처리기입니다.
DROPEFFECT CRTDropTarget::OnDragEnter(CWnd* pwnd, COleDataObject* podo, DWORD dwKeyState, CPoint point)
{
m_hwndFocused = GetFocus();
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (!pmf->m_bDragFromRemote) {
if (!podo->IsDataAvailable(CF_HDROP))
return DROPEFFECT_NONE;
((CMainFrame*)AfxGetMainWnd())->m_saDragSource.RemoveAll();
if (!GetDragFileInfo(podo))
return DROPEFFECT_NONE;
}
CRemoteTreeCtrl* ptree = (CRemoteTreeCtrl*)pwnd;
ptree->SetFocus();
m_htiSelected = m_htiPrev = ptree->GetSelectedItem();
m_dePrev = DROPEFFECT_NONE;
return OnDragOver(pwnd, podo, dwKeyState, point);
}
DROPEFFECT CRTDropTarget::OnDragOver(CWnd* pwnd, COleDataObject* podo, DWORD dwKeyState, CPoint point)
{
DROPEFFECT de = DROPEFFECT_NONE;
if (((CMainFrame*)AfxGetMainWnd())->m_saDragSource.GetCount() == 0)
return de;
CRemoteTreeCtrl* ptree = (CRemoteTreeCtrl*)pwnd;
HTREEITEM hti = ptree->HitTest(point);
if (!hti)
return de;
ptree->SetItemState(m_htiPrev, NULL, TVIS_SELECTED);
ptree->SetItemState(m_htiPrev = hti, TVIS_SELECTED, TVIS_SELECTED);
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (hti != ptree->GetRootItem()) {
if (!pmf->m_bDragFromRemote)
de = DROPEFFECT_COPY;
else {
CString sTargetPath = ptree->GetPath(hti);
BOOL bAvail = TRUE;
if (ptree->GetVolumeItem(hti) != pmf->m_htiDragTarget)
bAvail = FALSE;
else {
for (int i = 0; i < pmf->m_saDragSource.GetCount(); i++) {
if (IsPathItself(pmf->m_saDragSource[i], sTargetPath)) {
bAvail = FALSE;
break;
}
}
}
if (bAvail)
// 2014.07.25 dadamin copy 제거
#ifdef _USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
#else // !_USE_COPY_
de = dwKeyState & MK_CONTROL ? DROPEFFECT_NONE : DROPEFFECT_MOVE;
#endif // _USE_COPY_
}
}
m_dePrev = de;
return de;
}
void CRTDropTarget::OnDragLeave(CWnd* pwnd)
{
CRemoteTreeCtrl* ptree = (CRemoteTreeCtrl*)pwnd;
ptree->SetItemState(m_htiPrev, NULL, TVIS_SELECTED);
ptree->SetItemState(m_htiSelected, TVIS_SELECTED, TVIS_SELECTED);
if (m_hwndFocused)
CWnd::FromHandle(m_hwndFocused)->SetFocus();
}
BOOL CRTDropTarget::OnDrop(CWnd* pwnd, COleDataObject* podo, DROPEFFECT de, CPoint point)
{
HTREEITEM htiTarget = m_htiPrev;
if (m_dePrev != DROPEFFECT_NONE) {
CRemoteTreeCtrl* ptree = (CRemoteTreeCtrl*)pwnd;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (!pmf->m_bDragFromRemote) {
pmf->m_sDragTarget = ptree->GetPath(htiTarget);
pmf->m_htiDragTarget = ptree->GetVolumeItem(htiTarget);
pmf->Upload(false);
}
else {
pmf->m_sDragTarget = ptree->GetPath(htiTarget);
pmf->BeginWaitMessage();
CStringArray saSucceed;
if (de == DROPEFFECT_COPY)
pmf->CopyRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
else
pmf->MoveRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
CRemoteView* pview = (CRemoteView*)ptree->GetParent();
for (int i = 0; i < saSucceed.GetCount(); i++) {
HTREEITEM hti = ptree->GetItem(pmf->m_htiDragTarget, saSucceed[i]);
if (!hti)
continue;
CString sName = saSucceed[i].Mid(saSucceed[i].ReverseFind('/') + 1);
if (!ptree->IsExistsChild(htiTarget, sName))
pview->AppendObject(htiTarget, true, sName, 0, "");
if (de == DROPEFFECT_MOVE)
ptree->DeleteItem(hti);
}
pmf->EndWaitMessage();
if (saSucceed.GetCount() > 0)
pmf->m_pRemoteView->RefreshItem();
}
}
OnDragLeave(pwnd);
return TRUE;
}
BOOL CRTDropTarget::GetDragFileInfo(COleDataObject* podo)
{
STGMEDIUM sm;
FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (!podo->GetData(CF_HDROP, &sm, &fe))
return FALSE;
HDROP hdrop = (HDROP)sm.hGlobal;
int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);
if (nDragCount == 0)
return FALSE;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
char szFile[MAX_PATH];
for (int i = 0; i < nDragCount; i++) {
::DragQueryFile(hdrop, i, szFile, sizeof(szFile));
CString sFile(szFile);
if (sFile.Find('\\') < 0) {
pmf->m_saDragSource.RemoveAll();
break;
}
pmf->m_saDragSource.Add(sFile);
}
if (pmf->m_saDragSource.GetCount() == 0)
return FALSE;
return TRUE;
}
@@ -0,0 +1,35 @@
// Remote Tree DropTarget
#pragma once
// CRTDropTarget ¸í·É ´ë»óÀÔ´Ï´Ù.
class CRTDropTarget : public COleDropTarget
{
DECLARE_DYNAMIC(CRTDropTarget)
public:
CRTDropTarget();
virtual ~CRTDropTarget();
// Override
protected:
virtual DROPEFFECT OnDragEnter(CWnd*, COleDataObject*, DWORD, CPoint);
virtual DROPEFFECT OnDragOver(CWnd*, COleDataObject*, DWORD, CPoint);
virtual void OnDragLeave(CWnd*);
virtual BOOL OnDrop(CWnd*, COleDataObject*, DROPEFFECT, CPoint);
protected:
BOOL GetDragFileInfo(COleDataObject* podo);
protected:
DROPEFFECT m_dePrev;
HTREEITEM m_htiSelected;
HTREEITEM m_htiPrev;
HWND m_hwndFocused;
protected:
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,281 @@
// RemoteComboBox.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RemoteComboBox.h"
#include "MainFrm.h"
#include "RemoteView.h"
#include "RemoteTreeCtrl.h"
#include ".\remotecombobox.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRemoteComboBox
CRemoteComboBox::CRemoteComboBox()
{
m_iSPos = m_iEPos = -1;
}
CRemoteComboBox::~CRemoteComboBox()
{
}
BEGIN_MESSAGE_MAP(CRemoteComboBox, CComboBoxEx)
//{{AFX_MSG_MAP(CRemoteComboBox)
//}}AFX_MSG_MAP
ON_WM_CREATE()
ON_CONTROL_REFLECT(CBN_SELCHANGE, OnSelchange)
// ON_NOTIFY_REFLECT(CBEN_ENDEDIT, OnCbenEndedit)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRemoteComboBox message handlers
int CRemoteComboBox::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// if (CComboBox::OnCreate(lpCreateStruct) == -1)
// return -1;
SHFILEINFO shfi;
HIMAGELIST hil = (HIMAGELIST)SHGetFileInfo("C:\\", 0, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
SetImageList(CImageList::FromHandle(hil));
return 0;
}
void CRemoteComboBox::OnSelchange()
{
CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
ptree->SelectItem((HTREEITEM)GetItemData(GetCurSel()));
}
void CRemoteComboBox::Init()
{
Clear();
CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
COMBOBOXEXITEM cbei;
cbei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT;
int nImage, nSelectedImage;
CString sText;
// 루트 삽입
HTREEITEM hti = ptree->GetRootItem();
ptree->GetItemImage(hti, nImage, nSelectedImage);
sText = ptree->GetItemText(hti);
cbei.iItem = GetCount();
cbei.iIndent = 0;
cbei.iImage = nImage;
cbei.iSelectedImage = nSelectedImage;
cbei.pszText = (LPSTR)(LPCTSTR)sText;
InsertItem(&cbei);
SetItemData((int)cbei.iItem, (DWORD_PTR)hti);
// 볼륨 삽입
hti = ptree->GetChildItem(hti);
while (hti) {
ptree->GetItemImage(hti, nImage, nSelectedImage);
sText = ptree->GetItemText(hti);
cbei.iItem = GetCount();
cbei.iIndent = 1;
cbei.iImage = nImage;
cbei.iSelectedImage = nSelectedImage;
cbei.pszText = (LPSTR)(LPCTSTR)sText;
InsertItem(&cbei);
SetItemData((int)cbei.iItem, (DWORD_PTR)hti);
hti = ptree->GetNextSiblingItem(hti);
}
SetCurSel(0);
}
void CRemoteComboBox::Add(HTREEITEM hti)
{
COMBOBOXEXITEM cbei;
if (m_iSPos >= 0 && m_iEPos >= 0) {
for (int i = m_iEPos; i >= m_iSPos; i--)
DeleteItem(i);
}
m_iSPos = m_iEPos = -1;
CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)ptree->GetItemData(hti);
if (prti->nClass != TNS_FOLDER) {
for (int i = 0; i < GetCount(); i++) {
if ((HTREEITEM)GetItemData(i) == hti) {
SetCurSel(i);
break;
}
}
return;
}
HTREEITEM htiParent = ptree->GetVolumeItem(hti);
int nImage, nSelectedImage;
CString sText;
cbei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_INDENT;
for (int i = 1; i < GetCount(); i++) {
if ((HTREEITEM)GetItemData(i) != htiParent)
continue;
m_iSPos = m_iEPos = i + 1;
int iIndent = 2;
while (htiParent != hti) {
HTREEITEM htiChild, htiTemp = hti;
while (htiParent != htiTemp) {
htiChild = htiTemp;
htiTemp = ptree->GetParentItem(htiChild);
}
ptree->GetItemImage(htiChild, nImage, nSelectedImage);
sText = ptree->GetItemText(htiChild);
cbei.iItem = m_iEPos++;
cbei.iIndent = iIndent++;
cbei.iImage = nImage;
cbei.iSelectedImage = nSelectedImage;
cbei.pszText = (LPSTR)(LPCTSTR)sText;
InsertItem(&cbei);
SetItemData((int)cbei.iItem, (DWORD_PTR)htiChild);
htiParent = htiChild;
}
m_iEPos--;
SetCurSel(m_iEPos);
break;
}
}
BOOL CRemoteComboBox::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
{
if (SetDirectPath() == FALSE)
return FALSE;
}
return CComboBoxEx::PreTranslateMessage(pMsg);
}
BOOL CRemoteComboBox::SetDirectPath(void)
{
CString strTemp;
CString strPath;
CString token;
int ipos=0;
UINT ncount;
HTREEITEM item=NULL;
HCOMMLIB hcl;
CRemoteTreeCtrl *ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CRemoteView *pView = (CRemoteView*)GetParent();
CRemoteListCtrl *pList = pView->GetListCtrl();
GetWindowText(strPath);
strTemp = strPath;
if (ptree->GetSelectedItem() == ptree->GetRootItem())
{
if (pmf->m_mapHcl.GetCount() == 2)
item = ptree->GetChildItem(ptree->GetRootItem());
else
{
MessageBox("서비스 볼륨을 먼저 선택해 주세요.");
return FALSE;
}
}
else
{
item = ptree->GetVolumeItem(ptree->GetSelectedItem()); // 볼륨노드
}
if (item == NULL)
{
MessageBox("존재하지 않는 볼륨입니다.");
return FALSE;
}
pmf->m_mapHcl.Lookup(item,(void*&)hcl);
PCLFILE_STRUCT pclf = cl_get_file_list(hcl,strTemp.Mid(ipos),0,&ncount);
if( pclf == NULL)
{
MessageBox("존재하지 않는 경로 입니다.");
return FALSE;
}
if(pclf->attr != CLFILEATTR_FOLDER)
{// 파일이다.
strTemp = strTemp.Left(strTemp.ReverseFind('/'));
}
token = strTemp.Tokenize("/",ipos); // 첫번째 경로
while (token != "")
{
HTREEITEM titem = ptree->GetItem(item,token);
if( titem == NULL)
pView->AppendObject(item,true,token,0,"");
item = ptree->GetItem(item,token);
token= strTemp.Tokenize("/",ipos);
};
ptree->SelectItem(item);
/*
if(pclf->attr != CLFILEATTR_FOLDER)
{
CString strName;
strName = strPath.Mid(strPath.ReverseFind('/')+1);
for (;;)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
ncount = pList->GetItemCount();
if(ncount > 1)
break;
}
for (int i = 0; i < ncount; i++)
{
if (pList->GetItemText(i,0) == strName)
{
pList->SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
}
}
}
*/
return TRUE;
}
@@ -0,0 +1,51 @@
// RemoteComboBox.h : header file
//
#pragma once
/////////////////////////////////////////////////////////////////////////////
// CShellTreeCtrl window
class CRemoteComboBox : public CComboBoxEx
{
// Construction
public:
CRemoteComboBox();
// Attributes
protected:
public:
// Operations
protected:
int m_iSPos, m_iEPos;
public:
void Init();
void Add(HTREEITEM hti);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRemoteComboBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CRemoteComboBox();
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CRemoteComboBox)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSelchange();
// afx_msg void OnCbenEndedit(NMHDR *pNMHDR, LRESULT *pResult);
virtual BOOL PreTranslateMessage(MSG* pMsg);
BOOL SetDirectPath(void);
};
@@ -0,0 +1,793 @@
// RemoteListCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RemoteListCtrl.h"
#include "MainFrm.h"
#include "RemoteView.h"
#include "LocalView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int KrCompare(LPCTSTR pszText1, LPCTSTR pszText2);
bool IsPathItself(CString sSrcPath, CString sDstPath);
/////////////////////////////////////////////////////////////////////////////
// CRemoteListCtrl
CRemoteListCtrl::CRemoteListCtrl()
{
m_nStyle = 4;
m_nSortColumn = 0;
m_nSortDirect = -1;
}
CRemoteListCtrl::~CRemoteListCtrl()
{
}
BEGIN_MESSAGE_MAP(CRemoteListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CRemoteListCtrl)
//}}AFX_MSG_MAP
ON_WM_CREATE()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDBLCLK()
ON_WM_CONTEXTMENU()
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
ON_COMMAND(ID_LIST_NEWFOLDER, OnListNewfolder)
ON_COMMAND(ID_LIST_REFRESH, OnListRefresh)
ON_COMMAND(ID_LIST_TYPE1, OnListType1)
ON_COMMAND(ID_LIST_TYPE2, OnListType2)
ON_COMMAND(ID_LIST_TYPE3, OnListType3)
ON_COMMAND(ID_LIST_TYPE4, OnListType4)
ON_COMMAND(ID_LIST_SORT1, OnListSort1)
ON_COMMAND(ID_LIST_SORT2, OnListSort2)
ON_COMMAND(ID_LIST_SORT3, OnListSort3)
ON_COMMAND(ID_LIST_SORT4, OnListSort4)
ON_COMMAND(ID_LIST_PASTE, OnListPaste)
ON_COMMAND(ID_LIST_ALL, OnListAll)
ON_COMMAND(ID_LISTFILE_DOWNLOAD, OnListfileDownload)
ON_COMMAND(ID_LISTFILE_SAVEURL, OnListfileSaveUrl)
ON_COMMAND(ID_LISTFILE_CUT, OnListfileCut)
ON_COMMAND(ID_LISTFILE_COPY, OnListfileCopy)
ON_COMMAND(ID_LISTFILE_PASTE, OnListfilePaste)
ON_COMMAND(ID_LISTFILE_DELETE, OnListfileDelete)
ON_COMMAND(ID_LISTFILE_RENAME, OnListfileRename)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRemoteListCtrl message handlers
BOOL CRemoteListCtrl::PreTranslateMessage(MSG* pMsg)
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
switch (pMsg->message) {
case WM_SETFOCUS:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
pmf->SetFocus(this);
break;
case WM_KEYDOWN:
CEdit *edit = GetEditControl();
if (edit) {
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
else if (pMsg->wParam == VK_F2) {
for (int i = 0; i < GetItemCount(); i++) {
if (LVIS_FOCUSED & GetItemState(i, LVIF_TEXT)) {
EditLabel(i);
break;
}
}
return TRUE;
}
else if (pMsg->wParam == VK_DELETE) {
((CRemoteView*)GetParent())->DeleteListItem();
return TRUE;
}
else if (GetKeyState(VK_CONTROL) & 128) {
if (pMsg->wParam == VK_A) {
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->m_bUpdating = TRUE;
for (int i = 0; i < GetItemCount(); i++)
SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
pmf->m_pRemoteView->m_bUpdating = FALSE;
pmf->m_pRemoteView->ShowStatusObject(TRUE, FALSE, TRUE);
return TRUE;
}
else if (pMsg->wParam == VK_C) {
// 2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
SetClipboard(CBS_COPY);
#else
AfxMessageBox(IDS_COPY_NOT_ALLOWD, MB_ICONERROR);
#endif // _USE_COPY_
return TRUE;
}
else if (pMsg->wParam == VK_X) {
SetClipboard(CBS_CUT);
return TRUE;
}
else if (pMsg->wParam == VK_V) {
PasteClipboard();
return TRUE;
}
else if (pMsg->wParam == VK_D) {
OnListfileDelete();
return TRUE;
}
}
}
return CListCtrl::PreTranslateMessage(pMsg);
}
int CRemoteListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// if (CListCtrl::OnCreate(lpCreateStruct) == -1)
// return -1;
m_dropTarget.Register(this);
int anWidths[7]={270, 110, 110, 150, 54, 90, 90};
CString sWidths = COptions::GetOption(OPTION_REMOTECOLUMNWIDTHS);
if (sWidths != "")
{
int pos=-1;
int i;
for (i=0; i<6; i++)
{
int oldpos = pos + 1;
pos = sWidths.Find(_T(" "), oldpos);
if (pos == -1)
break;
sWidths.SetAt(pos, 0);
int size = _ttoi(sWidths.Mid(oldpos));
if (size > 0)
anWidths[i] = size;
}
if (i == 6)
{
int size = _ttoi(sWidths.Mid(pos+1));
if (size > 0)
anWidths[i] = size;
}
}
m_asHeader[0] = "이름";
m_asHeader[1] = "크기";
m_asHeader[2] = "종류";
m_asHeader[3] = "수정일자";
m_anHeaderAlign[0] = LVCFMT_LEFT;
m_anHeaderAlign[1] = LVCFMT_RIGHT;
m_anHeaderAlign[2] = LVCFMT_LEFT;
m_anHeaderAlign[3] = LVCFMT_LEFT;
for (int i = 0; i < 4; i++)
InsertColumn(i, m_asHeader[i], m_anHeaderAlign[i], anWidths[i]);
m_ilSort.Create(9, 9, ILC_MASK, 3, 3);
HICON hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_NONE));
m_ilSort.Add(hicon);
hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_ASC));
m_ilSort.Add(hicon);
hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_DESC));
m_ilSort.Add(hicon);
m_ilSort.SetBkColor(CLR_NONE);
SetListStyle(m_nStyle);
SetExtendedStyle(LVS_EX_INFOTIP);
SetCallbackMask(GetCallbackMask() | LVIS_OVERLAYMASK);
return 0;
}
BOOL CRemoteListCtrl::OnEraseBkgnd(CDC* pDC)
{
// return TRUE;
return CListCtrl::OnEraseBkgnd(pDC);
}
void CRemoteListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
int iItem = HitTest(point);
if (iItem < 0)
return;
if (((PRLISTITEM_STRUCT)GetItemData(iItem))->bFolder) {
CRemoteView* pview = (CRemoteView*)GetParent();
CString sName = GetItemText(iItem, 0);
HTREEITEM hti = pview->m_tree.GetSelectedItem();
hti = pview->m_tree.GetChildItem(hti);
while (hti) {
if (sName == pview->m_tree.GetItemText(hti)) {
pview->m_tree.SelectItem(hti);
return;
}
hti = pview->m_tree.GetNextSiblingItem(hti);
}
}
// CListCtrl::OnLButtonDblClk(nFlags, point);
}
void CRemoteListCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
{
CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
if (!ptree->GetRootItem())
return;
CPoint ptHit = point;
ScreenToClient(&ptHit);
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
HTREEITEM htiRoot = pmf->m_pRemoteView->m_tree.GetRootItem();
HTREEITEM htiSelected = pmf->m_pRemoteView->m_tree.GetSelectedItem();
HTREEITEM htiParent = pmf->m_pRemoteView->m_tree.GetParentItem(htiSelected);
CMenu menu, *pmenu;
if ((m_iSelectedItem = HitTest(ptHit)) >= 0) {
menu.LoadMenu(IDR_POP_RLISTFILE);
pmenu = menu.GetSubMenu(0);
ASSERT(pmenu != NULL);
if (htiSelected == htiRoot)
return;
pmenu->SetMenuItemBitmaps(ID_LISTFILE_CUT, MF_BYCOMMAND, &pmf->m_bmCut, &pmf->m_bmCut);
// 2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
pmenu->SetMenuItemBitmaps(ID_LISTFILE_COPY, MF_BYCOMMAND, &pmf->m_bmCopy, &pmf->m_bmCopy);
#endif // _USE_COPY_
pmenu->SetMenuItemBitmaps(ID_LISTFILE_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste);
// dadamin add
if(pmf->m_pLocalView->GetSelectedPath().IsEmpty())
{
pmenu->EnableMenuItem(ID_LISTFILE_DOWNLOAD, MF_GRAYED);
}
// dadamin add
if (((PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem))->bFolder) {
COleDataObject odo;
if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP))
&& !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0))
pmenu->EnableMenuItem(ID_LISTFILE_PASTE, MF_GRAYED);
}
else
pmenu->DeleteMenu(ID_LISTFILE_PASTE, MF_BYCOMMAND);
if (((PRTREEITEM_STRUCT)ptree->GetItemData(htiSelected))->nClass == TNS_FOLDER) {
HTREEITEM hti = ptree->GetParentItem(htiSelected);
while (((PRTREEITEM_STRUCT)ptree->GetItemData(hti))->nClass == TNS_FOLDER) {
htiSelected = hti;
hti = ptree->GetParentItem(hti);
}
if (((PRTREEITEM_STRUCT)ptree->GetItemData(htiSelected))->saAttr[1] != "1")
pmenu->EnableMenuItem(ID_LISTFILE_SAVEURL, MF_GRAYED);
}
else
pmenu->EnableMenuItem(ID_LISTFILE_SAVEURL, MF_GRAYED);
}
else {
menu.LoadMenu(IDR_POP_RLIST);
pmenu = menu.GetSubMenu(0);
ASSERT(pmenu != NULL);
pmenu->SetMenuItemBitmaps(ID_LIST_NEWFOLDER, MF_BYCOMMAND, &pmf->m_bmFolder, &pmf->m_bmFolder);
pmenu->SetMenuItemBitmaps(ID_LIST_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste);
switch (pmf->m_nRemoteListType) {
case 1:
pmenu->CheckMenuItem(ID_LIST_TYPE1, MF_CHECKED);
break;
case 2:
pmenu->CheckMenuItem(ID_LIST_TYPE2, MF_CHECKED);
break;
case 3:
pmenu->CheckMenuItem(ID_LIST_TYPE3, MF_CHECKED);
break;
case 4:
pmenu->CheckMenuItem(ID_LIST_TYPE4, MF_CHECKED);
break;
}
switch (m_nSortColumn) {
case 0:
pmenu->CheckMenuItem(ID_LIST_SORT1, MF_CHECKED);
break;
case 1:
pmenu->CheckMenuItem(ID_LIST_SORT2, MF_CHECKED);
break;
case 2:
pmenu->CheckMenuItem(ID_LIST_SORT3, MF_CHECKED);
break;
case 3:
pmenu->CheckMenuItem(ID_LIST_SORT4, MF_CHECKED);
break;
}
if (htiSelected == htiRoot) {
pmenu->EnableMenuItem(ID_LIST_NEWFOLDER, MF_GRAYED);
pmenu->EnableMenuItem(ID_LIST_ALL, MF_GRAYED);
pmenu->EnableMenuItem(ID_LIST_PASTE, MF_GRAYED);
}
else {
COleDataObject odo;
if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP))
&& !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0))
pmenu->EnableMenuItem(ID_LIST_PASTE, MF_GRAYED);
}
}
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}
void CRemoteListCtrl::OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
POSITION pos = GetFirstSelectedItemPosition();
if (ptree->GetSelectedItem() == ptree->GetRootItem() || !pos)
return;
CString sPath = ptree->GetPath(ptree->GetSelectedItem()) + "/";
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
pmf->m_bDragFromRemote = TRUE;
pmf->m_htiDragTarget = ptree->GetVolumeItem(ptree->GetSelectedItem());
pmf->m_saDragSource.RemoveAll();
while (pos)
{
int iItem = GetNextSelectedItem(pos);
pmf->m_saDragSource.Add(sPath + GetItemText(iItem, 0));
}
pmf->m_pLocalView->StartDrag();
COleDataSource ods;
DROPEFFECT de = ods.DoDragDrop(DROPEFFECT_COPY |DROPEFFECT_MOVE, NULL);
pmf->m_pLocalView->EndDrag();
pmf->m_bDragFromRemote = FALSE;
*pResult = 0;
}
void CRemoteListCtrl::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
Sort(pNMListView->iSubItem);
*pResult = 0;
}
void CRemoteListCtrl::OnListNewfolder()
{
SetFocus();
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->MakeNewFolder();
}
void CRemoteListCtrl::OnListRefresh()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->RefreshItem();
}
void CRemoteListCtrl::OnListType1()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->OnViewRlistType1();
}
void CRemoteListCtrl::OnListType2()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->OnViewRlistType2();
}
void CRemoteListCtrl::OnListType3()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->OnViewRlistType3();
}
void CRemoteListCtrl::OnListType4()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->OnViewRlistType4();
}
void CRemoteListCtrl::OnListSort1()
{
Sort(0);
}
void CRemoteListCtrl::OnListSort2()
{
Sort(1);
}
void CRemoteListCtrl::OnListSort3()
{
Sort(2);
}
void CRemoteListCtrl::OnListSort4()
{
Sort(3);
}
void CRemoteListCtrl::OnListPaste()
{
PasteClipboard();
}
void CRemoteListCtrl::OnListAll()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->m_bUpdating = TRUE;
for (int i = 0; i < GetItemCount(); i++)
SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
pmf->m_pRemoteView->m_bUpdating = FALSE;
pmf->m_pRemoteView->ShowStatusObject(TRUE, FALSE, TRUE);
}
void CRemoteListCtrl::OnListfileDownload()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->Download();
}
void CRemoteListCtrl::OnListfileSaveUrl()
{
/*
if (((CRemoteView*)GetParent())->m_nSelectedFiles == 0) {
AfxMessageBox("URL로 저장할 파일을 선택하십시오. URL 저장은 파일만 가능합니다.");
return;
}
*/
((CMainFrame*)AfxGetMainWnd())->SaveUrl();
}
void CRemoteListCtrl::OnListfileCut()
{
SetClipboard(CBS_CUT);
}
void CRemoteListCtrl::OnListfileCopy()
{
//2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
SetClipboard(CBS_COPY);
#endif // _USE_COPY_
}
void CRemoteListCtrl::OnListfilePaste()
{
//TODO...
PasteClipboard(GetItemText(m_iSelectedItem, 0));
}
void CRemoteListCtrl::OnListfileDelete()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->DeleteListItem();
}
void CRemoteListCtrl::OnListfileRename()
{
EditLabel(m_iSelectedItem);
}
BOOL CRemoteListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
if (nSubItem == 0) {
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(nItem);
if (prli) {
CString sText = lpszText;
prli->sName = sText;
prli->saAttr[0] = sText.MakeUpper();
}
}
return CListCtrl::SetItemText(nItem, nSubItem, lpszText);
}
void CRemoteListCtrl::SetListStyle(int nStyle)
{
UINT nSHOption = SHGFI_ICON | SHGFI_SYSICONINDEX;
int nLVOption;
if (nStyle == 1) {
m_nStyle = LVS_ICON;
nSHOption |= SHGFI_LARGEICON;
nLVOption = LVSIL_NORMAL;
}
else if (nStyle == 2) {
m_nStyle = LVS_SMALLICON;
nSHOption |= SHGFI_SMALLICON;
nLVOption = LVSIL_SMALL;
}
else if (nStyle == 3) {
m_nStyle = LVS_LIST;
nSHOption |= SHGFI_SMALLICON;
nLVOption = LVSIL_SMALL;
}
else if (nStyle == 4) {
m_nStyle = LVS_REPORT;
nSHOption |= SHGFI_SMALLICON;
nLVOption = LVSIL_SMALL;
}
int nRemove = ~m_nStyle & (LVS_REPORT | LVS_ICON | LVS_SMALLICON | LVS_LIST);
ModifyStyle(nRemove, m_nStyle, SWP_NOZORDER);
SHFILEINFO shfi;
HIMAGELIST hil = (HIMAGELIST)SHGetFileInfo("", 0, &shfi, sizeof(shfi), nSHOption);
SetImageList(CImageList::FromHandle(hil), nLVOption);
Arrange(LVA_DEFAULT);
Sort();
}
void CRemoteListCtrl::SetClipboard(CLIPBOARD_STATE cbs)
{
if (OpenClipboard()) {
EmptyClipboard();
CloseClipboard();
}
POSITION pos = GetFirstSelectedItemPosition();
if (!pos)
return;
CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
HTREEITEM hti = ptree->GetSelectedItem();
if (hti == ptree->GetRootItem())
return;
CString sPath = ptree->GetPath(hti);
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_cbs = cbs;
pmf->m_htiDragTarget = ptree->GetVolumeItem(hti);
pmf->m_saDragSource.RemoveAll();
while (pos) {
int iItem = GetNextSelectedItem(pos);
pmf->m_saDragSource.Add(sPath + "/" + GetItemText(iItem, 0));
}
}
void CRemoteListCtrl::PasteClipboard(CString sFolder)
{
if (sFolder != "")
sFolder = "/" + sFolder;
CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
HTREEITEM htiTarget = ptree->GetSelectedItem();
if (htiTarget == ptree->GetRootItem())
return;
COleDataObject odo;
if (odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) {
STGMEDIUM sm;
FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (!odo.GetData(CF_HDROP, &sm, &fe))
return;
HDROP hdrop = (HDROP)sm.hGlobal;
int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);
if (nDragCount == 0)
return;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
pmf->m_saDragSource.RemoveAll();
char szFile[MAX_PATH];
for (int i = 0; i < nDragCount; i++) {
::DragQueryFile(hdrop, i, szFile, sizeof(szFile));
CString sFile(szFile);
if (sFile.Find('\\') < 0) {
AfxMessageBox("시스템 파일은 업로드 할 수 없습니다.");
pmf->m_saDragSource.RemoveAll();
break;
}
pmf->m_saDragSource.Add(sFile);
}
if (pmf->m_saDragSource.GetCount() == 0)
return;
pmf->m_sDragTarget = ptree->GetPath(htiTarget) + sFolder;
pmf->m_htiDragTarget = ptree->GetVolumeItem(htiTarget);
pmf->Upload(false);
}
else {
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (pmf->m_cbs == CBS_NONE)
return;
if (pmf->m_saDragSource.GetCount() == 0)
return;
if (ptree->GetVolumeItem(htiTarget) != pmf->m_htiDragTarget) {
AfxMessageBox("서로 다른 서비스사이에는 파일을 복사 또는 이동 할 수 없습니다.");
return;
}
pmf->m_sDragTarget = ptree->GetPath(htiTarget) + sFolder;
for (int i = 0; i < pmf->m_saDragSource.GetCount(); i++) {
if (IsPathItself(pmf->m_saDragSource[i], pmf->m_sDragTarget)) {
AfxMessageBox("자기 자신의 하위 폴더로 복사 또는 이동 할 수 없습니다.");
return;
}
}
pmf->BeginWaitMessage();
CStringArray saSucceed;
if (pmf->m_cbs == CBS_COPY)
pmf->CopyRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
else
pmf->MoveRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
CRemoteView* pview = (CRemoteView*)GetParent();
for (int i = 0; i < saSucceed.GetCount(); i++) {
HTREEITEM hti = ptree->GetItem(pmf->m_htiDragTarget, saSucceed[i]);
if (!hti)
continue;
CString sName = saSucceed[i].Mid(saSucceed[i].ReverseFind('/') + 1);
if (!ptree->IsExistsChild(htiTarget, sName))
pview->AppendObject(htiTarget, true, sName, 0, "");
if (pmf->m_cbs == CBS_CUT)
ptree->DeleteItem(hti);
}
pmf->EndWaitMessage();
if (saSucceed.GetCount() == 0)
return;
pmf->m_pRemoteView->RefreshItem();
}
}
void CRemoteListCtrl::Sort(int nColumn)
{
HDITEM *phdi = new HDITEM;
if (nColumn >= 0) {
if (m_nSortColumn != nColumn) {
phdi->pszText = m_asHeader[m_nSortColumn].GetBuffer(0);
phdi->cchTextMax = 0;
phdi->mask = HDI_TEXT | HDI_IMAGE | HDI_FORMAT;
phdi->fmt = m_anHeaderAlign[m_nSortColumn] | HDF_IMAGE | HDF_STRING | HDF_BITMAP_ON_RIGHT;
phdi->iImage = 0;
GetHeaderCtrl()->SetItem(m_nSortColumn, phdi);
}
else
m_nSortDirect = -m_nSortDirect;
m_nSortColumn = nColumn;
}
GetHeaderCtrl()->SetImageList(&m_ilSort);
phdi->pszText = m_asHeader[m_nSortColumn].GetBuffer(0);
phdi->cchTextMax = 0;
phdi->mask = HDI_TEXT | HDI_IMAGE | HDI_FORMAT;
phdi->fmt = m_anHeaderAlign[m_nSortColumn] | HDF_IMAGE | HDF_STRING | HDF_BITMAP_ON_RIGHT;
phdi->iImage = (m_nSortDirect > 0 ? 1 : 2);
GetHeaderCtrl()->SetItem(m_nSortColumn, phdi);
delete phdi;
SortItems(SortProc, (LPARAM)this);
}
int CRemoteListCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
PRLISTITEM_STRUCT prli1 = (PRLISTITEM_STRUCT)lParam1;
PRLISTITEM_STRUCT prli2 = (PRLISTITEM_STRUCT)lParam2;
CRemoteListCtrl *plist = (CRemoteListCtrl*)lParamSort;
CString sText1 = (prli1->bFolder ? "0" : "1");
CString sText2 = (prli2->bFolder ? "0" : "1");
switch (plist->m_nSortColumn) {
case 0:// 파일명
sText1 += prli1->saAttr[0];
sText2 += prli2->saAttr[0];
break;
case 1: // 사이즈 정렬
if (!prli1->bFolder && prli2->bFolder)
return -1 * (-plist->m_nSortDirect);
if (prli1->bFolder)
return 1 * (-plist->m_nSortDirect);
if (prli1->bFolder && prli2->bFolder)
return 0;
if (prli1->nSize > prli2->nSize)
return 1 * (-plist->m_nSortDirect);
if (prli1->nSize < prli2->nSize)
return -1 * (-plist->m_nSortDirect);
if (prli1->nSize == prli2->nSize)
return 0;
break;
case 2: // 종류
sText1 += prli1->saAttr[2];
sText2 += prli2->saAttr[2];
break;
case 3: // 날짜
sText1 += prli1->saAttr[plist->m_nSortColumn];
sText2 += prli2->saAttr[plist->m_nSortColumn];
break;
default:
sText1 += prli1->saAttr[plist->m_nSortColumn] + prli1->saAttr[0];
sText2 += prli2->saAttr[plist->m_nSortColumn] + prli2->saAttr[0];
break;
}
return (KrCompare(sText1, sText2) * (-plist->m_nSortDirect));
}
@@ -0,0 +1,95 @@
// RemoteListCtrl.h : header file
//
#pragma once
#include "MainFrm.h"
#include "RLDropTarget.h"
/////////////////////////////////////////////////////////////////////////////
// CShellListCtrl window
class CRemoteListCtrl : public CListCtrl
{
// Construction
public:
CRemoteListCtrl();
// Attributes
protected:
CRLDropTarget m_dropTarget;
int m_nStyle;
CImageList m_ilSort;
int m_nSortColumn;
int m_nSortDirect;
CString m_asHeader[4];
int m_anHeaderAlign[4];
int m_iSelectedItem;
public:
// Operations
protected:
static int CALLBACK SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
BOOL SetSysImageList();
void SetClipboard(CLIPBOARD_STATE cbs);
void PasteClipboard(CString sFolder = "");
public:
BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText);
void SetListStyle(int nStyle);
void Sort(int nColumn = -1);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRemoteListCtrl)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CRemoteListCtrl();
protected:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
//{{AFX_MSG(CRemoteListCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLButtonDblClk(UINT /*nFlags*/, CPoint /*point*/);
afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
afx_msg void OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnListNewfolder();
afx_msg void OnListRefresh();
afx_msg void OnListType1();
afx_msg void OnListType2();
afx_msg void OnListType3();
afx_msg void OnListType4();
afx_msg void OnListSort1();
afx_msg void OnListSort2();
afx_msg void OnListSort3();
afx_msg void OnListSort4();
afx_msg void OnListPaste();
afx_msg void OnListAll();
afx_msg void OnListfileDownload();
afx_msg void OnListfileSaveUrl();
afx_msg void OnListfileCut();
afx_msg void OnListfileCopy();
afx_msg void OnListfilePaste();
afx_msg void OnListfileDelete();
afx_msg void OnListfileRename();
};
@@ -0,0 +1,792 @@
// RemoteTreeCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RemoteTreeCtrl.h"
#include "MainFrm.h"
#include "LocalView.h"
#include "RemoteView.h"
#include "BandwidthDlg.h"
#include "VolumeInfoDlg.h"
#include ".\remotetreectrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString NumericFormat(__int64 nNumeric);
CString BYTE2KMBYTE(__int64 nBytes, int nFlag, bool bShowDecimalPoint);
bool IsPathItself(CString sSrcPath, CString sDstPath);
/////////////////////////////////////////////////////////////////////////////
// CRemoteTreeCtrl
CRemoteTreeCtrl::CRemoteTreeCtrl()
{
}
CRemoteTreeCtrl::~CRemoteTreeCtrl()
{
}
BEGIN_MESSAGE_MAP(CRemoteTreeCtrl, CTreeCtrl)
//{{AFX_MSG_MAP(CRemoteTreeCtrl)
//}}AFX_MSG_MAP
ON_WM_CREATE()
ON_NOTIFY_REFLECT(NM_RCLICK, OnNMRclick)
ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnBegindrag)
// ON_WM_CONTEXTMENU()
ON_COMMAND(ID_TREE_CUT, OnTreeCut)
ON_COMMAND(ID_TREE_COPY, OnTreeCopy)
ON_COMMAND(ID_TREE_PASTE, OnTreePaste)
ON_COMMAND(ID_TREE_DELETE, OnTreeDelete)
ON_COMMAND(ID_TREE_RENAME, OnTreeRename)
ON_COMMAND(ID_TREE_SETANONY, OnTreeSetAnony)
ON_COMMAND(ID_TREE_UNSETANONY, OnTreeUnsetAnony)
ON_COMMAND(ID_TREE_SETBANDWIDTH, OnTreeSetBandwidth)
ON_COMMAND(ID_TREE_INFO, OnTreeInfo)
// ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnTvnEndlabeledit)
// ON_NOTIFY_REFLECT(TVN_BEGINLABELEDIT, OnTvnBeginlabeledit)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRemoteTreeCtrl message handlers
BOOL CRemoteTreeCtrl::PreTranslateMessage(MSG* pMsg)
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
switch (pMsg->message)
{
case WM_SETFOCUS:
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
pmf->SetFocus(this);
break;
case WM_KEYDOWN:
CEdit *edit = GetEditControl();
if (edit) {
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
else if (pMsg->wParam == VK_F2) {
HTREEITEM hti = GetSelectedItem();
if (!hti)
return TRUE;
if (!GetParentItem(hti))
return TRUE;
EditLabel(hti);
return TRUE;
}
else if (pMsg->wParam == VK_DELETE) {
((CRemoteView*)GetParent())->DeleteTreeItem(GetSelectedItem());
return TRUE;
}
else if (GetKeyState(VK_CONTROL) & 128) {
if (pMsg->wParam == VK_C) {
//2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
SetClipboard(GetSelectedItem(), CBS_COPY);
#else
AfxMessageBox(IDS_COPY_NOT_ALLOWD, MB_ICONERROR);
#endif // _USE_COPY_
return TRUE;
}
else if (pMsg->wParam == VK_X) {
SetClipboard(GetSelectedItem(), CBS_CUT);
return TRUE;
}
else if (pMsg->wParam == VK_V) {
PasteClipboard(GetSelectedItem());
return TRUE;
}
else if (pMsg->wParam == VK_D) {
HTREEITEM hti = GetSelectedItem();
if (!hti || hti == GetRootItem() || GetParentItem(hti) == GetRootItem())
return TRUE;
m_htiSelected = hti;
OnTreeDelete();
return TRUE;
}
}
}
return CTreeCtrl::PreTranslateMessage(pMsg);
}
int CRemoteTreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
// return -1;
m_dropTarget.Register(this);
SHFILEINFO shfi;
HIMAGELIST hil = (HIMAGELIST)SHGetFileInfo("", 0, &shfi, sizeof(shfi), SHGFI_ICON | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
SetImageList(CImageList::FromHandle(hil), TVSIL_NORMAL);
return 0;
}
void CRemoteTreeCtrl::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult)
{
DWORD dwPos = GetMessagePos();
CPoint pt(GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos));
CPoint ptHit = pt;
ScreenToClient(&ptHit);
if (m_htiSelected = HitTest(ptHit))
OnContextMenu(this, pt);
*pResult = 0;
}
void CRemoteTreeCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
{
if (m_htiSelected == GetRootItem())
return;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CMenu menu, *pmenu;
menu.LoadMenu(IDR_POP_RTREE);
pmenu = menu.GetSubMenu(0);
ASSERT(pmenu != NULL);
pmenu->SetMenuItemBitmaps(ID_TREE_CUT, MF_BYCOMMAND, &pmf->m_bmCut, &pmf->m_bmCut);
//2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
pmenu->SetMenuItemBitmaps(ID_TREE_COPY, MF_BYCOMMAND, &pmf->m_bmCopy, &pmf->m_bmCopy);
#endif // _USE_COPY_
pmenu->SetMenuItemBitmaps(ID_TREE_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste);
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(m_htiSelected);
if (prti->nClass == TNS_VOLUME) {
pmenu->EnableMenuItem(ID_TREE_CUT, MF_GRAYED);
//2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
pmenu->EnableMenuItem(ID_TREE_COPY, MF_GRAYED);
#endif // _USE_COPY_
pmenu->EnableMenuItem(ID_TREE_DELETE, MF_GRAYED);
pmenu->EnableMenuItem(ID_TREE_RENAME, MF_GRAYED);
pmenu->DeleteMenu(6, MF_BYPOSITION);
pmenu->DeleteMenu(ID_TREE_SETANONY, MF_BYCOMMAND);
pmenu->DeleteMenu(ID_TREE_UNSETANONY, MF_BYCOMMAND);
pmenu->DeleteMenu(ID_TREE_SETBANDWIDTH, MF_BYCOMMAND);
}
else {
pmenu->DeleteMenu(10, MF_BYPOSITION);
// pmenu->DeleteMenu(ID_TREE_INFO, MF_BYCOMMAND);
if (((PRTREEITEM_STRUCT)GetItemData(GetParentItem(m_htiSelected)))->nClass != TNS_FOLDER) {
pmenu->DeleteMenu(!atoi(prti->saAttr[1]) ? ID_TREE_UNSETANONY : ID_TREE_SETANONY, MF_BYCOMMAND);
}
else {
pmenu->DeleteMenu(6, MF_BYPOSITION);
pmenu->DeleteMenu(ID_TREE_SETANONY, MF_BYCOMMAND);
pmenu->DeleteMenu(ID_TREE_UNSETANONY, MF_BYCOMMAND);
pmenu->DeleteMenu(ID_TREE_SETBANDWIDTH, MF_BYCOMMAND);
}
}
COleDataObject odo;
if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP))
&& !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0))
pmenu->EnableMenuItem(ID_TREE_PASTE, MF_GRAYED);
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
}
void CRemoteTreeCtrl::OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
HTREEITEM hti = pNMTreeView->itemNew.hItem;
if (hti == GetRootItem() || GetParentItem(hti) == GetRootItem())
return;
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_bDragFromRemote = TRUE;
pmf->m_htiDragTarget = GetVolumeItem(hti);
pmf->m_saDragSource.RemoveAll();
pmf->m_saDragSource.Add(GetPath(hti));
pmf->m_pLocalView->StartDrag();
COleDataSource ods;
DROPEFFECT de = ods.DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE, NULL);
pmf->m_pLocalView->EndDrag();
pmf->m_bDragFromRemote = FALSE;
*pResult = 0;
}
void CRemoteTreeCtrl::OnTreeCut()
{
SetClipboard(m_htiSelected, CBS_CUT);
}
void CRemoteTreeCtrl::OnTreeCopy()
{
// 2014.07.25 dadamin copy 기능 제거
#ifdef _USE_COPY_
SetClipboard(m_htiSelected, CBS_COPY);
#endif // _USE_COPY_
}
void CRemoteTreeCtrl::OnTreePaste()
{
PasteClipboard(m_htiSelected);
}
void CRemoteTreeCtrl::OnTreeDelete()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_pRemoteView->DeleteTreeItem(m_htiSelected);
}
void CRemoteTreeCtrl::OnTreeRename()
{
EditLabel(m_htiSelected);
}
void CRemoteTreeCtrl::OnTreeSetAnony()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
HTREEITEM htiVolume = GetVolumeItem(m_htiSelected);
HCOMMLIB hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
if (!cl_set_anonyauth(hcl, GetItemText(htiVolume), TRUE, GetItemText(m_htiSelected))) {
AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
return;
}
((CRemoteView*)GetParent())->SetAnonyFolder(htiVolume, GetItemText(m_htiSelected), true, true);
}
void CRemoteTreeCtrl::OnTreeUnsetAnony()
{
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
HTREEITEM htiVolume = GetVolumeItem(m_htiSelected);
HCOMMLIB hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
if (!cl_set_anonyauth(hcl, GetItemText(htiVolume), FALSE, GetItemText(m_htiSelected))) {
AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
return;
}
((CRemoteView*)GetParent())->SetAnonyFolder(htiVolume, GetItemText(m_htiSelected), false, true);
}
void CRemoteTreeCtrl::OnTreeSetBandwidth()
{
CBandwidthDlg dlg;
dlg.m_sPath = GetPath(m_htiSelected);
dlg.m_nLevel = 0;
if (dlg.DoModal() != IDOK)
return;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
HTREEITEM htiVolume = GetVolumeItem(m_htiSelected);
HCOMMLIB hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
// if (!cl_set_anonyauth(hcl, GetItemText(htiVolume), FALSE, GetItemText(m_htiSelected))) {
// AfxMessageBox(cl_get_error_message(hcl), MB_ICONERROR);
// return;
// }
}
void CRemoteTreeCtrl::OnTreeInfo()
{
PRTREEITEM_STRUCT prtiTree;
HTREEITEM htiVolume;
PRTREEITEM_STRUCT prtiVolume;
CString sVolumeId;
RFOLDERINFO_STRUCT folderinfo;
CVolumeInfoDlg dlg;
__int64 nTotalBytes;
__int64 nUsedBytes;
BeginWaitCursor();
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
prtiTree = (PRTREEITEM_STRUCT)GetItemData(m_htiSelected);
if(prtiTree->nClass == TNS_VOLUME)
{
pmf->UpdateVolumeInfo(m_htiSelected);
htiVolume = GetVolumeItem(m_htiSelected);
prtiVolume = (PRTREEITEM_STRUCT)GetItemData(htiVolume);
sVolumeId = GetItemText(htiVolume);
nTotalBytes = _atoi64(prtiVolume->saAttr[2]);
nUsedBytes = _atoi64(prtiVolume->saAttr[3]);
dlg.m_sType = "서비스";
dlg.m_sTitle = sVolumeId;
}
else
{
folderinfo.nCountFile = 0;
folderinfo.nCountFolder = 0;
folderinfo.nSize = 0;
pmf->GetFolderInfo(m_htiSelected,&folderinfo);
nTotalBytes = folderinfo.nSize;
nUsedBytes = folderinfo.nSize;
dlg.m_sType = "폴더";
dlg.m_sTitle = folderinfo.strName;
}
dlg.m_sTotalSpace = NumericFormat(nTotalBytes) + "Bytes";
dlg.m_sTotalSpaceT = BYTE2KMBYTE(nTotalBytes, 0, TRUE);
int nFlag = 0;
CString sUnit = dlg.m_sTotalSpaceT.Right(2);
if (sUnit == "KB")
nFlag = 1;
else if (sUnit == "MB")
nFlag = 2;
else if (sUnit == "GB")
nFlag = 3;
else if (sUnit == "TB")
nFlag = 4;
__int64 nFreeBytes = nTotalBytes - nUsedBytes;
dlg.m_sUseSpace = NumericFormat(nUsedBytes) + "Bytes";
dlg.m_sUseSpaceT = BYTE2KMBYTE(nUsedBytes, nFlag, TRUE);
dlg.m_sFreeSpace = NumericFormat(nFreeBytes) + "Bytes";
dlg.m_sFreeSpaceT = BYTE2KMBYTE(nFreeBytes, nFlag, TRUE);
dlg.DoModal();
((CRemoteView*)GetParent())->ShowStatusSpace();
/*
__int64 nTotalBytes, nUsedBytes;
BOOL bRet = pdwft->GetVolumeInfo(GetPath(m_htiSelected), &nUsedBytes);
pmf->RecycleConnection(pdwft);
EndWaitCursor();
if (!bRet) {
CString sMsg;
sMsg.Format("서비스 정보를 가져올 수 없습니다.\n%s", pdwft->GetErrorMessage());
AfxMessageBox(sMsg, MB_ICONERROR);
return;
}
CVolumeInfoDlg dlg;
HTREEITEM htiVolume, hti = m_htiSelected;
while (hti != GetRootItem()) {
htiVolume = hti;
hti = GetParentItem(hti);
}
PT_TREENODE ptn = (PT_TREENODE)GetItemData(htiVolume);
dlg.m_sTitle = GetItemText(htiVolume);
int iPos, iPos2;
iPos = ptn->sAttribute.Find('|') + 1;
iPos = ptn->sAttribute.Find('|', iPos) + 1;
iPos2 = ptn->sAttribute.Find('|', iPos);
nTotalBytes = _atoi64(ptn->sAttribute.Mid(iPos, iPos2 - iPos));
if (GetParentItem(m_htiSelected) == GetRootItem()) {
UpdateVolumeInfo(htiVolume, nUsedBytes);
dlg.m_sType = "서비스";
}
else {
dlg.m_sType = "폴더";
dlg.m_sTitle += GetPath(m_htiSelected);
}
__int64 nFreeBytes = nTotalBytes - nUsedBytes;
dlg.m_sTotalSpace = NumericFormat(nTotalBytes) + "Bytes";
dlg.m_sTotalSpaceT = BYTE2KMBYTE(nTotalBytes, 0, TRUE);
int nFlag = 0;
if (dlg.m_sType == "서비스") {
CString sUnit = dlg.m_sTotalSpaceT.Right(2);
if (sUnit == "KB")
nFlag = 1;
else if (sUnit == "MB")
nFlag = 2;
else if (sUnit == "GB")
nFlag = 3;
else if (sUnit == "TB")
nFlag = 4;
}
dlg.m_sUseSpace = NumericFormat(nUsedBytes) + "Bytes";
dlg.m_sUseSpaceT = BYTE2KMBYTE(nUsedBytes, nFlag, TRUE);
dlg.m_sFreeSpace = NumericFormat(nFreeBytes) + "Bytes";
dlg.m_sFreeSpaceT = BYTE2KMBYTE(nFreeBytes, nFlag, TRUE);
dlg.DoModal();
((CRemoteView*)GetParent())->ShowStatusSpace();
*/
}
HTREEITEM CRemoteTreeCtrl::InsertItem(LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
HTREEITEM hti = CTreeCtrl::InsertItem(lpszItem, hParent, hInsertAfter);
if (TVI_ROOT != hParent)
Sort(hParent);
return hti;
}
HTREEITEM CRemoteTreeCtrl::InsertItem(LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent, HTREEITEM hInsertAfter)
{
HTREEITEM hti = CTreeCtrl::InsertItem(lpszItem, nImage, nSelectedImage, hParent, hInsertAfter);
if (TVI_ROOT != hParent)
Sort(hParent);
return hti;
}
BOOL CRemoteTreeCtrl::SetItemText(HTREEITEM hItem, LPCTSTR lpszItem)
{
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(hItem);
if (prti)
prti->saAttr[1] = prti->saAttr[1].Left(prti->saAttr[1].ReverseFind('/') + 1) + lpszItem;
return CTreeCtrl::SetItemText(hItem, lpszItem);
}
BOOL CRemoteTreeCtrl::DeleteItem(HTREEITEM hItem)
{
if(ItemHasChildren(hItem))
DeleteChildItem(hItem);
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(hItem);
if (prti)
{
for (int i = 0; i < prti->paObject.GetCount(); i++)
{
// CString strTemp;
// strTemp.Format(_T("DeleteItem : %s"),((PRLISTITEM_STRUCT)prti->paObject[i])->sName);
// OutputDebugString(strTemp);
delete (PRLISTITEM_STRUCT)prti->paObject[i];
}
prti->paObject.RemoveAll();
prti->saAttr.RemoveAll();
delete prti;
}
return CTreeCtrl::DeleteItem(hItem);
}
BOOL CRemoteTreeCtrl::DeleteAllItems()
{
SetRedraw(FALSE);
HTREEITEM hti = GetRootItem();
while (hti)
{
HTREEITEM htiRoot = hti;
while (hti)
{
if (ItemHasChildren(hti))
{
hti = GetChildItem(hti);
continue;
}
else if (htiRoot == hti)
break;
HTREEITEM htiParent = GetParentItem(hti);
DeleteItem(hti);
hti = htiParent;
}
hti = GetNextSiblingItem(htiRoot);
DeleteItem(htiRoot);
}
SetRedraw(TRUE);
return TRUE;//CTreeCtrl::DeleteAllItems();
}
void CRemoteTreeCtrl::DeleteChildItem(HTREEITEM hti)
{
OutputDebugString(_T("DeleteChildItem"));
if (!hti)
hti = GetSelectedItem();
if (!hti)
return;
HTREEITEM htiCurrent = hti;
SetRedraw(FALSE);
while (hti)
{
if (ItemHasChildren(hti))
{
hti = GetChildItem(hti);
continue;
}
else if (htiCurrent == hti)
break;
HTREEITEM htiParent = GetParentItem(hti);
DeleteItem(hti);
hti = htiParent;
}
SetRedraw(TRUE);
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(hti);
if (prti) {
for (int i = 0; i < prti->paObject.GetCount(); i++)
delete (PRLISTITEM_STRUCT)prti->paObject[i];
prti->paObject.RemoveAll();
}
}
CString CRemoteTreeCtrl::GetPath(HTREEITEM hti)
{
if (!hti)
hti = GetSelectedItem();
CString sPath = "";
while (((PRTREEITEM_STRUCT)GetItemData(hti))->nClass == TNS_FOLDER) {
sPath = "/" + GetItemText(hti) + sPath;
hti = GetParentItem(hti);
}
return sPath;
}
HTREEITEM CRemoteTreeCtrl::GetVolumeItem(HTREEITEM hti)
{
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(hti);
ASSERT(prti);
if (prti->nClass == TNS_ROOT)
return NULL;
while (hti) {
prti = (PRTREEITEM_STRUCT)GetItemData(hti);
if (prti->nClass == TNS_VOLUME)
break;
hti = GetParentItem(hti);
}
return hti;
}
CString CRemoteTreeCtrl::GetVolumeText(HTREEITEM hti)
{
while (hti && GetParentItem(hti) != GetRootItem())
hti = GetParentItem(hti);
return GetItemText(hti);
}
HTREEITEM CRemoteTreeCtrl::GetItem(HTREEITEM hti, CString sPath)
{
if (sPath.Left(1) == "/")
sPath.Delete(0);
if (sPath.Right(1) == "/")
sPath.Delete(sPath.GetLength());
int iToken = 0;
CString sToken = sPath.Tokenize("/", iToken);
while (sToken != "")
{
HTREEITEM htiChild = GetChildItem(hti);
while (htiChild) {
if (GetItemText(htiChild) == sToken)
break;
htiChild = GetNextSiblingItem(htiChild);
}
if (!htiChild)
return NULL;
hti = htiChild;
sToken = sPath.Tokenize("/", iToken);
}
return hti;
}
bool CRemoteTreeCtrl::IsExistsChild(HTREEITEM hti, CString sName)
{
PRTREEITEM_STRUCT prti = (PRTREEITEM_STRUCT)GetItemData(hti);
if (!prti)
return false;
for (int i = 0; i < prti->paObject.GetCount(); i++) {
if (((PRLISTITEM_STRUCT)prti->paObject[i])->sName == sName)
return true;
}
return false;
}
void CRemoteTreeCtrl::SetClipboard(HTREEITEM hti, CLIPBOARD_STATE cbs)
{
if (OpenClipboard()) {
EmptyClipboard();
CloseClipboard();
}
if (!hti || hti == GetRootItem() || GetParentItem(hti) == GetRootItem())
return;
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
pmf->m_saDragSource.RemoveAll();
pmf->m_cbs = cbs;
pmf->m_htiDragTarget = GetVolumeItem(hti);
pmf->m_saDragSource.Add(GetPath(hti));
}
void CRemoteTreeCtrl::PasteClipboard(HTREEITEM htiTarget)
{
if (!htiTarget || htiTarget == GetRootItem())
return;
COleDataObject odo;
if (odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) {
STGMEDIUM sm;
FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (!odo.GetData(CF_HDROP, &sm, &fe))
return;
HDROP hdrop = (HDROP)sm.hGlobal;
int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);
if (nDragCount == 0)
return;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
pmf->m_saDragSource.RemoveAll();
char szFile[MAX_PATH];
for (int i = 0; i < nDragCount; i++) {
::DragQueryFile(hdrop, i, szFile, sizeof(szFile));
CString sFile(szFile);
if (sFile.Find('\\') < 0) {
AfxMessageBox("시스템 파일은 업로드 할 수 없습니다.");
pmf->m_saDragSource.RemoveAll();
break;
}
pmf->m_saDragSource.Add(sFile);
}
if (pmf->m_saDragSource.GetCount() == 0)
return;
pmf->m_sDragTarget = GetPath(htiTarget);
pmf->m_htiDragTarget = GetVolumeItem(htiTarget);
pmf->Upload(false);
}
else {
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
if (pmf->m_cbs == CBS_NONE)
return;
if (pmf->m_saDragSource.GetCount() == 0)
return;
if (GetVolumeItem(htiTarget) != pmf->m_htiDragTarget) {
AfxMessageBox("서로 다른 서비스사이에는 파일을 복사 또는 이동 할 수 없습니다.");
return;
}
pmf->m_sDragTarget = GetPath(htiTarget);
for (int i = 0; i < pmf->m_saDragSource.GetCount(); i++) {
if (IsPathItself(pmf->m_saDragSource[i], pmf->m_sDragTarget)) {
AfxMessageBox("자기 자신의 하위 폴더로 복사 또는 이동 할 수 없습니다.");
return;
}
}
pmf->BeginWaitMessage();
CStringArray saSucceed;
if (pmf->m_cbs == CBS_COPY)
pmf->CopyRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
else
pmf->MoveRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed);
CRemoteView* pview = (CRemoteView*)GetParent();
for (int i = 0; i < saSucceed.GetCount(); i++) {
HTREEITEM hti = GetItem(pmf->m_htiDragTarget, saSucceed[i]);
if (!hti)
continue;
CString sName = saSucceed[i].Mid(saSucceed[i].ReverseFind('/') + 1);
if (!IsExistsChild(htiTarget, sName))
pview->AppendObject(htiTarget, true, sName, 0, "");
if (pmf->m_cbs == CBS_CUT)
DeleteItem(hti);
}
pmf->EndWaitMessage();
if (saSucceed.GetCount() == 0)
return;
pmf->m_pRemoteView->RefreshItem();
}
}
void CRemoteTreeCtrl::Sort(HTREEITEM hti)
{
SortChildren(hti);
}
@@ -0,0 +1,82 @@
// RemoteTreeCtrl.h : header file
//
#pragma once
#include "MainFrm.h"
#include "RTDropTarget.h"
/////////////////////////////////////////////////////////////////////////////
// CShellTreeCtrl window
class CRemoteTreeCtrl : public CTreeCtrl
{
// Construction
public:
CRemoteTreeCtrl();
// Attributes
protected:
HTREEITEM m_htiSelected;
CRTDropTarget m_dropTarget;
public:
// Operations
protected:
void SetClipboard(HTREEITEM hti, CLIPBOARD_STATE cbs);
void PasteClipboard(HTREEITEM htiTarget);
public:
CString GetPath(HTREEITEM hti = NULL);
HTREEITEM GetVolumeItem(HTREEITEM hti);
CString GetVolumeText(HTREEITEM hti);
HTREEITEM GetItem(HTREEITEM hti, CString sPath);
bool IsExistsChild(HTREEITEM hti, CString sName);
void Sort(HTREEITEM hti = NULL);
void DeleteChildItem(HTREEITEM hti);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CRemoteTreeCtrl)
//}}AFX_VIRTUAL
// Implementation
public:
HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);
BOOL SetItemText(HTREEITEM hItem, LPCTSTR lpszItem);
BOOL DeleteItem(HTREEITEM hItem);
BOOL DeleteAllItems();
virtual ~CRemoteTreeCtrl();
protected:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
//{{AFX_MSG(CRemoteTreeCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
afx_msg void OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTreeCut();
afx_msg void OnTreeCopy();
afx_msg void OnTreePaste();
afx_msg void OnTreeDelete();
afx_msg void OnTreeRename();
afx_msg void OnTreeSetAnony();
afx_msg void OnTreeUnsetAnony();
afx_msg void OnTreeSetBandwidth();
afx_msg void OnTreeInfo();
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,147 @@
#pragma once
#include "RemoteComboBox.h"
#include "RemoteTreeCtrl.h"
#include "RemoteListCtrl.h"
#include "TextProgressCtrl.h"
#define WMU_SHOW_VOLUMELIST (WM_USER + 1)
#define WMU_EXPAND_FOLDERLIST (WM_USER + 2)
#define WMU_SHOW_FOLDERLIST (WM_USER + 3)
#define WMU_SHOW_OBJECTLIST (WM_USER + 4)
#define WM_GET_FILE_LIST_END (WM_USER + 10)
// CRemoteView 폼 뷰입니다.
class CRemoteView : public CFormView
{
protected:
CRemoteView(); // 동적 만들기에 사용되는 protected 생성자입니다.
DECLARE_DYNCREATE(CRemoteView)
public:
enum{ IDD = IDD_REMOTE_VIEW };
public:
virtual ~CRemoteView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
private:
bool m_bClosing;
CString m_sOldFileName;
UINT m_nTimer;
public:
CBitmapButton m_capTitleIcon;
CXTCaption m_capTitle;
CRemoteTreeCtrl m_tree;
CStatic m_capAddr;
CRemoteComboBox m_cboAddr;
CXTButton m_btnGoAddr;
CXTButton m_btnUpAddr;
CXTButton m_btnListStyle;
CRemoteListCtrl m_list;
CXTCaption m_capStatus;
CTextProgressCtrl m_prgStatusSpace;
CStatic m_stcStatusSpace;
CStatic m_stcStatusObject;
CStatic m_stcStatusMsg;
CStatic m_stcSeparator1;
CStatic m_stcSeparator2;
int m_cxSplitter;
BOOL m_bDragSplitter;
long m_nTotalCount;
__int64 m_nTotalBytes;
long m_nTotalFiles;
long m_nSelectedCount;
__int64 m_nSelectedBytes;
long m_nSelectedFiles;
bool m_bUpdating;
CImageList* m_pilSmall;
CImageList* m_pilLarge;
private:
void RedrawControl(int cx, int cy);
void InvertTracker(int x);
bool RefreshObjectlist(HTREEITEM htiFolder, BOOL bRefresh);
void InsertAnonyFolderIcon(bool bLarge, bool bOpen);
bool IsExistsFileName(HTREEITEM htiParent, LPCTSTR pszOldFileName, LPCTSTR pszNewFileName);
public:
inline CRemoteTreeCtrl *GetTreeCtrl() { return &m_tree; }
inline CRemoteListCtrl *GetListCtrl() { return &m_list; }
void SetControlStatus(BOOL bConnected);
void RedrawFocus();
void RedrawControl();
void ApplyListStyle();
void ShowStatusSpace();
void ShowStatusObject(BOOL bSelected = FALSE, BOOL bUpdate = TRUE, BOOL bAllSelected = FALSE);
void AppendObject(HTREEITEM htiParent, bool bFolder, LPCTSTR pszPath, __int64 nSize, LPCTSTR pszLastModified);
void ClearAllData();
// 기능
void RefreshItem();
void MakeNewFolder();
void DeleteTreeItem(HTREEITEM htiDelete);
void DeleteListItem();
BOOL GetSelectedObject(CStringArray &saObject);
void SetAnonyFolder(HTREEITEM htiVolume, LPCTSTR pszFolder, bool bSet, bool bRefresh = false);
protected:
virtual void OnDraw(CDC* pDC); // 이 뷰를 그리기 위해 재정의되었습니다.
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
virtual void OnInitialUpdate(); // 생성 후 처음 호출되었습니다.
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnRemoteTitle();
afx_msg void OnRemoteBtnUpAddr();
afx_msg void OnRemoteBtnListStyle();
afx_msg void OnTreeSelchanged(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTreeItemexpanding(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTreeItemexpanded(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTreeBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTreeEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnListBeginlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnListEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnListItemChanged(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnListNMClick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnShowVolumelist(WPARAM, LPARAM);
afx_msg LRESULT OnExpandFolderlist(WPARAM, LPARAM);
afx_msg LRESULT OnShowFolderlist(WPARAM, LPARAM);
afx_msg LRESULT OnShowObjectlist(WPARAM, LPARAM);
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<SP-Console>
<Settings>
<Item name="Splitter Size" type="string">425</Item>
<Item name="Remote Tree Size" type="numeric">318</Item>
<Item name="Local Tree Size" type="numeric">234</Item>
<Item name="Auto Connect" type="numeric">0</Item>
<Item name="Save Password" type="numeric">1</Item>
<Item name="User ID" type="string">demo</Item>
<Item name="Password" type="string">007010013000115117115116112118119121121114121</Item>
<Item name="Windows Position" type="string">1 -4 -4 1284 976</Item>
</Settings>
</SP-Console>
@@ -0,0 +1,24 @@
#pragma once
typedef struct {
HWND hwnd;
LPVOID pParam;
int nAction;
char szHost[128];
char szUserId[64];
char szPassword[32];
char szProxyHost[128];
int nProxyPort;
__int64 nFreeBytes;
int nFileListSize;
char szDstPath[2048];
} TRANPARAM_STRUCT, *PTRANPARAM_STRUCT;
enum TRANPARAM_ACTION {
TPA_UPLOAD = 0,
TPA_DOWNLOAD,
};
#define EXECUTE_PARAM "$CONSOLE$"
#define WMU_TRANSFER_DLG_CLOSE (WM_USER + 777)
@@ -0,0 +1,14 @@
#ifndef __VERSION_INFO_H__
#define REVISION 1034
#define FILEVER 3,4,0,REVISION
#define PRODUCTVER 3,4,0,REVISION
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define STRFILEVER "3.4.0." STR(REVISION)
#define STRPRODUCTVER "3.4.0." STR(REVISION)
#endif //__VERSION_INFO_H__
@@ -0,0 +1,31 @@
// VolumeInfo1Dlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "VolumeInfo1Dlg.h"
// CVolumeInfo1Dlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CVolumeInfo1Dlg, CDialog)
CVolumeInfo1Dlg::CVolumeInfo1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CVolumeInfo1Dlg::IDD, pParent)
{
}
CVolumeInfo1Dlg::~CVolumeInfo1Dlg()
{
}
void CVolumeInfo1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CVolumeInfo1Dlg, CDialog)
END_MESSAGE_MAP()
// CVolumeInfo1Dlg 메시지 처리기입니다.
@@ -0,0 +1,21 @@
#pragma once
// CVolumeInfo1Dlg 대화 상자입니다.
class CVolumeInfo1Dlg : public CDialog
{
DECLARE_DYNAMIC(CVolumeInfo1Dlg)
public:
CVolumeInfo1Dlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CVolumeInfo1Dlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_VOLUME_INFO1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,86 @@
// VolumeInfoDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "VolumeInfoDlg.h"
// CVolumeInfoDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CVolumeInfoDlg, CDialog)
CVolumeInfoDlg::CVolumeInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CVolumeInfoDlg::IDD, pParent)
, m_sTitle(_T(""))
, m_sType(_T(""))
, m_sUseSpace(_T(""))
, m_sUseSpaceT(_T(""))
, m_sFreeSpace(_T(""))
, m_sFreeSpaceT(_T(""))
, m_sTotalSpace(_T(""))
, m_sTotalSpaceT(_T(""))
{
}
CVolumeInfoDlg::~CVolumeInfoDlg()
{
}
void CVolumeInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STC_ICON, m_stcIcon);
DDX_Text(pDX, IDC_EDT_TITLE, m_sTitle);
DDX_Text(pDX, IDC_STC_TYPE, m_sType);
DDX_Text(pDX, IDC_STC_USESPACE, m_sUseSpace);
DDX_Text(pDX, IDC_STC_USESPACET, m_sUseSpaceT);
DDX_Text(pDX, IDC_STC_FREESPACE, m_sFreeSpace);
DDX_Text(pDX, IDC_STC_FREESPACET, m_sFreeSpaceT);
DDX_Text(pDX, IDC_STC_TOTALSPACE, m_sTotalSpace);
DDX_Text(pDX, IDC_STC_TOTALSPACET, m_sTotalSpaceT);
}
BEGIN_MESSAGE_MAP(CVolumeInfoDlg, CDialog)
ON_WM_DESTROY()
END_MESSAGE_MAP()
// CVolumeInfoDlg 메시지 처리기입니다.
BOOL CVolumeInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SHFILEINFO shfi;
if (!SHGetFileInfo(m_sType == "폴더" ? "" : "C:\\", FILE_ATTRIBUTE_DIRECTORY, &shfi, sizeof(shfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON))
shfi.iIcon = 1;
m_stcIcon.SetIcon(shfi.hIcon);
if (m_sType == "폴더") {
GetDlgItem(IDC_STC_USETITLE)->SetWindowText("크기 : ");
GetDlgItem(IDC_STC_FREETITLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STC_FREESPACE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STC_FREESPACET)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STC_TOTALTITLE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STC_TOTALSPACE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STC_TOTALSPACET)->ShowWindow(SW_HIDE);
SetWindowText("폴더정보");
}
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CVolumeInfoDlg::OnDestroy()
{
CDialog::OnDestroy();
HICON hIcon;
hIcon = m_stcIcon.GetIcon();
if (hIcon)
DestroyIcon(hIcon);
}
@@ -0,0 +1,34 @@
#pragma once
#include "afxwin.h"
// CVolumeInfoDlg 대화 상자입니다.
class CVolumeInfoDlg : public CDialog
{
DECLARE_DYNAMIC(CVolumeInfoDlg)
public:
CVolumeInfoDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CVolumeInfoDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_VOLUME_INFO };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
CStatic m_stcIcon;
CString m_sTitle;
CString m_sType;
CString m_sUseSpace;
CString m_sUseSpaceT;
CString m_sFreeSpace;
CString m_sFreeSpaceT;
CString m_sTotalSpace;
CString m_sTotalSpaceT;
virtual BOOL OnInitDialog();
afx_msg void OnDestroy();
};
@@ -0,0 +1,108 @@
// WaitMessageDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "WaitMessageDlg.h"
#include ".\waitmessagedlg.h"
// CWaitMessageDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CWaitMessageDlg, CDialog)
CWaitMessageDlg::CWaitMessageDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWaitMessageDlg::IDD, pParent)
{
}
CWaitMessageDlg::~CWaitMessageDlg()
{
}
void CWaitMessageDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_PICTURE, m_picture);
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PROGRESS1, m_prg1);
DDX_Control(pDX, IDC_STC, m_stc1);
DDX_Control(pDX, IDC_STC2, m_stc2);
DDX_Control(pDX, IDC_STC3, m_stc3);
}
BEGIN_MESSAGE_MAP(CWaitMessageDlg, CDialog)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_CANCEL_BTN, OnBnClickedCancelBtn)
END_MESSAGE_MAP()
// CWaitMessageDlg 메시지 처리기입니다.
BOOL CWaitMessageDlg::Create(UINT nIDTemplate, CWnd* pParentWnd)
{
return CDialog::Create(nIDTemplate, pParentWnd);
}
BOOL CWaitMessageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (m_picture.Load(MAKEINTRESOURCE(IDR_WAIT), _T("GIF")))
m_picture.Draw();
CenterWindow();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CWaitMessageDlg::PostNcDestroy()
{
// delete this;
CDialog::PostNcDestroy();
}
BOOL CWaitMessageDlg::ShowWindow(int nCmdShow)
{
CDialog::ShowWindow(nCmdShow);
if (nCmdShow == SW_SHOW) {
RedrawWindow();
Invalidate();
m_nTimer = (UINT)SetTimer(TIMER_ID_CHANGE, 1000, 0);
}
else {
if (m_nTimer > 0)
KillTimer(m_nTimer);
m_nTimer = 0;
}
return TRUE;
}
void CWaitMessageDlg::OnTimer(UINT nIDEvent)
{
static CString sText = "";
if (nIDEvent == TIMER_ID_CHANGE) {
sText += ".";
GetDlgItem(IDC_STC)->SetWindowText(sText);
}
CDialog::OnTimer(nIDEvent);
}
void CWaitMessageDlg::OnBnClickedCancelBtn()
{
switch(m_nMode)
{
case 0:
PostMessage(WM_CANCEL_GETLIST,NULL,NULL);
break;
case 1:
PostMessage(WM_CANCEL_MAKETREE,NULL,NULL);
break;
}
}
@@ -0,0 +1,52 @@
#pragma once
#include "PictureEx.h"
#include "afxcmn.h"
#include "afxwin.h"
#define TIMER_ID_CHANGE 1
// CWaitMessageDlg 대화 상자입니다.
class CWaitMessageDlg : public CDialog
{
DECLARE_DYNAMIC(CWaitMessageDlg)
public:
CWaitMessageDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CWaitMessageDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_WAITMESSAGE };
protected:
UINT m_nTimer;
public:
CPictureEx m_picture;
int m_nMode;
public:
BOOL ShowWindow(int nCmdShow);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
virtual BOOL OnInitDialog();
protected:
virtual void PostNcDestroy();
afx_msg void OnTimer(UINT nIDEvent);
public:
CProgressCtrl m_prg1;
CStatic m_stc1;
CStatic m_stc2;
CStatic m_stc3;
afx_msg void OnBnClickedCancelBtn();
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.ConsoleApp"
type="win32"
/>
<description>여기에 응용 프로그램 설명을 추가합니다.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
@@ -0,0 +1,67 @@
//
// SPConsole.RC2 - resources Microsoft Visual C++에서 직접 편집하지 않는 리소스
//
#ifdef APSTUDIO_INVOKED
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// 여기에 수동으로 편집한 리소스를 추가합니다.
#ifdef _LGU
IDR_MAINFRAME ICON "..\\Common\\res\\ConsoleApp_LGU.ico"
#else
IDR_MAINFRAME ICON "..\\Common\\res\\ConsoleApp_KT.ico"
#endif
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
// http://support.microsoft.com/kb/237870/ko
#include "../VERSION_INFO.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILEVER
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "041203b5"
BEGIN
VALUE "FileDescription", "Client-side Software"
VALUE "FileVersion", STRFILEVER
VALUE "InternalName", "ConsoleApp.exe"
VALUE "LegalCopyright", "Copyright (C) 2010"
VALUE "OriginalFilename", "ConsoleApp.exe"
VALUE "ProductName", "Client-side Software"
VALUE "ProductVersion", STRPRODUCTVER
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x412, 949
END
END
#define _XTP_RESOURCE_LANGUAGE Ko // XTToolkitPro 언어 설정
#include "XTToolkitPro.rc"
/*
#include <../../DSControls/Include/XTPVersion.h>
#if defined(_XTP_STATICLINK) || !defined(_AFXDLL)
#include <XTToolkitPro.rc>
#endif
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.ConsoleApp"
type="win32"
/>
<description>여기에 응용 프로그램 설명을 추가합니다.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

@@ -0,0 +1,235 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by ConsoleApp.rc
//
#define IDC_BTN_PAUSE 3
#define IDC_BTN_START 5
#define IDP_OLE_INIT_FAILED 100
#define IDD_ABOUTBOX 100
#define IDR_MAINFRAME 128
#define IDS_COPY_NOT_ALLOWD 129
#define IDI_SORT_NONE 134
#define IDI_SORT_ASC 135
#define IDI_SORT_DESC 136
#define IDI_ANONY_FOLDER 137
#define IDD_CONFIG_URL 138
#define IDR_POP_RTREE 140
#define IDB_MENUBAR 140
#define IDR_POP_RLISTFILE 141
#define IDD_BANDWIDTH 141
#define IDR_POP_RLIST 142
#define IDB_BITMAP1 145
#define IDB_BITMAP2 146
#define IDD_CONFIG 151
#define IDD_CONFIG_COMMON 152
#define IDD_CONFIG_PROXY 154
#define IDD_VOLUME_INFO 174
#define IDB_BTN_TOOLBAR1 180
#define IDB_BTN_TOOLBAR2 181
#define IDB_CAP_LOCAL 186
#define IDB_CAP_REMOTE 187
#define IDB_TOOLBAR 192
#define IDR_ADVERT 196
#define IDR_WAIT 197
#define IDB_BTN_UP 201
#define IDB_BTN_UPLOAD 202
#define IDB_BTN_DELETE 203
#define IDB_BTN_DOWNLOAD 204
#define IDB_BTN_GO 205
#define IDB_BTN_LISTSTYLE 206
#define IDB_BTN_NEWFOLDER 207
#define IDD_REMOTE_VIEW 209
#define IDR_POP_LLIST 210
#define IDD_WAITMESSAGE 211
#define IDB_M_PASTE 212
#define IDB_M_COPY 213
#define IDB_M_CUT 214
#define IDB_M_FOLDER 215
#define IDD_CONNECT 216
#define IDD_CONNECT_PROXY 218
#define IDD_VOLUME_INFO1 219
#define IDB_LOGO 222
#define IDB_LOGO_LGU 223
#define IDC_TAB1 1000
#define IDC_STC_TITLE 1001
#define IDC_RDO_TAG1 1005
#define IDC_RDO_TAG2 1006
#define IDC_RDO_TAG3 1007
#define IDC_RDO_TAG4 1008
#define IDC_EDT_STAG 1009
#define IDC_EDT_ETAG 1010
#define IDC_EDT_PATH 1010
#define IDC_CBO_LEVEL 1011
#define IDC_STATIC_ABOUT 1012
#define IDC_PROGRESS1 1013
#define IDC_STC2 1014
#define IDC_STC3 1015
#define IDC_BUTTON1 1016
#define IDC_CANCEL_BTN 1017
#define IDC_STATIC_COPYRIGHT 1018
#define IDC_CHK_WAITSTART 1039
#define IDC_STC_LOGO 1047
#define IDC_EDT_HOST 1059
#define IDC_EDT_PORT 1060
#define IDC_EDT_PASSWORD 1062
#define IDC_CBO_AFTEREXEC 1065
#define IDC_CBO_SAVEURL 1067
#define IDC_EDT_URLDIVIDER 1069
#define IDC_FILEEXISTS_FILE1 1070
#define IDC_FILEEXISTS_SIZE1 1071
#define IDC_FILEEXISTS_DATE1 1072
#define IDC_FILEEXISTS_FILE2 1073
#define IDC_FILEEXISTS_SIZE2 1074
#define IDC_FILEEXISTS_DATE2 1075
#define IDC_FILEEXISTS_ICON1 1076
#define IDC_FILEEXISTS_ICON2 1077
#define IDC_FILEEXISTS_RADIO1 1079
#define IDC_FILEEXISTS_RADIO2 1080
#define IDC_FILEEXISTS_RADIO3 1081
#define IDC_FILEEXISTS_RADIO4 1082
#define IDC_FILEEXISTS_ALWAYS 1084
#define IDC_TEXT 1085
#define IDC_EDIT 1086
#define IDC_LIST 1088
#define IDC_PRS_NOW 1089
#define IDC_PRS_TOTAL 1090
#define IDC_STC_SAVEFILE 1093
#define IDC_STC_SPEED 1097
#define IDC_TAB 1102
#define IDC_STC_STATUS 1106
#define IDC_STC_ICON 1107
#define IDC_STC_TYPE 1109
#define IDC_EDT_TITLE 1110
#define IDC_EDT_USERID 1110
#define IDC_STC_USESPACE 1111
#define IDC_STC_FREESPACE 1112
#define IDC_STC_USESPACET 1113
#define IDC_STC_FREESPACET 1114
#define IDC_STC_TOTALSPACE 1115
#define IDC_STC_USESPACE2 1115
#define IDC_STC_TOTALSPACET 1116
#define IDC_GRP_NOW 1116
#define IDC_STC_USESPACET2 1116
#define IDC_GRP_TOTAL 1117
#define IDC_STC_SPEED_TITLE 1118
#define IDC_STC_SAVEFILE_TITLE 1119
#define IDC_STC_ETIME_TITLE 1120
#define IDC_STC_LTIME_TITLE 1121
#define IDC_STC_FILECOUNT_TITLE 1122
#define IDC_STC_URLDIVIDER 1125
#define IDC_STC_USETITLE 1126
#define IDC_STC_FREETITLE 1127
#define IDC_STC_TOTALTITLE 1128
#define IDC_STC_USETITLE2 1128
#define IDC_ADVERT 1131
#define IDC_CHK_SEARCHSUB 1134
#define IDC_CHK_USE_IEPROXY 1135
#define IDC_STC_ETIME 1136
#define IDC_STC_LTIME 1137
#define IDC_STC_FILECOUNT 1138
#define IDC_BTN_DELETE 1139
#define IDC_BTN_CLOSE 1140
#define IDC_PICTURE 1141
#define IDC_STC 1142
#define IDC_CHK_AUTOCONNECT 1143
#define IDC_CHK_SAVEPASSWORD 1144
#define IDC_CHK_AUTOCONNECT2 1144
#define IDC_BTN_PROXY 1145
#define IDC_SPLITTER 5000
#define IDC_LOCAL_SPLITTER 5001
#define IDC_LOCAL_TITLE 5002
#define IDC_LOCAL_TREE 5003
#define IDC_LOCAL_STC_ADDR 5004
#define IDC_LOCAL_CBO_ADDR 5005
#define IDC_LOCAL_BTN_GO_ADDR 5006
#define IDC_LOCAL_BTN_UP_ADDR 5007
#define IDC_LOCAL_BTN_LISTSTYLE 5008
#define IDC_LOCAL_LIST 5009
#define IDC_LOCAL_TOOLBAR 5010
#define IDC_LOCAL_ADVERT 5011
#define IDC_LOCAL_BTN_TOOLBAR 5012
#define IDC_LOCAL_BTN_UPLOAD 5013
#define IDC_LOCAL_BTN_DOWNLOAD 5014
#define IDC_LOCAL_BTN_NEWFOLDER 5015
#define IDC_LOCAL_BTN_DELETE 5016
#define IDC_REMOTE_SPLITTER 5021
#define IDC_REMOTE_TITLE 5022
#define IDC_REMOTE_TREE 5023
#define IDC_REMOTE_STC_ADDR 5024
#define IDC_REMOTE_CBO_ADDR 5025
#define IDC_REMOTE_BTN_GO_ADDR 5026
#define IDC_REMOTE_BTN_UP_ADDR 5027
#define IDC_REMOTE_BTN_LISTSTYLE 5028
#define IDC_REMOTE_LIST 5029
#define ID_INFORMATION 10001
#define ID_INFORMATIONSTR 10002
#define ID_TREE_CUT 30002
#define ID_TREE_COPY 30003
#define ID_TREE_PASTE 30004
#define ID_TREE_DELETE 30005
#define ID_TREE_RENAME 30006
#define ID_TREE_INFO 30007
#define ID_FILE_CONNECT 32771
#define ID_FILE_RECONNECT 32772
#define ID_FILE_DISCONNECT 32773
#define ID_FILE_UPLOAD 32774
#define ID_FILE_DOWNLOAD 32775
#define ID_VIEW_MID_TOOLBAR 32776
#define ID_VIEW_REFRESH 32777
#define ID_VIEW_RTREE 32778
#define ID_VIEW_RLIST_TYPE1 32779
#define ID_VIEW_RLIST_TYPE2 32780
#define ID_VIEW_RLIST_TYPE3 32781
#define ID_VIEW_RLIST_TYPE4 32782
#define ID_VIEW_RSTATUS 32783
#define ID_VIEW_LTREE 32784
#define ID_VIEW_LLIST_TYPE0 32785
#define ID_VIEW_LLIST_TYPE1 32786
#define ID_VIEW_LLIST_TYPE2 32787
#define ID_VIEW_LLIST_TYPE3 32788
#define ID_VIEW_LLIST_TYPE4 32789
#define ID_VIEW_LSTATUS 32790
#define ID_CFG_OVERWITE_ASK 32791
#define ID_CFG_OVERWITE2 32793
#define ID_CFG_OVERWITE3 32794
#define ID_CFG_OVERWITE4 32795
#define ID_CFG_CONFIG 32796
#define ID_HELP_HELP 32798
#define ID_HELP_HOMEPAGE 32799
#define ID_TOOL_STAT 32801
#define ID_CFG_OVERWITE1 32802
#define ID_TREE_UNSETANONY 32806
#define ID_TREE_SETANONY 32807
#define ID_TREE_SETBANDWIDTH 32809
#define ID_VIEW_ALL 32810
#define ID_LISTFILE_CUT 32870
#define ID_LISTFILE_COPY 32871
#define ID_LISTFILE_DELETE 32872
#define ID_LISTFILE_RENAME 32873
#define ID_LIST_NEWFOLDER 32889
#define ID_LIST_REFRESH 32890
#define ID_LIST_TYPE1 32891
#define ID_LIST_TYPE2 32892
#define ID_LIST_TYPE3 32893
#define ID_LIST_TYPE4 32894
#define ID_LIST_SORT1 32895
#define ID_LIST_SORT2 32896
#define ID_LIST_SORT3 32897
#define ID_LIST_SORT4 32898
#define ID_LIST_PASTE 32899
#define ID_LIST_ALL 32900
#define ID_LISTFILE_PASTE 32904
#define ID_LISTFILE_DOWNLOAD 32937
#define ID_LISTFILE_SAVEURL 32943
#define ID_LIST_TYPE0 32948
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 148
#define _APS_NEXT_COMMAND_VALUE 32811
#define _APS_NEXT_CONTROL_VALUE 1019
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
@@ -0,0 +1,7 @@
// stdafx.cpp : 표준 포함 파일을 포함하는 소스 파일입니다.
// SPConsole.pch는 미리 컴파일된 헤더가 됩니다.
// stdafx.obj는 미리 컴파일된 형식 정보를 포함합니다.
#include "stdafx.h"
@@ -0,0 +1,83 @@
// stdafx.h : 잘 변경되지 않고 자주 사용하는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // Windows 헤더에서 거의 사용되지 않는 내용을 제외시킵니다.
#endif
// 아래 지정된 플랫폼보다 우선하는 플랫폼을 대상으로 하는 경우 다음 정의를 수정하십시오.
// 다른 플랫폼에 사용되는 해당 값의 최신 정보는 MSDN을 참조하십시오.
#ifndef WINVER // Windows 95 및 Windows NT 4 이후 버전에서만 기능을 사용할 수 있습니다.
#define WINVER 0x0400 // Windows 98과 Windows 2000 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_WINNT // Windows NT 4 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_WINNT 0x0400 // Windows 98과 Windows 2000 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_WINDOWS // Windows 98 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_WINDOWS 0x0410 // Windows Me 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_IE // IE 4.0 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_IE 0x0400 // IE 5.0 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 일부 CString 생성자는 명시적으로 선언됩니다.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소
#include <afxext.h> // MFC 익스텐션
#include <afxdisp.h> // MFC 자동화 클래스
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원
#endif // _AFX_NO_AFXCMN_SUPPORT
// User defined...
#include <windowsx.h>
#include <math.h>
#include <set>
using namespace std;
#include "MFC64bitFix.h"
#define _XTP_STATICLINK
#include <XTToolkitPro.h>
#include "../CommLib/CommLib.h"
#include "Options.h"
/*
#ifdef _DEBUG
# pragma comment(lib, "SPCCommd.lib")
#else
# pragma comment(lib, "SPCComm.lib")
#endif
*/
#ifdef _OPENDISK
#define APP_TITLE "Opendisk Console"
#define INI_FILENAME "OD-Console.ini"
#define CFG_FILENAME "OD-Console.xml"
#else
#define APP_TITLE "SP-Console"
#define INI_FILENAME "SP-Console.ini"
#define CFG_FILENAME "SP-Console.xml"
#endif
#define VK_A 65
#define VK_C 67
#define VK_D 68
#define VK_V 86
#define VK_X 88