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,245 @@
// ConfigAdminDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigAdminDlg.h"
#include ".\configadmindlg.h"
#include ".\RexAlgorithm.h"
#include ".\RexInterface.h"
#include <string>
// CConfigAdminDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigAdminDlg, CDialog)
CConfigAdminDlg::CConfigAdminDlg(CWnd* pParent /*=NULL*/)
: CConfigSubDlg(CConfigAdminDlg::IDD, pParent)
{
m_show=false;
}
CConfigAdminDlg::~CConfigAdminDlg()
{
}
void CConfigAdminDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_NAME1, m_name_01);
DDX_Text(pDX, IDC_EDT_NAME2, m_name_02);
DDX_Text(pDX, IDC_EDT_NAME3, m_name_03);
DDX_Text(pDX, IDC_EDT_PHONE1, m_phone_01);
DDX_Text(pDX, IDC_EDT_PHONE2, m_phone_02);
DDX_Text(pDX, IDC_EDT_PHONE3, m_phone_03);
DDX_Text(pDX, IDC_EDT_MAIL1, m_mail_01);
DDX_Text(pDX, IDC_EDT_MAIL2, m_mail_02);
DDX_Text(pDX, IDC_EDT_MAIL3, m_mail_03);
}
BEGIN_MESSAGE_MAP(CConfigAdminDlg, CDialog)
ON_EN_KILLFOCUS(IDC_EDT_NAME1, OnEnKillfocusEdtName1)
ON_EN_KILLFOCUS(IDC_EDT_PHONE1, OnEnKillfocusEdtPhone1)
ON_EN_KILLFOCUS(IDC_EDT_MAIL1, OnEnKillfocusEdtMail1)
ON_EN_KILLFOCUS(IDC_EDT_NAME2, OnEnKillfocusEdtName2)
ON_EN_KILLFOCUS(IDC_EDT_PHONE2, OnEnKillfocusEdtPhone2)
ON_EN_KILLFOCUS(IDC_EDT_MAIL2, OnEnKillfocusEdtMail2)
ON_EN_KILLFOCUS(IDC_EDT_NAME3, OnEnKillfocusEdtName3)
ON_EN_KILLFOCUS(IDC_EDT_PHONE3, OnEnKillfocusEdtPhone3)
ON_EN_KILLFOCUS(IDC_EDT_MAIL3, OnEnKillfocusEdtMail3)
END_MESSAGE_MAP()
// CConfigAdminDlg 메시지 처리기입니다.
BOOL CConfigAdminDlg::OnInitDialog()
{
CConfigSubDlg::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
m_name_01 = COptions::GetOption(OPTION_NAME_01);
m_name_02 = COptions::GetOption(OPTION_NAME_02);
m_name_03 = COptions::GetOption(OPTION_NAME_03);
m_phone_01 = COptions::GetOption(OPTION_PHONE_01);
m_phone_02 = COptions::GetOption(OPTION_PHONE_02);
m_phone_03 = COptions::GetOption(OPTION_PHONE_03);
m_mail_01 = COptions::GetOption(OPTION_MAIL_01);
m_mail_02 = COptions::GetOption(OPTION_MAIL_02);
m_mail_03 = COptions::GetOption(OPTION_MAIL_03);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigAdminDlg::OnEnKillfocusEdtName1()
{
if (m_show)
{
CheckName(IDC_EDT_NAME1);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtPhone1()
{
if (m_show)
{
CheckPhone(IDC_EDT_PHONE1);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtMail1()
{
if (m_show)
{
CheckMail(IDC_EDT_MAIL1);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtName2()
{
if (m_show)
{
CheckName(IDC_EDT_NAME2);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtPhone2()
{
if (m_show)
{
CheckPhone(IDC_EDT_PHONE2);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtMail2()
{
if (m_show)
{
CheckMail(IDC_EDT_MAIL2);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtName3()
{
if (m_show)
{
CheckName(IDC_EDT_NAME3);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtPhone3()
{
if (m_show)
{
CheckPhone(IDC_EDT_PHONE3);
}
}
void CConfigAdminDlg::OnEnKillfocusEdtMail3()
{
if (m_show)
{
CheckMail(IDC_EDT_MAIL3);
}
}
bool CConfigAdminDlg::CheckName(int id)
{
CString szValue;
GetDlgItemText(id , szValue);
if (szValue.GetLength()>0)
{
if (szValue.GetLength()>10)
{
AfxMessageBox("관리자 이름은 한글5자(영문10자) 이하로 입력하십시오.");
DeleteAndSetFocus(id);
return false;
}
}
return true;
}
bool CConfigAdminDlg::CheckPhone(int id)
{
CString szValue;
GetDlgItemText(id , szValue);
if (szValue.GetLength()>0)
{
if (szValue.GetLength()>12)
{
AfxMessageBox("핸드폰 번호는 12자리 숫자로 입력하십시오.");
DeleteAndSetFocus(id);
return false;
}
for (int i=0; i < szValue.GetLength(); i++)
{
if (FALSE==isdigit(szValue.GetAt(i)))
{
AfxMessageBox("핸드폰 번호는 12자리 숫자로 입력하십시오.");
DeleteAndSetFocus(id);
return false;
}
}
}
return true;
}
bool CConfigAdminDlg::CheckMail(int id)
{
CString szValue;
GetDlgItemText(id , szValue);
if (szValue.GetLength()>0)
{
if (szValue.GetLength()>50)
{
AfxMessageBox("관리자 메일주소는 영문50자 이하로 입력하십시오.");
DeleteAndSetFocus(id);
return false;
}
REXI_Search rexs;
REXI_DefErr err;
err= rexs.SetRegexp("[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+");
int nMatchLen=0;
bool bEosFound=false;
bool bRightEmail=false;
const char* pcsValue = szValue;
while(rexs.Find(pcsValue ,nMatchLen,bEosFound))
{
return true;
}
if (!bRightEmail)
{
AfxMessageBox("메일주소를 정확히 입력하십시오." );
DeleteAndSetFocus(id);
return false;
}
}
return true;
}
void CConfigAdminDlg::DeleteAndSetFocus(int id)
{
UpdateData(FALSE);
this->GetDlgItem(id)->SetFocus();
}
@@ -0,0 +1,54 @@
#pragma once
#include "ConfigSubDlg.h"
#include "afxwin.h"
// CConfigAdminDlg 대화 상자입니다.
class CConfigAdminDlg : public CConfigSubDlg
{
DECLARE_DYNAMIC(CConfigAdminDlg)
public:
CConfigAdminDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CConfigAdminDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_CONFIG_ADMIN };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
bool CheckName(int id);
bool CheckPhone(int id);
bool CheckMail(int id);
void DeleteAndSetFocus(int id);
DECLARE_MESSAGE_MAP()
public:
bool m_show;
CString m_name_01;
CString m_name_02;
CString m_name_03;
CString m_phone_01;
CString m_phone_02;
CString m_phone_03;
CString m_mail_01;
CString m_mail_02;
CString m_mail_03;
virtual BOOL OnInitDialog();
afx_msg void OnEnKillfocusEdtName1();
afx_msg void OnEnKillfocusEdtPhone1();
afx_msg void OnEnKillfocusEdtMail1();
afx_msg void OnEnKillfocusEdtName2();
afx_msg void OnEnKillfocusEdtPhone2();
afx_msg void OnEnKillfocusEdtMail2();
afx_msg void OnEnKillfocusEdtName3();
afx_msg void OnEnKillfocusEdtPhone3();
afx_msg void OnEnKillfocusEdtMail3();
};
#pragma once
@@ -0,0 +1,57 @@
// 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)
, m_bLogDir(FALSE)
, m_bLogUpload(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);
DDX_Check(pDX, IDC_LOG_DIR_CHK, m_bLogDir);
DDX_Check(pDX, IDC_LOG_UPLOAD_CHK, m_bLogUpload);
}
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,35 @@
#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;
BOOL m_bLogDir;
BOOL m_bLogUpload;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
public:
virtual BOOL OnInitDialog();
afx_msg void OnCboAfterexecSelchange();
DECLARE_MESSAGE_MAP()
};
@@ -0,0 +1,191 @@
// ConfigDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConfigDlg.h"
//#include "Options.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.InsertItem(3, "관리자정보");
// 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_dlgCommon.m_bLogDir = COptions::GetOptionVal(OPTION_LOG_DIR);
m_dlgCommon.m_bLogUpload = COptions::GetOptionVal(OPTION_LOG_UPLOAD);
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, "프록시");
AddPage(m_dlgAdmin, "관리자정보");
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;
}
//관리자설정 페이지일때
if (3==iPage)
{
CConfigAdminDlg* pAdminDlg = (CConfigAdminDlg*) (pcp->pdlg);
pAdminDlg->m_show = true;
}
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();
m_dlgAdmin.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);
COptions::SetOption(OPTION_NAME_01, m_dlgAdmin.m_name_01);
COptions::SetOption(OPTION_NAME_02, m_dlgAdmin.m_name_02);
COptions::SetOption(OPTION_NAME_03, m_dlgAdmin.m_name_03);
COptions::SetOption(OPTION_PHONE_01, m_dlgAdmin.m_phone_01);
COptions::SetOption(OPTION_PHONE_02, m_dlgAdmin.m_phone_02);
COptions::SetOption(OPTION_PHONE_03, m_dlgAdmin.m_phone_03);
COptions::SetOption(OPTION_MAIL_01, m_dlgAdmin.m_mail_01);
COptions::SetOption(OPTION_MAIL_02, m_dlgAdmin.m_mail_02);
COptions::SetOption(OPTION_MAIL_03, m_dlgAdmin.m_mail_03);
COptions::SetOption(OPTION_LOG_DIR, m_dlgCommon.m_bLogDir);
COptions::SetOption(OPTION_LOG_UPLOAD, m_dlgCommon.m_bLogUpload);
CDialog::OnOK();
}
@@ -0,0 +1,58 @@
#pragma once
#include "ConfigSubDlg.h"
#include "ConfigCommonDlg.h"
#include "ConfigUrlDlg.h"
#include "ConfigProxyDlg.h"
#include "ConfigAdminDlg.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;
CConfigAdminDlg m_dlgAdmin;
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,144 @@
// ConnectDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "ConnectDlg.h"
#include "ConnectProxyDlg.h"
#include ".\connectdlg.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)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
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);
HBITMAP hbmSrc = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_LOGO));
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();
}
void CConnectDlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
OnOK();
}
@@ -0,0 +1,43 @@
#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()
afx_msg void OnBnClickedOk();
};
@@ -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,403 @@
// SPConsole.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "MainFrm.h"
#include "CustomControlSite.h"
//#include "Options.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;
int 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;
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
#ifdef _OPENDISK
SetWindowText("Opendisk Console 정보");
GetDlgItem(IDC_STATIC_ABOUT)->SetWindowText("Opendisk Console V1.0.1.0");
#else
SetWindowText("SP-Console 정보");
GetDlgItem(IDC_STATIC_ABOUT)->SetWindowText("ICS SP-Console V1.0.1.0");
#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,942 @@
// 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)
#ifdef _WIN32
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
#pragma code_page(949)
#endif //_WIN32
#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.
#if defined(APSTUDIO_INVOKED) || !defined(_OPENDISK)
IDR_MAINFRAME ICON "res\\ConsoleApp.ico"
#endif
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"
#if defined(APSTUDIO_INVOKED) || defined(_OPENDISK)
#if defined(APSTUDIO_INVOKED)
IDR_MAINFRAME$(_OPENDISK) ICON "res\\ConsoleApp_OD.ico"
#else
IDR_MAINFRAME ICON "res\\ConsoleApp_OD.ico"
#endif
#endif
/////////////////////////////////////////////////////////////////////////////
//
// Cursor
//
IDC_HAND CURSOR "res\\Hand.cur"
/////////////////////////////////////////////////////////////////////////////
//
// 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_OVERWITE3
MENUITEM "덮어쓰기", ID_CFG_OVERWITE1
MENUITEM "이어받기", ID_CFG_OVERWITE2
MENUITEM "건너뛰기", ID_CFG_OVERWITE4
MENUITEM "업데이트", ID_CFG_UPDATE
END
MENUITEM "설정\tCtrl+O", ID_CFG_CONFIG
END
POPUP "도구(&T)"
BEGIN
MENUITEM "통계", ID_TOOL_STAT, INACTIVE
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_COPY
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 "Bandwidth 설정", ID_TREE_SETBANDWIDTH
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_COPY
MENUITEM "붙여넣기", ID_LISTFILE_PASTE
MENUITEM SEPARATOR
MENUITEM "삭제", ID_LISTFILE_DELETE
MENUITEM "이름 바꾸기", ID_LISTFILE_RENAME
MENUITEM SEPARATOR
MENUITEM "배포현황조회", 32814
MENUITEM "배포재요청", ID_LIST_DIST_AGAIN
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
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,0,1,1
PRODUCTVERSION 2,0,1,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "041203b5"
BEGIN
VALUE "CompanyName", "KT & Netomi Corporation."
VALUE "FileDescription", "ICS Client-side Software"
VALUE "FileVersion", "2.0.1.1"
VALUE "InternalName", "ConsoleApp.exe"
VALUE "LegalCopyright", "KT & Netomi Corporation. All rights reserved."
VALUE "OriginalFilename", "ConsoleApp.exe"
VALUE "ProductName", "ICS"
VALUE "ProductVersion", "2.0.1.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x412, 949
END
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_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
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
IDD_VOLUME_DIST_INFO, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 223
TOPMARGIN, 7
BOTTOMMARGIN, 122
END
IDD_DISTINFODLG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 7
BOTTOMMARGIN, 88
END
IDD_NOTICETRANS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 7
BOTTOMMARGIN, 88
END
IDD_SEND_TRANSINFO, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 184
TOPMARGIN, 7
BOTTOMMARGIN, 60
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 "ICS 접속"
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
CONTROL "디렉토리 생성시 로그 남김",IDC_LOG_DIR_CHK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,10,72,110,10
CONTROL "파일 업로드시 로그 남김",IDC_LOG_UPLOAD_CHK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,9,87,102,10
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, 189, 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 IDR_MAINFRAME,IDC_STATIC,8,8,20,20
LTEXT "ICS SP-Console Version 1.0.0.4",IDC_STATIC_ABOUT,35,7,
150,8,SS_NOPREFIX
LTEXT "Copyright (C) KT Corporation All rights reserved",
IDC_STATIC,35,20,150,8
DEFPUSHBUTTON "확인",IDOK,147,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
IDD_WEB_DLG DIALOGEX 0, 0, 295, 263
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
FONT 9, "굴림", 0, 0, 0x0
BEGIN
CONTROL "",IDC_EXPLORER1,"{8856F961-340A-11D0-A96B-00C04FD705A2}",
WS_TABSTOP,0,0,296,264
END
IDD_VOLUME_DIST_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
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,33,216,1
LTEXT "파일 갯수 :",IDC_STC_USETITLE,7,41,40,8
LTEXT "배포 중 :",IDC_STC_FREETITLE,7,71,32,8
RTEXT "999,999",IDC_FILE_CNT,111,41,98,8
RTEXT "개",IDC_STC_USESPACET,210,57,9,8
CONTROL "",-1,"Static",SS_ETCHEDHORZ,7,103,216,1
EDITTEXT IDC_DIST_PATH,37,12,186,12,ES_AUTOHSCROLL | ES_READONLY
LTEXT "배포 완료 :",IDC_STC_USETITLE2,7,56,40,8
RTEXT "999,999",IDC_DIST_COMPLETE,111,56,98,8
RTEXT "개",IDC_STC_USESPACET2,210,72,9,8
LTEXT "배포 실패 :",IDC_STC_USETITLE3,7,86,40,8
RTEXT "999,999",IDC_DIST_NOW,111,71,98,8
RTEXT "999,999",IDC_DIST_FAIL,111,86,98,8
RTEXT "개",IDC_STC_USESPACET3,210,42,9,8
RTEXT "개",IDC_STC_USESPACET4,210,87,9,8
END
IDD_DISTINFODLG DIALOG 0, 0, 186, 95
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "대화 상자"
FONT 9, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "확인",IDOK,129,7,50,16
PUSHBUTTON "취소",IDCANCEL,129,26,50,16
END
IDD_CONFIG_ADMIN 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_NAME1,9,29,32,12,ES_AUTOHSCROLL
LTEXT "이름",IDC_STATIC,16,16,17,8
EDITTEXT IDC_EDT_PHONE1,44,29,51,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_MAIL1,98,29,87,12,ES_AUTOHSCROLL
LTEXT "휴대전화",IDC_STATIC,51,16,33,8
EDITTEXT IDC_EDT_NAME2,9,46,32,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_PHONE2,44,46,51,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_MAIL2,98,46,87,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_NAME3,9,64,32,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_PHONE3,44,64,51,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDT_MAIL3,98,64,87,12,ES_AUTOHSCROLL
LTEXT "메일주소",IDC_STATIC,116,16,33,8
END
IDD_NOTICETRANS DIALOG 0, 0, 186, 95
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "대화 상자"
FONT 9, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "확인",IDOK,129,7,50,16
PUSHBUTTON "취소",IDCANCEL,129,26,50,16
END
IDD_SEND_TRANSINFO DIALOGEX 0, 0, 191, 67
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_SYSMENU |
WS_THICKFRAME
FONT 9, "MS Shell Dlg", 0, 0, 0x0
BEGIN
PUSHBUTTON "취소",IDCANCEL,71,44,50,16
CONTROL "",IDC_PROGRESS1,"msctls_progress32",WS_BORDER,14,28,161,
12
LTEXT "배포 요청 중입니다..",IDC_NOTICE_MSGBOX,18,7,153,18
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
IDD_WEB_DLG DLGINIT
BEGIN
IDC_EXPLORER1, 0x376, 160, 0
0x0000, 0x0000, 0x004c, 0x0000, 0x3589, 0x0000, 0x28ee, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x004c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001,
0x0000, 0xd0e0, 0x0057, 0x3573, 0x11cf, 0x69ae, 0x0008, 0x2e2b, 0x6212,
0x0008, 0x0000, 0x0000, 0x0000, 0x004c, 0x0000, 0x1401, 0x0002, 0x0000,
0x0000, 0x00c0, 0x0000, 0x0000, 0x4600, 0x0080, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
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"
/////////////////////////////////////////////////////////////////////////////
//
// 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"
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,92 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleApp", "ConsoleApp.vcproj", "{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}"
ProjectSection(ProjectDependencies) = postProject
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0} = {1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}
{8CF33995-4DDD-492E-9533-F73F82AEC607} = {8CF33995-4DDD-492E-9533-F73F82AEC607}
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C} = {FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommLib", "..\CommLib\CommLib.vcproj", "{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleTransfer", "..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj", "{8CF33995-4DDD-492E-9533-F73F82AEC607}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleUpdater", "..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj", "{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Debug_Opendisk = Debug_Opendisk
Release = Release
Release_Opendisk = Release_Opendisk
Unicode Debug = Unicode Debug
Unicode Release = Unicode Release
EndGlobalSection
GlobalSection(ProjectDependencies) = postSolution
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk.ActiveCfg = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Debug_Opendisk.Build.0 = Debug_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release.Build.0 = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk.ActiveCfg = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Release_Opendisk.Build.0 = Release_Opendisk|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug.ActiveCfg = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Debug.Build.0 = Debug|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release.ActiveCfg = Release|Win32
{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}.Unicode Release.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk.ActiveCfg = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Debug_Opendisk.Build.0 = Debug_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release.Build.0 = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk.ActiveCfg = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Release_Opendisk.Build.0 = Release_Opendisk|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug.ActiveCfg = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Debug.Build.0 = Debug|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release.ActiveCfg = Release|Win32
{FD6F8A99-22B0-45FA-BAB6-1CC3DD5AAE2C}.Unicode Release.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk.ActiveCfg = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Debug_Opendisk.Build.0 = Debug_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release.Build.0 = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk.ActiveCfg = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Release_Opendisk.Build.0 = Release_Opendisk|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug.ActiveCfg = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Debug.Build.0 = Debug|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release.ActiveCfg = Release|Win32
{8CF33995-4DDD-492E-9533-F73F82AEC607}.Unicode Release.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk.ActiveCfg = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Debug_Opendisk.Build.0 = Debug_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release.Build.0 = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk.ActiveCfg = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Release_Opendisk.Build.0 = Release_Opendisk|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug.ActiveCfg = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Debug.Build.0 = Debug|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release.ActiveCfg = Release|Win32
{1CD0355A-1D0F-48E1-9F3D-3A2C067526E0}.Unicode Release.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionItems) = postSolution
readme.txt = readme.txt
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
GlobalSection(DPCodeReviewSolutionGUID) = preSolution
DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
EndGlobalSection
EndGlobal
@@ -0,0 +1,703 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="ConsoleApp"
ProjectGUID="{A240CFA8-C2EB-4093-9BE5-85B1934E1E90}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="Debug"
IntermediateDirectory="Debug"
ConfigurationType="1"
UseOfMFC="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../Common/PTxControl;../Common;&quot;../Common/neon-0.25.4&quot;"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="3"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="../_lib/Debug/SPCComm.lib"
OutputFile="../_bin/SPConsole/Debug(DN)/SP-Console.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1042"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="Release"
IntermediateDirectory="Release"
ConfigurationType="1"
UseOfMFC="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../Common/PTxControl;../Common;&quot;../Common/neon-0.25.4&quot;"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
MinimalRebuild="FALSE"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="3"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="../_lib/Release/SPCComm.lib"
OutputFile="../_bin/SPConsole/Release(DN)/SP-Console.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1042"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Debug_Opendisk|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../Common/PTxControl;../Common"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG;_OPENDISK"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="3"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="../_lib/Debug/SPCComm.lib"
OutputFile="../_bin/SPConsole/Debug_OD/OD-Console.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1042"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release_Opendisk|Win32"
OutputDirectory="$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="2"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../Common/PTxControl;../common"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG;_OPENDISK"
MinimalRebuild="FALSE"
RuntimeLibrary="2"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="3"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="../_lib/Release/SPCComm.lib"
OutputFile="../_bin/SPConsole/Release_OD/OD-Console.exe"
LinkIncremental="1"
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1042"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="소스 파일"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\BandwidthDlg.cpp">
</File>
<File
RelativePath=".\ConfigAdminDlg.cpp">
</File>
<File
RelativePath=".\ConfigCommonDlg.cpp">
</File>
<File
RelativePath=".\ConfigDlg.cpp">
</File>
<File
RelativePath=".\ConfigProxyDlg.cpp">
</File>
<File
RelativePath="..\Common\ConfigSubDlg.cpp">
</File>
<File
RelativePath=".\ConfigUrlDlg.cpp">
</File>
<File
RelativePath=".\ConnectDlg.cpp">
</File>
<File
RelativePath=".\ConnectProxyDlg.cpp">
</File>
<File
RelativePath=".\ConsoleApp.cpp">
</File>
<File
RelativePath="..\Common\Crypt.cpp">
</File>
<File
RelativePath=".\CustomControlSite.cpp">
</File>
<File
RelativePath=".\DistInfoDlg.cpp">
</File>
<File
RelativePath=".\explorer1.cpp">
</File>
<File
RelativePath="..\Common\GdStatic.cpp">
</File>
<File
RelativePath=".\HCButton.cpp">
</File>
<File
RelativePath="..\Common\ImpIDispatch.cpp">
</File>
<File
RelativePath=".\LocalComboBox.cpp">
</File>
<File
RelativePath=".\LocalListCtrl.cpp">
</File>
<File
RelativePath=".\LocalTreeCtrl.cpp">
</File>
<File
RelativePath=".\LocalView.cpp">
</File>
<File
RelativePath=".\MainFrm.cpp">
</File>
<File
RelativePath="..\Common\MarkupSTL.cpp">
</File>
<File
RelativePath="..\Common\MFC64bitFix.cpp">
</File>
<File
RelativePath=".\NoticeTrans.cpp">
</File>
<File
RelativePath=".\Options.cpp">
</File>
<File
RelativePath="..\Common\PictureEx.cpp">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshcombo.cpp">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshlist.cpp">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshtree.cpp">
</File>
<File
RelativePath="..\Common\RegUtil.cpp">
</File>
<File
RelativePath=".\RemoteComboBox.cpp">
</File>
<File
RelativePath=".\RemoteListCtrl.cpp">
</File>
<File
RelativePath=".\RemoteTreeCtrl.cpp">
</File>
<File
RelativePath=".\RemoteView.cpp">
</File>
<File
RelativePath=".\RexAlgorithm.cpp">
</File>
<File
RelativePath=".\RexInterface.cpp">
</File>
<File
RelativePath=".\RLDropTarget.cpp">
</File>
<File
RelativePath=".\RTDropTarget.cpp">
</File>
<File
RelativePath=".\SocketUtil.cpp">
</File>
<File
RelativePath=".\stdafx.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
<FileConfiguration
Name="Debug_Opendisk|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
<FileConfiguration
Name="Release_Opendisk|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
</File>
<File
RelativePath="..\Common\TextProgressCtrl.cpp">
</File>
<File
RelativePath=".\VolumeInfo1Dlg.cpp">
</File>
<File
RelativePath=".\VolumeInfoDlg.cpp">
</File>
<File
RelativePath=".\WaitMessageDlg.cpp">
</File>
<File
RelativePath="..\Common\WebBrowser2.cpp">
</File>
<File
RelativePath=".\WebDlg.cpp">
</File>
<File
RelativePath=".\WebUtil.cpp">
</File>
</Filter>
<Filter
Name="헤더 파일"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\BandwidthDlg.h">
</File>
<File
RelativePath=".\ConfigAdminDlg.h">
</File>
<File
RelativePath=".\ConfigCommonDlg.h">
</File>
<File
RelativePath=".\ConfigDlg.h">
</File>
<File
RelativePath=".\ConfigProxyDlg.h">
</File>
<File
RelativePath="..\Common\ConfigSubDlg.h">
</File>
<File
RelativePath=".\ConfigUrlDlg.h">
</File>
<File
RelativePath=".\ConnectDlg.h">
</File>
<File
RelativePath=".\ConnectProxyDlg.h">
</File>
<File
RelativePath=".\ConsoleApp.h">
</File>
<File
RelativePath="..\Common\Crypt.h">
</File>
<File
RelativePath=".\CustomControlSite.h">
</File>
<File
RelativePath=".\DistInfoDlg.h">
</File>
<File
RelativePath=".\explorer1.h">
</File>
<File
RelativePath="..\Common\GdStatic.h">
</File>
<File
RelativePath=".\HCButton.h">
</File>
<File
RelativePath="..\Common\ImpIDispatch.h">
</File>
<File
RelativePath=".\LocalComboBox.h">
</File>
<File
RelativePath=".\LocalListCtrl.h">
</File>
<File
RelativePath=".\LocalTreeCtrl.h">
</File>
<File
RelativePath=".\LocalView.h">
</File>
<File
RelativePath=".\MainFrm.h">
</File>
<File
RelativePath="..\Common\MarkupSTL.h">
</File>
<File
RelativePath="..\Common\MFC64bitFix.h">
</File>
<File
RelativePath=".\NoticeTrans.h">
</File>
<File
RelativePath=".\Options.h">
</File>
<File
RelativePath="..\Common\PictureEx.h">
</File>
<File
RelativePath="..\Common\PTxControl\PTxSCP.h">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshcombo.h">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshlist.h">
</File>
<File
RelativePath="..\Common\PTxControl\ptxshtree.h">
</File>
<File
RelativePath="..\..\Common\RegUtil.h">
</File>
<File
RelativePath="..\Common\RegUtil.h">
</File>
<File
RelativePath=".\RemoteComboBox.h">
</File>
<File
RelativePath=".\RemoteListCtrl.h">
</File>
<File
RelativePath=".\RemoteTreeCtrl.h">
</File>
<File
RelativePath=".\RemoteView.h">
</File>
<File
RelativePath=".\Resource.h">
</File>
<File
RelativePath=".\RexAlgorithm.h">
</File>
<File
RelativePath=".\RexInterface.h">
</File>
<File
RelativePath=".\RLDropTarget.h">
</File>
<File
RelativePath=".\RTDropTarget.h">
</File>
<File
RelativePath=".\SocketUtil.h">
</File>
<File
RelativePath=".\stdafx.h">
</File>
<File
RelativePath=".\Struct.h">
</File>
<File
RelativePath="..\Common\TextProgressCtrl.h">
</File>
<File
RelativePath=".\VolumeInfo1Dlg.h">
</File>
<File
RelativePath=".\VolumeInfoDlg.h">
</File>
<File
RelativePath=".\WaitMessageDlg.h">
</File>
<File
RelativePath="..\Common\WebBrowser2.h">
</File>
<File
RelativePath=".\WebDlg.h">
</File>
<File
RelativePath=".\WebUtil.h">
</File>
</Filter>
<Filter
Name="리소스 파일"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
<File
RelativePath=".\res\Advert.gif">
</File>
<File
RelativePath=".\res\AnonyFolder.ico">
</File>
<File
RelativePath=".\res\bitmap1.bmp">
</File>
<File
RelativePath=".\res\btnDelete.bmp">
</File>
<File
RelativePath=".\res\btnDownload.bmp">
</File>
<File
RelativePath=".\res\btnGo.bmp">
</File>
<File
RelativePath=".\res\btnListstyle.bmp">
</File>
<File
RelativePath=".\res\btnNewFolder.bmp">
</File>
<File
RelativePath=".\res\btnToolbar1.bmp">
</File>
<File
RelativePath=".\res\btnToolbar2.bmp">
</File>
<File
RelativePath=".\res\btnUp.bmp">
</File>
<File
RelativePath=".\res\btnUpload.bmp">
</File>
<File
RelativePath=".\res\capLocal.bmp">
</File>
<File
RelativePath=".\res\capRemote.bmp">
</File>
<File
RelativePath=".\res\ConsoleApp.ico">
</File>
<File
RelativePath=".\ConsoleApp.rc">
</File>
<File
RelativePath=".\res\ConsoleApp.rc2">
</File>
<File
RelativePath=".\res\ConsoleApp_OD.ico">
</File>
<File
RelativePath=".\res\Down.ico">
</File>
<File
RelativePath=".\res\Empty.ico">
</File>
<File
RelativePath=".\res\Hand.cur">
</File>
<File
RelativePath=".\res\icon1.ico">
</File>
<File
RelativePath=".\res\Logo.bmp">
</File>
<File
RelativePath=".\res\Logo_old.bmp">
</File>
<File
RelativePath=".\res\mCopy.bmp">
</File>
<File
RelativePath=".\res\mCut.bmp">
</File>
<File
RelativePath=".\res\MenubarEx24x.bmp">
</File>
<File
RelativePath=".\res\mFolder.bmp">
</File>
<File
RelativePath=".\res\mPaste.bmp">
</File>
<File
RelativePath=".\res\SiteManager.bmp">
</File>
<File
RelativePath=".\res\SortAsc.ico">
</File>
<File
RelativePath=".\res\SortDesc.ico">
</File>
<File
RelativePath=".\res\SortNone.ico">
</File>
<File
RelativePath=".\res\systemhosting_logo.bmp">
</File>
<File
RelativePath=".\res\Toolbar.bmp">
</File>
<File
RelativePath=".\res\ToolbarEx24x.bmp">
</File>
<File
RelativePath=".\res\Up.ico">
</File>
<File
RelativePath=".\res\Wait.gif">
</File>
</Filter>
<File
RelativePath=".\res\ConsoleApp.manifest">
</File>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="ConsoleApp.rc"/>
</Globals>
</VisualStudioProject>
@@ -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,193 @@
// DistInfoDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "DistInfoDlg.h"
#include ".\distinfodlg.h"
#include "../ConsoleTransfer(DN)/NoticeStruct.h"
#include "../CommLib/CommLib.h"
// CDistInfoDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CDistInfoDlg, CDialog)
CDistInfoDlg::CDistInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDistInfoDlg::IDD, pParent)
, m_dist_path(_T(""))
, m_file_cnt(_T(""))
, m_dist_complete(_T(""))
, m_dist_now(_T(""))
, m_dist_fail(_T(""))
{
}
CDistInfoDlg::~CDistInfoDlg()
{
}
void CDistInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_DIST_PATH, m_dist_path);
DDX_Text(pDX, IDC_FILE_CNT, m_file_cnt);
DDX_Text(pDX, IDC_DIST_COMPLETE, m_dist_complete);
DDX_Text(pDX, IDC_DIST_NOW, m_dist_now);
DDX_Text(pDX, IDC_DIST_FAIL, m_dist_fail);
}
BEGIN_MESSAGE_MAP(CDistInfoDlg, CDialog)
END_MESSAGE_MAP()
// CDistInfoDlg 메시지 처리기입니다.
BOOL CDistInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
GetDistInfo();
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CDistInfoDlg::GetDistInfo(void)
{
tsvc_req_header_t tsvc_req_header;
tsvc_auth_info_t auth_req_body;
tsvc_ddi_req_body_t ddi_req_body;
tsvc_rsp_header_t *tsvc_rsp_header_ptr;
tsvc_ddi_rsp_body_t *ddi_rsp_body_ptr;
char recv_buffer[8196];
int result_code;
CString ip;
// get auth string /////////////////////////
CString auth_str;
auth_str = this->m_cp + "@" + this->m_user;
///////////////////////////////////////////
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
goto EXIT_FUNCTION;
}
bool bRet = false;
DWORD dwWritten;
char s[1024];
sockaddr_in sa;
sa.sin_family = AF_INET;
ip = m_sutil.get_first_rcts(this->m_RCTSAddress);
if (ip.GetLength()>0)
sa.sin_addr.s_addr = m_sutil.conv_addr(ip.GetString());
else
goto EXIT_FUNCTION;
sa.sin_port = htons(RCTS_NOTICE_PORT);
connect(sock, (SOCKADDR*)&sa, sizeof(sa));
tsvc_req_header.op_num_w = ::htons(OP_NUM_AUTH);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
::sprintf(auth_req_body.ua_str, auth_str);
::sprintf(auth_req_body.up_str, this->m_passwd);
m_sutil._sh_send(sock, (char*)&tsvc_req_header, sizeof(tsvc_req_header));
m_sutil._sh_send(sock, (char*)&auth_req_body, sizeof(auth_req_body));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
// 인증
if (RSP_CODE_AUTH_SUCCESS==result_code)
{
// SetNoticeStep(200);
}
else
{
// SetNoticeStep(201);
goto EXIT_FUNCTION;
}
tsvc_req_header.op_num_w = ::htons(OP_NUM_DDI);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
::sprintf(ddi_req_body.uri_str, "%s", this->m_dist_path);
m_sutil._sh_send(sock,(char *)&tsvc_req_header, sizeof(tsvc_req_header));
m_sutil._sh_send(sock,(char *)&ddi_req_body, sizeof(ddi_req_body));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(tsvc_rsp_header_t));
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
// 배포정보
if (RSP_CODE_DIST_SUCCESS==result_code)
{
// SetNoticeStep(200);
}
else
{
// SetNoticeStep(201);
goto EXIT_FUNCTION;
}
memset(&recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(tsvc_ddi_rsp_body_t));
ddi_rsp_body_ptr = reinterpret_cast<tsvc_ddi_rsp_body_t *>(&recv_buffer);
char t[128];
sprintf(t , "%d" , ntohs(ddi_rsp_body_ptr->file_cnt));
m_file_cnt = t;
sprintf(t , "%d" , ntohs(ddi_rsp_body_ptr->dist_fail));
m_dist_fail = t;
sprintf(t , "%d" , ntohs(ddi_rsp_body_ptr->dist_now));
m_dist_now = t;
sprintf(t , "%d" , ntohs(ddi_rsp_body_ptr->dist_complete));
m_dist_complete = t;
//배포
if (RSP_CODE_DIST_SUCCESS==result_code)
{
// SetNoticeStep(400);
}
else
{
// SetNoticeStep(401);
goto EXIT_FUNCTION;
}
EXIT_FUNCTION:
if (sock != INVALID_SOCKET)
closesocket(sock);
// PostMessage(WM_CLOSE);
}
@@ -0,0 +1,37 @@
#pragma once
#include "SocketUtil.h"
// CDistInfoDlg 대화 상자입니다.
class CDistInfoDlg : public CDialog
{
DECLARE_DYNAMIC(CDistInfoDlg)
public:
CDistInfoDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CDistInfoDlg();
void GetDistInfo(void);
// 대화 상자 데이터입니다.
enum { IDD = IDD_VOLUME_DIST_INFO };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
CSocketUtil m_sutil;
DECLARE_MESSAGE_MAP()
public:
CString m_cp;
CString m_user;
CString m_passwd;
CString m_dist_path;
CString m_RCTSAddress;
CString m_file_cnt;
CString m_dist_complete;
CString m_dist_now;
CString m_dist_fail;
virtual BOOL OnInitDialog();
};
@@ -0,0 +1,32 @@
// 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()
END_MESSAGE_MAP()
// CHCButton 메시지 처리기입니다.
void CHCButton::OnMouseMove(UINT nFlags, CPoint point)
{
::SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
CBitmapButton::OnMouseMove(nFlags, point);
}
@@ -0,0 +1,20 @@
#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);
};
@@ -0,0 +1,32 @@
// 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()
{
}
BEGIN_MESSAGE_MAP(CLocalComboBox, CComboBox)
//{{AFX_MSG_MAP(CLocalComboBox)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLocalComboBox message handlers
@@ -0,0 +1,41 @@
// LocalComboBox.h : header file
//
#pragma once
#include "ptxshcombo.h"
/////////////////////////////////////////////////////////////////////////////
// CLocalComboBox window
class CLocalComboBox : public CPTxShCombo
{
// 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,146 @@
// 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()
{
}
BEGIN_MESSAGE_MAP(CLocalListCtrl, CListCtrl)
//{{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;
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();
}
}
BOOL CLocalListCtrl::PasteClipboard(CString sFolder)
{
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CLocalTreeCtrl* ptree = &((CLocalView*)GetParent())->m_tree;
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;
return pmf->Download(false);
}
@@ -0,0 +1,46 @@
// LocalListCtrl.h : header file
//
#pragma once
#include "ptxshlist.h"
/////////////////////////////////////////////////////////////////////////////
// CLocalListCtrl window
class CLocalListCtrl : public CPTxShList
{
// 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);
protected:
//{{AFX_MSG(CLocalListCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
};
@@ -0,0 +1,125 @@
// 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()
{
}
BEGIN_MESSAGE_MAP(CLocalTreeCtrl, CTreeCtrl)
//{{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()
{
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();
}
}
BOOL CLocalTreeCtrl::PasteClipboard()
{
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
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;
return pmf->Download(false);
}
@@ -0,0 +1,45 @@
// LocalTreeCtrl.h : header file
//
#pragma once
#include "ptxshtree.h"
/////////////////////////////////////////////////////////////////////////////
// CLocalTreeCtrl window
class CLocalTreeCtrl : public CPTxShTree
{
// 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);
protected:
//{{AFX_MSG(CLocalTreeCtrl)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,168 @@
#pragma once
#include "LocalComboBox.h"
#include "LocalTreeCtrl.h"
#include "LocalListCtrl.h"
#include "PTxSCP.h"
#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;
IPTxShListItem* m_pitemPrev;
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;
IPTxShTreeNode* m_pnodeRoot;
bool m_bUpdating;
protected:
void RedrawControl(int cx, int cy);
BOOL SetPath(CString sFolder);
void InvertTracker(int x);
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);
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()
};
@@ -0,0 +1,37 @@
// LogWinThread.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "LogWinThread.h"
// CLogWinThread
IMPLEMENT_DYNCREATE(CLogWinThread, CWinThread)
CLogWinThread::CLogWinThread()
{
}
CLogWinThread::~CLogWinThread()
{
}
BOOL CLogWinThread::InitInstance()
{
// TODO: 여기에서 각 스레드에 대한 초기화를 수행합니다.
return TRUE;
}
int CLogWinThread::ExitInstance()
{
// TODO: 여기에서 각 스레드에 대한 정리를 수행합니다.
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CLogWinThread, CWinThread)
END_MESSAGE_MAP()
// CLogWinThread 메시지 처리기입니다.
@@ -0,0 +1,23 @@
#pragma once
// CLogWinThread
class CLogWinThread : public CWinThread
{
DECLARE_DYNCREATE(CLogWinThread)
protected:
CLogWinThread(); // 동적 만들기에 사용되는 protected 생성자입니다.
virtual ~CLogWinThread();
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
protected:
DECLARE_MESSAGE_MAP()
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,253 @@
// MainFrm.h : CMainFrame 클래스의 인터페이스
//
#pragma once
#include "WebUtil.h"
#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 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, char* bFolder , 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;
CWebUtil m_webutil;
int m_passwordErrCnt;
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 OnCfgUpdate();
afx_msg void OnUpdateCfgUpdate(CCmdUI *pCmdUI);
afx_msg void OnCfgConfig();
afx_msg LRESULT OnTransferDlgClose(WPARAM, LPARAM);
afx_msg LRESULT OnUpdateControlStatus(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnCopyData(CWnd* pWnd , COPYDATASTRUCT* pCodyDataStruct);
int OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl);
BOOL GetNewGUID(CString& strGUID);
DECLARE_MESSAGE_MAP()
protected:
void opt_file_log(CString , CString , char , char);
};
#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
#define PASSWORD_ERR_ADMIT_CNT 3
#define PASSWORD_ERR_WAIT_SEC 30
@@ -0,0 +1,560 @@
// NoticeTrans.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "NoticeTrans.h"
#include "ConsoleApp.h"
#include "../CommLib/CommLib.h"
#include "options.h"
// CNoticeTrans 대화 상자입니다.
IMPLEMENT_DYNAMIC(CNoticeTrans, CDialog)
CNoticeTrans::CNoticeTrans(CWnd* pParent /*=NULL*/)
: CDialog(CNoticeTrans::IDD, pParent)
{
}
CNoticeTrans::CNoticeTrans(PTRANPARAM_STRUCT ptp, CString szTargetPath , CWnd* pParent /*=NULL*/ )
: CDialog(CNoticeTrans::IDD, pParent)
{
m_szTargetPath = szTargetPath;
m_NoticeLastFileTrans = false;
// m_szTargetPath.Replace("'", "\'");
m_ptp = ptp;
}
CNoticeTrans::CNoticeTrans(PTRANPARAM_STRUCT ptp, int nNoticeLastFileTrans , CWnd* pParent /*=NULL*/ )
: CDialog(CNoticeTrans::IDD, pParent)
{
m_szTargetPath = "";
m_NoticeLastFileTrans = true;
m_ptp = ptp;
}
CNoticeTrans::CNoticeTrans(CArray<tsvc_da_contents_t*>* pad, CWnd* pParent /*=NULL*/)
: CDialog(CNoticeTrans::IDD, pParent)
{
m_NoticeLastFileTrans = false;
m_ptp = NULL;
#if 0
for(int i=0; i<pad->GetCount(); i++)
AfxMessageBox(pad->GetAt(i)->file_name);
#endif
m_pAdac = pad;
}
CNoticeTrans::~CNoticeTrans()
{
if (m_ptp!=NULL)delete m_ptp;
}
void CNoticeTrans::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PROGRESS1, m_NoticeProgress);
DDX_Control(pDX, IDC_NOTICE_MSGBOX, m_NoticeText);
}
BEGIN_MESSAGE_MAP(CNoticeTrans, CDialog)
ON_MESSAGE(WMU_NOTICE_TRANS, OnNoticeTrans)
ON_MESSAGE(WMU_NOTICE_LAST_FILE_TRANS, OnNoticeLastFileTrans)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
// ON_STN_CLICKED(IDC_NOTICE_MSGBOX, OnStnClickedNoticeMsgbox)
END_MESSAGE_MAP()
// CNoticeTrans 메시지 처리기입니다.
void CNoticeTrans::NoticeTrans(void)
{
tsvc_req_header_t tsvc_req_header;
tsvc_auth_info_t auth_req_body;
tsvc_dn_req_body_t dn_req_body;
tsvc_rsp_header_t *tsvc_rsp_header_ptr;
tsvc_da_req_t tsvc_da_req;
tsvc_da_contents_t tsvc_da_contents;
tsvc_ddc_req_body_t dnc_req_body;
char recv_buffer[8196];
int result_code;
CString ip;
CString this_guid;
CString auth_str;
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
SetNoticeStep(101);
goto EXIT_FUNCTION;
}
SetNoticeStep(100);
bool bRet = false;
DWORD dwWritten;
char s[1024];
sockaddr_in sa;
sa.sin_family = AF_INET;
ip = m_sutil.get_first_rcts(m_RCTSAddress);
if (ip.GetLength()>0)
sa.sin_addr.s_addr = m_sutil.conv_addr(ip.GetString());
else
goto EXIT_FUNCTION;
sa.sin_port = htons(RCTS_NOTICE_PORT);
connect(sock, (SOCKADDR*)&sa, sizeof(sa));
//////////////////////////////////////////////////////////////////////////////////
// 인증
//////////////////////////////////////////////////////////////////////////////////
auth_str = this->m_cp + "@" + this->m_user;
tsvc_req_header.op_num_w = ::htons(OP_NUM_AUTH);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
::sprintf(auth_req_body.ua_str, auth_str);
::sprintf(auth_req_body.up_str, m_passwd);
m_sutil._sh_send(sock, (char*)&tsvc_req_header, sizeof(tsvc_req_header));
m_sutil._sh_send(sock, (char*)&auth_req_body, sizeof(auth_req_body));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
// 인증
if (RSP_CODE_AUTH_SUCCESS==result_code)
{
SetNoticeStep(200);
}
else
{
SetNoticeStep(201);
goto EXIT_FUNCTION;
}
//////////////////////////////////////////////////////////////////////////////////
// 인증 끝
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// header + body #1
//////////////////////////////////////////////////////////////////////////////////
tsvc_req_header.op_num_w = ::htons(OP_NUM_DA);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
memset(&tsvc_da_req , 0x00 , sizeof(tsvc_da_req));
tsvc_da_req.file_cnt = ::htons(m_pAdac->GetCount());
::strncpy(tsvc_da_req.sp_tid_str , m_sp_tid_str , MAX_SIZE_OF_SP_TID-1);
m_sutil._sh_send(sock,(char *)&tsvc_req_header, sizeof(tsvc_req_header));
m_sutil._sh_send(sock,(char *)&tsvc_da_req, sizeof(tsvc_da_req));
SetNoticeStep(300);
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
int result_opn = ntohs(tsvc_rsp_header_ptr->op_num_w);
//배포
if (RSP_CODE_DIST_SUCCESS==result_code)
{
SetNoticeStep(400);
}
else
{
SetNoticeStep(401);
goto EXIT_FUNCTION;
}
//////////////////////////////////////////////////////////////////////////////////
// header + body #1 끝
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// body #2
//////////////////////////////////////////////////////////////////////////////////
for (int i=0; i < m_pAdac->GetCount(); i++)
{
memset(&tsvc_da_contents , 0x00 , sizeof(tsvc_da_contents));
tsvc_da_contents.bFolder = m_pAdac->GetAt(i)->bFolder ;
// tsvc_da_contents.file_name = m_pAdac->GetAt(i)->file_name;
strncpy(tsvc_da_contents.file_name ,m_pAdac->GetAt(i)->file_name , MAX_SIZE_OF_URI );
m_sutil._sh_send(sock,(char *)&tsvc_da_contents, sizeof(tsvc_da_contents));
}
/*
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
if (RSP_CODE_DIST_SUCCESS==result_code)
{
SetNoticeStep(402);
}
else
{
SetNoticeStep(403);
goto EXIT_FUNCTION;
}
*/
//////////////////////////////////////////////////////////////////////////////////
// body #2 끝
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// 관리자 정보
//////////////////////////////////////////////////////////////////////////////////
memset(&dnc_req_body , 0x00 , sizeof(dnc_req_body));
::strncpy(dnc_req_body.sp_tid_str , m_sp_tid_str , MAX_SIZE_OF_SP_TID-1);
FillAdminInfo(&dnc_req_body);
m_sutil._sh_send(sock,(char *)&dnc_req_body, sizeof(tsvc_dn_req_body_t));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
SetNoticeStep(402);
/*
if (RSP_CODE_DIST_SUCCESS==result_code)
{
SetNoticeStep(402);
}
else
{
SetNoticeStep(403);
goto EXIT_FUNCTION;
}
*/
//////////////////////////////////////////////////////////////////////////////////
// 관리자 정보 끝
//////////////////////////////////////////////////////////////////////////////////
EXIT_FUNCTION:
if (sock != INVALID_SOCKET)
closesocket(sock);
PostMessage(WM_CLOSE);
}
void CNoticeTrans::LastFileTransComplete()
{
tsvc_req_header_t tsvc_req_header;
tsvc_auth_info_t auth_req_body;
tsvc_dn_req_body_t dn_req_body;
tsvc_ddc_req_body_t dnc_req_body;
tsvc_rsp_header_t *tsvc_rsp_header_ptr;
char recv_buffer[8196];
int result_code;
CString ip;
CString this_guid;
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
SetNoticeStep(103);
goto EXIT_FUNCTION;
}
SetNoticeStep(102);
bool bRet = false;
DWORD dwWritten;
char s[1024];
sockaddr_in sa;
sa.sin_family = AF_INET;
ip = m_sutil.get_first_rcts(m_ptp->szRCTSAddress);
if (ip.GetLength()>0)
sa.sin_addr.s_addr = m_sutil.conv_addr(ip.GetString());
else
goto EXIT_FUNCTION;
sa.sin_port = htons(RCTS_NOTICE_PORT);
connect(sock, (SOCKADDR*)&sa, sizeof(sa));
//////////////////////////////////////////////////////////////////////////////////
// 인증
//////////////////////////////////////////////////////////////////////////////////
tsvc_req_header.op_num_w = ::htons(OP_NUM_AUTH);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
::sprintf(auth_req_body.ua_str, m_ptp->szUserId);
::sprintf(auth_req_body.up_str, m_ptp->szPassword);
m_sutil._sh_send(sock, (char*)&tsvc_req_header, sizeof(tsvc_req_header));
m_sutil._sh_send(sock, (char*)&auth_req_body, sizeof(auth_req_body));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
if (RSP_CODE_AUTH_SUCCESS==result_code)
{
SetNoticeStep(202);
}
else
{
SetNoticeStep(203);
goto EXIT_FUNCTION;
}
//////////////////////////////////////////////////////////////////////////////////
// 인증 끝
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// 전송완료알림//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
tsvc_req_header.op_num_w = ::htons(OP_NUM_DNC);
tsvc_req_header.op_seq_w = ::htons(OP_SEQ_REQ);
m_sutil._sh_send(sock,(char *)&tsvc_req_header, sizeof(tsvc_req_header));
SetNoticeStep(302);
//////////////////////////////////////////////////////////////////////////////////
// 전송완료알림 끝////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// 관리자 정보
//////////////////////////////////////////////////////////////////////////////////
memset(&dnc_req_body , 0x00 , sizeof(dnc_req_body));
::strncpy(dnc_req_body.sp_tid_str , m_ptp->szTransGuid , MAX_SIZE_OF_SP_TID-1);
FillAdminInfo(&dnc_req_body);
m_sutil._sh_send(sock,(char *)&dnc_req_body, sizeof(tsvc_dn_req_body_t));
memset(recv_buffer , 0x00 , sizeof(recv_buffer));
if (m_sutil._rtxTimer(5 , sock) < 0)
goto EXIT_FUNCTION;
m_sutil._sh_recv(sock, (char*)&recv_buffer, sizeof(recv_buffer));
tsvc_rsp_header_ptr = reinterpret_cast<tsvc_rsp_header_t *>(&recv_buffer);
result_code = ntohs(tsvc_rsp_header_ptr->op_result_code_w);
if (RSP_CODE_DIST_SUCCESS==result_code)
{
SetNoticeStep(402);
}
else
{
SetNoticeStep(403);
goto EXIT_FUNCTION;
}
//////////////////////////////////////////////////////////////////////////////////
// 관리자 정보 끝
//////////////////////////////////////////////////////////////////////////////////
EXIT_FUNCTION:
if (sock != INVALID_SOCKET)
closesocket(sock);
PostMessage(WM_CLOSE);
}
BOOL CNoticeTrans::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
m_NoticeProgress.SetRange(0, 100);
m_NoticeProgress.SetStep(1);
this->PostMessage(WMU_NOTICE_TRANS , NULL , NULL);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
LRESULT CNoticeTrans::OnNoticeTrans(WPARAM wParam, LPARAM lParam)
{
SetNoticeStep(0);
while (FALSE==IsWindowVisible())
{
m_sutil.MessagePump(100);
}
this->NoticeTrans();
return 0;
}
LRESULT CNoticeTrans::OnNoticeLastFileTrans(WPARAM wParam, LPARAM lParam)
{
SetNoticeStep(2);
while (FALSE==IsWindowVisible())
{
m_sutil.MessagePump(100);
}
this->LastFileTransComplete();
return 0;
}
void CNoticeTrans::OnBnClickedCancel()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
OnCancel();
}
void CNoticeTrans::SetNoticeStep(int nStep)
{
if (0==nStep)
{
m_NoticeProgress.SetPos(10);
m_NoticeText.SetWindowText("배포 요청중입니다...(0/4 요청준비)");
}
if (2==nStep)
{
m_NoticeProgress.SetPos(10);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(0/4 요청준비)");
}
else if (100 == nStep)
{
m_NoticeProgress.SetPos(20);
m_NoticeText.SetWindowText("배포 요청중입니다...(1/4 사용자인증)");
}
else if (102 == nStep)
{
m_NoticeProgress.SetPos(20);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(1/4 사용자인증)");
}
else if (200 == nStep)
{
m_NoticeProgress.SetPos(40);
m_NoticeText.SetWindowText("배포 요청중입니다...(2/4 인증성공)");
}
else if (201 == nStep)
{
m_NoticeProgress.SetPos(40);
m_NoticeText.SetWindowText("배포 요청을 중단합니다...(2/4 인증실패)");
m_sutil.MessagePump(500);
}
else if (202 == nStep)
{
m_NoticeProgress.SetPos(40);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(2/4 인증성공)");
}
else if (203 == nStep)
{
m_NoticeProgress.SetPos(40);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(2/4 인증실패)");
}
else if (300 == nStep)
{
m_NoticeProgress.SetPos(70);
m_NoticeText.SetWindowText("배포 요청중입니다...(3/4 배포요청)");
}
else if (302 == nStep)
{
m_NoticeProgress.SetPos(70);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(3/4 알림요청)");
}
else if (303 == nStep)
{
m_NoticeProgress.SetPos(70);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(3/4 요청실패)");
}
else if (400 == nStep)
{
m_NoticeProgress.SetPos(100);
m_NoticeText.SetWindowText("배포를 시작합니다...(4/4 요청성공)");
m_sutil.MessagePump(500);
}
else if (401 == nStep)
{
m_NoticeProgress.SetPos(100);
m_NoticeText.SetWindowText("배포 요청을 중단합니다...(4/4 요청실패)");
m_sutil.MessagePump(500);
}
else if (402 == nStep)
{
m_NoticeProgress.SetPos(100);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(4/4 요청성공)");
m_sutil.MessagePump(500);
}
else if (403 == nStep)
{
m_NoticeProgress.SetPos(100);
m_NoticeText.SetWindowText("현재 전송창을 종료합니다...(4/4 요청실패)");
m_sutil.MessagePump(500);
}
}
void CNoticeTrans::FillAdminInfo(tsvc_ddc_req_body_t* pDncInfo)
{
strncpy(pDncInfo->name_01 ,COptions::GetOption(OPTION_NAME_01) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->name_02 ,COptions::GetOption(OPTION_NAME_02) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->name_03 ,COptions::GetOption(OPTION_NAME_03) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->phone_01 ,COptions::GetOption(OPTION_PHONE_01) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->phone_02 ,COptions::GetOption(OPTION_PHONE_02) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->phone_03 ,COptions::GetOption(OPTION_PHONE_03) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->mail_01 ,COptions::GetOption(OPTION_MAIL_01) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->mail_02 ,COptions::GetOption(OPTION_MAIL_02) , MAX_SIZE_OF_NAME-1) ;
strncpy(pDncInfo->mail_03 ,COptions::GetOption(OPTION_MAIL_03) , MAX_SIZE_OF_NAME-1) ;
}
@@ -0,0 +1,69 @@
#pragma once
#include "Struct.h"
#include "afxcmn.h"
#include "ConsoleApp.h"
#include "SocketUtil.h"
#include "../ConsoleTransfer(DN)/NoticeStruct.h"
#define SOCK_TIMEOUT 5
#define WMU_NOTICE_TRANS (WM_USER+1000)
#define WMU_NOTICE_LAST_FILE_TRANS (WM_USER+2000)
// CNoticeTrans 대화 상자입니다.
class CNoticeTrans : public CDialog
{
DECLARE_DYNAMIC(CNoticeTrans)
public:
CNoticeTrans(CWnd* pParent = NULL); // 표준 생성자입니다.
CNoticeTrans(PTRANPARAM_STRUCT ptp, CString szTargetPath , CWnd* pParent = NULL);
CNoticeTrans(PTRANPARAM_STRUCT ptp, int LastFileTrans , CWnd* pParent = NULL);
CNoticeTrans(CArray<tsvc_da_contents_t*>* pad, CWnd* pParent = NULL);
virtual ~CNoticeTrans();
// 대화 상자 데이터입니다.
enum { IDD = IDD_SEND_TRANSINFO};
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
CString m_szTargetPath;
bool m_NoticeLastFileTrans;
PTRANPARAM_STRUCT m_ptp;
void NoticeTrans(void);
void LastFileTransComplete();
void FillAdminInfo( tsvc_ddc_req_body_t*);
CSocketUtil m_sutil;
CArray<tsvc_da_contents_t*>* m_pAdac;
public:
// afx_msg void OnNMCustomdrawProgress1(NMHDR *pNMHDR, LRESULT *pResult);
CProgressCtrl m_NoticeProgress;
CStatic m_NoticeText;
virtual BOOL OnInitDialog();
// afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
afx_msg void OnNMCustomdrawProgress1(NMHDR *pNMHDR, LRESULT *pResult);
// afx_msg void OnActivateApp(BOOL bActive, DWORD dwThreadID);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg LRESULT OnNoticeTrans(WPARAM, LPARAM);
afx_msg LRESULT OnNoticeLastFileTrans(WPARAM, LPARAM);
afx_msg void OnBnClickedCancel();
// afx_msg void OnStnClickedNoticeMsgbox();
void SetNoticeStep(int nStep);
CString m_cp;
CString m_user;
CString m_passwd;
CString m_RCTSAddress;
CString m_sp_tid_str;
};
@@ -0,0 +1,259 @@
// 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,
_T("Admin Name 01"), 0,
_T("Admin Name 02"), 0,
_T("Admin Name 03"), 0,
_T("Admin Phone 01"), 0,
_T("Admin Phone 02"), 0,
_T("Admin Phone 03"), 0,
_T("Admin Mail 01"), 0,
_T("Admin Mail 02"), 0,
_T("Admin Mail 03"), 0,
_T("Log Directory"), 1,
_T("Log Upload File"), 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,89 @@
// Options.h
#ifndef __OPTIONS__
#define __OPTIONS__
#pragma once
#include "MarkupSTL.h"
#define OPTIONS_NUM 41
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, //30
OPTION_NAME_01,
OPTION_NAME_02,
OPTION_NAME_03,
OPTION_PHONE_01,
OPTION_PHONE_02,
OPTION_PHONE_03,
OPTION_MAIL_01,
OPTION_MAIL_02,
OPTION_MAIL_03,
OPTION_LOG_DIR,
OPTION_LOG_UPLOAD
};
#endif
@@ -0,0 +1,271 @@
// 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
IMPLEMENT_DYNAMIC(CRLDropTarget, COleDropTarget)
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()))
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
}
}
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)
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
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)
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
}
}
}
}
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,197 @@
// 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
IMPLEMENT_DYNAMIC(CRTDropTarget, COleDropTarget)
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)
de = dwKeyState & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
}
}
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,31 @@
2006.04.12
- 다중파일 이동시 일부만 이동되는 문제 수정
2006.04.19.00
- 하위 폴더 포함 용량 보기 기능 추가
2006.05.01.00
- 라이브업데이트기능 추가
2006.05.09.00
- 이름이 같은 파일/폴더 존재시 새 폴더 만들기에서 기존 파일이 변경되는 문제 해결
2006.05.17.00
- 폴더 무인증 설정후 무인증 제거 하면 아이콘 깨짐 수정
- 무인증 설정된 파일에 URL 저장하기 결과물 도메인 ktsh.co.kr 로 수정
2006.05.19.00
- 로그인창 이미지 수정
2006.05.30.00
- 리모트 트리에서 리네임시 공백으로 수정안되게 수정
2006.06.05.00
- 리모트 리스트에서 사이즈정렬 오류 수정
- 업데이트 서버 접속안되도 실행 가능하게 수정
2006.06.30.00
- 2G 이상 파일 다운로드 지원기능 추가
2006.07.03.00
- 파일 리네임시 아이콘 바로 변경되게 수정
@@ -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,994 @@
// RemoteListCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "RemoteListCtrl.h"
#include "Struct.h"
#include "MainFrm.h"
#include "WebDlg.h"
#include "RemoteView.h"
#include "LocalView.h"
#include ".\remotelistctrl.h"
#include ".\distinfodlg.h"
#include "NoticeTrans.h"
#include "ne_socket.h"
#include "ne_uri.h"
#include "ne_request.h"
#include "ne_xml.h"
#include "ne_string.h"
typedef struct COMMLIB_HANDLE {
ne_session* pnsess;
ne_uri nuri;
string sUserId;
string sPassword;
string sDavAuth;
DWORD dwError;
string sError;
// 업/다운 관련
HANDLE hThread;
HANDLE hWaitEvent;
UINT32 uJob;
string sJobParam;
cl_callback proc;
void* pParam;
HANDLE hTranFile;
__int64 nExFileSize;
__int64 iTranPos;
__int64 nFileSize;
DWORD dwOldTick;
int nTranStop;
string sRedirect;
string sDomain2;
set<PCLSERVICE_STRUCT> setServiceList;
set<PCLPATHINFO_STRUCT> setPathInfoList;
set<PCLFILE_STRUCT> setFileList;
} COMMLIB_STRUCT, *PCOMMLIB_STRUCT;
#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)
ON_COMMAND(ID_LIST_VIEW_DISTSTATUS, OnListViewDiststatus)
ON_COMMAND(ID_LIST_DIST_AGAIN, OnListDistAgain)
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) {
SetClipboard(CBS_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+1]={270, 130,110, 110, 150, 54, 90, 90};
CString sWidths = COptions::GetOption(OPTION_REMOTECOLUMNWIDTHS);
if (sWidths != "")
{
int pos=-1;
int i;
for (i=0; i<6+1; 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+1)
{
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_asHeader[4] = "수정일자";
m_anHeaderAlign[0] = LVCFMT_LEFT;
m_anHeaderAlign[1] = LVCFMT_LEFT;
m_anHeaderAlign[2] = LVCFMT_RIGHT;
m_anHeaderAlign[3] = LVCFMT_LEFT;
m_anHeaderAlign[4] = LVCFMT_LEFT;
for (int i = 0; i < 4+1; 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);
pmenu->SetMenuItemBitmaps(ID_LISTFILE_COPY, MF_BYCOMMAND, &pmf->m_bmCopy, &pmf->m_bmCopy);
pmenu->SetMenuItemBitmaps(ID_LISTFILE_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste);
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()
{
SetClipboard(CBS_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));
}
void CRemoteListCtrl::OnListViewDiststatus()
{
CString sPath;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CRemoteTreeCtrl *ptree = pmf->m_pRemoteView->GetTreeCtrl();
HTREEITEM htiSelected = ptree->GetSelectedItem();
CString sBasePath = ptree->GetPath(htiSelected) + "/";
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem);
//HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) :m_htiDragTarget;
HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem());
PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume);
CString sCp = ptree->GetItemText(htiVolume);
CString sUser = pmf->m_sUserId;
CString sPasswd = pmf->m_sPassword;
if(prli)
{
sPath = sBasePath + prli->sName;
if (prli->bFolder)
{
HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl;
CDistInfoDlg dlg;
dlg.m_dist_path = sPath;
dlg.m_cp = sCp;
dlg.m_user = sUser;
dlg.m_passwd = sPasswd;
dlg.m_RCTSAddress = t_pcl->sDomain2.c_str();
dlg.DoModal();
}
else
{
CWebDlg* pdlg;
pdlg = new CWebDlg();
pdlg->Create(IDD_WEB_DLG,GetDesktopWindow( ));
pdlg->ShowWindow(TRUE);
pdlg->GetPage(::MAN_DISTINFO,sCp,sUser,sPath);
}
}
else
return;
}
void CRemoteListCtrl::OnListDistAgain()
{
POSITION pos = GetFirstSelectedItemPosition();
if (!pos)
return;
CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl();
// HTREEITEM hti = ptree->GetSelectedItem();
HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem());
HTREEITEM htiFolder = ptree->GetSelectedItem();
if (htiVolume == ptree->GetRootItem())
return;
CString sPath = ptree->GetPath(htiFolder);
CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd();
CArray<tsvc_da_contents_t*>* pArrDac = new CArray<tsvc_da_contents_t*>();
while (pos) {
int iItem = GetNextSelectedItem(pos);
CString file_name = sPath + "/" + GetItemText(iItem, 0);
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(iItem);
tsvc_da_contents_t* pDac = new tsvc_da_contents_t;
pDac->bFolder = prli->bFolder;
strncpy(pDac->file_name , file_name , MAX_SIZE_OF_URI);
pArrDac->Add(pDac);
}
if (pArrDac->GetCount()>0)
{
CNoticeTrans dlg(pArrDac);
HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl;
CString szTransGuid;
pmf->GetNewGUID(szTransGuid);
dlg.m_cp = ptree->GetItemText(htiVolume);
dlg.m_user = pmf->m_sUserId;
dlg.m_passwd = pmf->m_sPassword;
dlg.m_RCTSAddress = t_pcl->sDomain2.c_str();
dlg.m_sp_tid_str = szTransGuid;
dlg.DoModal();
for (int i=0; i < pArrDac->GetCount(); i++)
delete pArrDac->GetAt(i);
}
delete pArrDac;
#if 0
CString sPath;
CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd();
CRemoteTreeCtrl *ptree = pmf->m_pRemoteView->GetTreeCtrl();
HTREEITEM htiSelected = ptree->GetSelectedItem();
CString sBasePath = ptree->GetPath(htiSelected) + "/";
PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem);
//HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) :m_htiDragTarget;
HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem());
PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume);
CString sCp = ptree->GetItemText(htiVolume);
CString sUser = pmf->m_sUserId;
CString sPasswd = pmf->m_sPassword;
if(prli)
{
sPath = sBasePath + prli->sName;
if (prli->bFolder)
{
/*
HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume];
PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl;
CDistInfoDlg dlg;
dlg.m_dist_path = sPath;
dlg.m_cp = sCp;
dlg.m_user = sUser;
dlg.m_passwd = sPasswd;
dlg.m_RCTSAddress = t_pcl->sDomain2.c_str();
dlg.DoModal();
*/
}
else
{
PTRANPARAM_STRUCT ptp = new TRANPARAM_STRUCT;
//ptp->szRCTSAddress;
// CNoticeTrans dlg(ptp , sPath);
// dlg.DoModal();
}
}
else
return;
#endif
}
@@ -0,0 +1,97 @@
// 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[5];
int m_anHeaderAlign[5];
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();
afx_msg void OnListViewDiststatus();
afx_msg void OnListDistAgain();
};
@@ -0,0 +1,776 @@
// 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) {
SetClipboard(GetSelectedItem(), CBS_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);
pmenu->SetMenuItemBitmaps(ID_TREE_COPY, MF_BYCOMMAND, &pmf->m_bmCopy, &pmf->m_bmCopy);
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);
pmenu->EnableMenuItem(ID_TREE_COPY, MF_GRAYED);
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()
{
SetClipboard(m_htiSelected, CBS_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,81 @@
// 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,157 @@
#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)
typedef struct
{
int file_cnt;
int dist_complete;
int dist_now;
int dist_fail;
}DIST_INFO,*PDIST_INFO;
// 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 AppendObject(HTREEITEM htiParent, bool bFolder, LPCTSTR pszPath, __int64 nSize, LPCTSTR pszLastModified , PDIST_INFO pdi);
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()
};
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,97 @@
#ifndef REX_ALGORITHM_INCLUDED_
#define REX_ALGORITHM_INCLUDED_
#pragma warning(disable:4786)
#pragma warning(disable:4503)
#include <utility>
#include <vector>
#include <set>
#include <string>
using namespace std;
struct REXA_DFAState{
enum{eEos=-1,eNoAnswer=-2,eAccepting=-3};
REXA_DFAState(int nAnwserId=eNoAnswer,bool bIsFinal=false);
static void CollectStates (REXA_DFAState* pState,
set<REXA_DFAState*>& rsetStates);
void DeleteAll();
REXA_DFAState* aNext[256];
int m_nAnwserId;
bool m_bIsFinal;
bool m_bIsAccepting;
static REXA_DFAState* ms_pIllegalState;
static REXA_DFAState* ms_pEosState;
};
#if 0
$2 RegExp= Term {"|" Term}.
$3 Term= Factor {Factor}.
$4 Factor= Atom ["*"|"+"|"?"].
$5 Atom= "[" REXA_CharSet "]" | Ident | "(" RegExp ").
$6 REXA_CharSet= <Zeichenketten, Metazeichen sind ^(Komplement),-(Range-Zeichen),
\ als Escapezeichen fuer Metazeichen, . (bedeutet alle Zeichen.
#endif
enum REXA_ESymbols{
eEof=1,
eIllegal=2,
eIdent=4,
eStar=32,
ePlus=64,
eAssign=128,
eOpt=256,
eAlternative=512,
eCharSet=1024,
eLParen=2048,
eRParen=4096,
eIgnoreCase=8192
};
typedef pair<const char*,const char*> REXA_BegEnd;
class REXA_Exception{
public:
REXA_Exception(
const char* pPos,
const char* pRegExp,
string strMsg);
REXA_Exception(
REXA_ESymbols eExpectedSymbol,
REXA_BegEnd token,
const char* pRegExp,
string strMsg="");
string m_strErrMsg;
int m_nErrPos;
};
class REXA_Parser{
public:
REXA_Parser (char cEos=0);
~REXA_Parser ();
REXA_DFAState* ParseRegExp (string strRegExp);
void AddRegDefinition ( string strDefName,
string strDefExpression,
int nAnswer);
void RemoveRegDefinition ( string strDefName);
void GetRegDefinitions (vector<string>& vecDefinitions);
private:
class REXA_ParserImpl* m_pParserImp;
};
#endif
@@ -0,0 +1,129 @@
#include "stdafx.h"
#include ".\RexInterface.h"
REXI_Base::REXI_Base(char cEos)
:m_cEos(cEos),m_pszSource(""),m_pszTokenBeg(""),m_pszTokenEnd("")
,m_pStartState(REXA_DFAState::ms_pEosState)
{
}
REXI_Base::~REXI_Base()
{
FreeMemory();
}
REXI_DefErr REXI_Base::AddRegDefinition (string strName,string strRegExp,
int nIdAnswer)
{
REXI_DefErr defErr;
defErr.eErrCode=REXI_DefErr::eNoErr;
defErr.strErrMsg="";
defErr.nErrOffset=0;
try{
m_regexpParser.AddRegDefinition(strName,strRegExp,nIdAnswer);
}catch(REXA_Exception e){
defErr.strErrMsg= e.m_strErrMsg;
if( e.m_nErrPos>strName.size()+1){
defErr.eErrCode= REXI_DefErr::eErrInRegExp;
defErr.nErrOffset= e.m_nErrPos-(strName.size()+1);
}else{
defErr.eErrCode=REXI_DefErr::eErrInName;
defErr.nErrOffset= e.m_nErrPos;
}
}
return defErr;
}
void REXI_Base::GetRegDefinitions (vector<string>& vecDefinitions)
{
m_regexpParser.GetRegDefinitions(vecDefinitions);
}
void REXI_Base::RemoveRegDefinition (string strName)
{
m_regexpParser.RemoveRegDefinition(strName);
}
REXI_DefErr REXI_Base::SetRegexp (string strRegExp)
{
REXI_DefErr defErr;
defErr.eErrCode=REXI_DefErr::eNoErr;
defErr.strErrMsg="";
defErr.nErrOffset=0;
try{
REXA_DFAState* pStartState= m_regexpParser.ParseRegExp(strRegExp);
FreeMemory();
m_pStartState= pStartState;
}catch(REXA_Exception e){
defErr.eErrCode=REXI_DefErr::eErrInRegExp;
defErr.strErrMsg= e.m_strErrMsg;
defErr.nErrOffset= e.m_nErrPos;
}
return defErr;
}
REXI_Search::REXI_Search(char cEos)
:REXI_Base(cEos),m_nIdAnswer(0)
{
}
REXI_DefErr REXI_Search::AddRegDef(string strName,string strRegExp)
{
return REXI_Base::AddRegDefinition(strName,strRegExp,m_nIdAnswer++);
}
bool REXI_Search::MatchHereImpl()
{
m_pszTokenBeg= m_pszTokenEnd;
const REXA_DFAState* pState= m_pStartState;
const char* pAccept=0;
while( !(pState= pState->
aNext[*(unsigned char*)m_pszTokenEnd++])->m_bIsFinal){
if(pState->m_bIsAccepting){
pAccept= m_pszTokenEnd;
}
}
m_pszTokenEnd--;
if(!pState->m_bIsAccepting ){
if( pAccept ){
m_pszTokenEnd= pAccept;
return true;
}
return false;
}
return true;
}
bool REXI_Search::MatchHere(const char*& rpcszSrc, int& nMatchLen,bool& bEos)
{
SetSource(rpcszSrc);
bool bFound= MatchHereImpl();
nMatchLen= m_pszTokenEnd-m_pszTokenBeg;
rpcszSrc= m_pszTokenEnd;
bEos= (*m_pszTokenEnd==m_cEos);
rpcszSrc= m_pszTokenEnd;
return bFound;
}
bool REXI_Search::Find(const char*& rpcszSrc, int& nMatchLen,bool& bEos)
{
bool bFound;
SetSource(rpcszSrc);
for(;;){
while(m_pStartState->aNext[*(unsigned char*)m_pszTokenEnd]==
REXA_DFAState::ms_pIllegalState ){
m_pszTokenEnd++;
}
if( MatchHereImpl() ){
bFound= true;
break;
}
bEos= (*m_pszTokenEnd==m_cEos);
if( bEos ){
bFound= false;
break;
}
m_pszTokenEnd= m_pszTokenBeg+1;
}
bEos= (*m_pszTokenEnd==m_cEos);
nMatchLen= m_pszTokenEnd-m_pszTokenBeg;
rpcszSrc= m_pszTokenEnd;
return bFound;
}
@@ -0,0 +1,73 @@
#ifndef REX_INTERFACE_INCLUDED_
#define REX_INTERFACE_INCLUDED_
#include "RexAlgorithm.h"
struct REXI_DefErr{
enum{eNoErr,eErrInName,eErrInRegExp} eErrCode;
string strErrMsg;
int nErrOffset;
};
class REXI_Base{
public:
REXI_Base(char cEos='\0');
virtual ~REXI_Base()=0;
inline void SetSource (const char* pszSource);
inline const char* GetSource ()const;
REXI_DefErr AddRegDefinition (string strName,string strRegExp,
int nIdAnswer);
void GetRegDefinitions (vector<string>& vecDefinitions);
void RemoveRegDefinition (string strName);
REXI_DefErr SetRegexp (string strRegExp);
protected:
inline void FreeMemory ();
//source,source position and end of string character
char m_cEos;
const char* m_pszSource;
const char* m_pszTokenBeg;
const char* m_pszTokenEnd;
//algorithmic objects
REXA_Parser m_regexpParser;
REXA_DFAState* m_pStartState;
};
class REXI_Search : public REXI_Base
{
public:
REXI_Search(char cEos='\0');
REXI_DefErr
AddRegDef (string strName,string strRegExp);
inline REXI_DefErr
SetRegexp (string strRegExp);
bool MatchHere (const char*& rpcszSrc, int& nMatchLen,bool& bEos);
bool Find (const char*& rpcszSrc, int& nMatchLen,bool& bEos);
private:
bool MatchHereImpl();
int m_nIdAnswer;
};
inline const char* REXI_Base::GetSource()const {return m_pszSource;}
inline void REXI_Base::SetSource(const char* pszSource)
{
m_pszSource= pszSource;m_pszTokenBeg= m_pszTokenEnd=pszSource;
}
inline REXI_DefErr REXI_Search::SetRegexp (string strRegExp)
{
return REXI_Base::SetRegexp(strRegExp);
}
inline void REXI_Base::FreeMemory() {m_pStartState->DeleteAll();}
#endif
@@ -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,157 @@
#include "StdAfx.h"
#include ".\socketutil.h"
#define SOCK_TIMEOUT 5
CSocketUtil::CSocketUtil(void)
{
}
CSocketUtil::~CSocketUtil(void)
{
}
unsigned long CSocketUtil::conv_addr(const char *name)
{
struct hostent *he;
int max;
unsigned long retval;
if ((retval = inet_addr(name)) != INADDR_NONE)
return retval;
he = gethostbyname(name);
if (he == NULL)
return INADDR_NONE;
for (max = 0; he->h_addr_list[max]; max++) ;
if (max == 1)
return *((unsigned long *)(he->h_addr_list[0]));
else
return *((unsigned long *)(he->h_addr_list[rand() % max]));
}
CString CSocketUtil::get_first_rcts(const char *name)
{
struct hostent *he;
int max;
unsigned long retval;
CString str_ip;
CString sHeadOfAddress;
if ((retval = inet_addr(name)) != INADDR_NONE)
{
str_ip = name;
return str_ip;
}
he = gethostbyname(name);
if (he == NULL)
return NULL;
for (max = 0; he->h_addr_list[max]; max++) ;
int* end_ips = new int[max];
for (int i=0; i<max; i++)
{
sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = *((unsigned long *)(he->h_addr_list[i]));
str_ip = inet_ntoa(sa.sin_addr);
int lastDot = str_ip.ReverseFind('.');
sHeadOfAddress = str_ip.Left(lastDot);
CString sEndOfAddress = str_ip.Right(str_ip.GetLength() - lastDot -1);
end_ips[i] = atoi(sEndOfAddress.GetString());
}
for (int i=0; i<max; i++)
for (int j=0; j<max-1; j++)
if (end_ips[j] > end_ips[j+1])
swap(end_ips[j] , end_ips[j+1]);
char end_ip[5];
sprintf(end_ip , "%d" , end_ips[0]);
CString result_ip;
result_ip = sHeadOfAddress + "." + end_ip;
delete end_ips;
return result_ip;
}
int CSocketUtil::_sh_send(SOCKET s, char *pszBuf, int nLen)
{
int iSent = 0, nSentLen;
fd_set wset;
struct timeval tv;
FD_ZERO(&wset);
FD_SET(s, &wset);
tv.tv_sec = SOCK_TIMEOUT;
tv.tv_usec = 0;
do {
if (select(static_cast<int>(s + 1), NULL, &wset, NULL, &tv) < 0) break;
if (!FD_ISSET(s, &wset)) break;
nSentLen = send(s, pszBuf + iSent, nLen, 0);
iSent += nSentLen;
nLen -= nSentLen;
} while (nLen > 0 && nSentLen > 0);
return nLen > 0 ? SOCKET_ERROR : iSent;
}
int CSocketUtil::_sh_recv(SOCKET s, char *pszBuf, int nLen)
{
return recv(s , pszBuf , nLen , NULL);
}
int CSocketUtil::_rtxTimer(int sec , SOCKET descriptor)
{
fd_set fdsetRead;
fd_set fdsetWrite;
struct timeval tv;
FD_ZERO(&fdsetRead);
FD_ZERO(&fdsetWrite);
FD_SET(descriptor, &fdsetRead);
FD_SET(descriptor, &fdsetWrite);
tv.tv_sec = sec;
tv.tv_usec = 0;
return (::select(descriptor + 1, &fdsetRead, &fdsetWrite, NULL, &tv));
}
BOOL CSocketUtil::MessagePump(int nSleepDuration)
{
MSG msg;
if(nSleepDuration > 0)
Sleep(nSleepDuration);
try
{
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(AfxGetApp()->PumpMessage())
return TRUE;
}
}
catch(...)
{
}
return FALSE;
}
@@ -0,0 +1,19 @@
#pragma once
class CSocketUtil
{
public:
CSocketUtil(void);
~CSocketUtil(void);
public:
static int _sh_send(SOCKET s, char *buf, int len);
static int _sh_recv(SOCKET s, char *buf, int len);
int _rtxTimer(int sec , SOCKET descriptor);
CString get_first_rcts(const char *name);
unsigned long conv_addr(const char *name);
BOOL MessagePump(int nSleepDuration);
};
@@ -0,0 +1,50 @@
#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];
// Download Àü¿ë¹öÁ¯À» À§Çؼ­ Ãß°¡
char szRCTSAddress[128];
char szTransGuid[32];
char name_01[64];
char phone_01[64];
char mail_01[64];
char name_02[64];
char phone_02[64];
char mail_02[64];
char name_03[64];
char phone_03[64];
char mail_03[64];
int nWritePolicy;
bool bLogDir;
bool bLogUpload;
} TRANPARAM_STRUCT, *PTRANPARAM_STRUCT;
typedef struct _TRANS_ADD_INFO {
char szFileName[2048];
char bFolder;
}TADDINFO , *PTADDINFO;
enum TRANPARAM_ACTION {
TPA_UPLOAD = 0,
TPA_DOWNLOAD,
};
#define EXECUTE_PARAM "$CONSOLE$"
#define WMU_TRANSFER_DLG_CLOSE (WM_USER + 777)
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type='text/xsl' href='_UpgradeReport_Files/UpgradeReport.xslt'?><UpgradeLog>
<Properties><Property Name="Solution" Value="ConsoleApp">
</Property><Property Name="솔루션 파일" Value="E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleApp(DN)\ConsoleApp.sln">
</Property><Property Name="사용자 옵션 파일" Value="E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleApp(DN)\ConsoleApp.suo">
</Property><Property Name="Date" Value="2009년 7월 2일 목요일">
</Property><Property Name="Time" Value="오후 19:21">
</Property></Properties><Event ErrorLevel="0" Project="" Source="ConsoleApp.sln" Description="파일을 E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleApp(DN)\ConsoleApp.sln.old(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="" Source="ConsoleApp.suo" Description="파일을 E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleApp(DN)\ConsoleApp.suo.old(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="Visual C++에서는 이제 C 및 C++ 라이브러리를 더욱 안전하게 사용할 수 있습니다. 이를 위해 새 함수 및 향상된 함수, 추가 검사 및 유효성 검사, 내부 디자인 변경 등이 제공됩니다. 이러한 라이브러리는 기본적으로 사용하도록 설정됩니다. 프로젝트를 빌드할 때 안전하지 않은 함수 또는 매개 변수에 대한 경고가 표시될 수 있습니다. 경고에서는 일반적으로 더 안전한 다른 코딩 스타일 또는 함수를 제안합니다. 코드를 보다 안전하게 만들려면 이러한 경고에 따라 수정하는 것이 좋습니다. 자세한 내용은 설명서에서 'CRT의 보안 향상' 및 '확인된 반복기'를 검색하면 볼 수 있습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="ISO 표준 C++와의 호환성을 높이기 위해 C/C++ 컴파일러의 기본 설정이 수정되었습니다. 변경된 내용에는 표준 C++에서 for 루프 범위 지정 및 네이티브 형식 wchar_t 지원이 포함됩니다. 이러한 변경 사항으로 인해 기존 코드를 컴파일하려면 코드를 수정하거나 기존 컴파일러 옵션을 변경해야 할 수 있습니다.">
</Event><Event ErrorLevel="1" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="Visual C++ 프로젝트가 기본적으로 포함 Windows SxS 매니페스트를 만들어야 하는 요구 사항 때문에 매니페스트 도구를 사용한 빌드에서는 프로젝트의 매니페스트 파일이 자동으로 제외됩니다. 매니페스트 파일에 포함된 종속성 정보를 소스 코드에서 포함된 헤더 파일의 &quot;#pragma comment(linker,&quot;&lt;insert dependency here&gt;&quot;)&quot;로 변환하는 것이 좋습니다. 프로젝트가 이미 리소스 파일(.rc)을 통해 RT_MANIFEST 리소스 섹션에 매니페스트를 포함하고 있으면 이 줄을 주석 처리해야 프로젝트가 올바로 빌드됩니다.">
</Event><Event ErrorLevel="1" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="C++ 컴파일러 규칙이 변경되어 프로젝트를 오류 없이 빌드하려면 코드를 변경해야 합니다. C++ 컴파일러의 이전 버전에서는 멤버 함수 이름(예: MemberFunctionName)으로 멤버 함수의 포인터를 지정할 수 있었습니다. C++ 표준에서는 주소 연산자(예: &amp;ClassName::MemberFunctionName)를 사용하는 정규화된 이름이 필요합니다. Windows Forms 디자이너에서 사용하는 폼 또는 컨트롤이 프로젝트에 포함되어 있는 경우 디자이너에서 생성한 코드는 이벤트 처리기에 사용된 대리자 구문의 비호환 구문을 사용하므로 InitializeComponent에 포함되어 있는 코드를 변경해야 합니다.">
</Event><Event ErrorLevel="0" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="프로젝트 파일을 'E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleApp(DN)\ConsoleApp.vcproj.7.10.old'(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="프로젝트가 업그레이드되었습니다.">
</Event><Event ErrorLevel="3" Project="ConsoleApp" Source="ConsoleApp.vcproj" Description="Converted">
</Event><Event ErrorLevel="0" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="Visual C++에서는 이제 C 및 C++ 라이브러리를 더욱 안전하게 사용할 수 있습니다. 이를 위해 새 함수 및 향상된 함수, 추가 검사 및 유효성 검사, 내부 디자인 변경 등이 제공됩니다. 이러한 라이브러리는 기본적으로 사용하도록 설정됩니다. 프로젝트를 빌드할 때 안전하지 않은 함수 또는 매개 변수에 대한 경고가 표시될 수 있습니다. 경고에서는 일반적으로 더 안전한 다른 코딩 스타일 또는 함수를 제안합니다. 코드를 보다 안전하게 만들려면 이러한 경고에 따라 수정하는 것이 좋습니다. 자세한 내용은 설명서에서 'CRT의 보안 향상' 및 '확인된 반복기'를 검색하면 볼 수 있습니다.">
</Event><Event ErrorLevel="0" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="ISO 표준 C++와의 호환성을 높이기 위해 C/C++ 컴파일러의 기본 설정이 수정되었습니다. 변경된 내용에는 표준 C++에서 for 루프 범위 지정 및 네이티브 형식 wchar_t 지원이 포함됩니다. 이러한 변경 사항으로 인해 기존 코드를 컴파일하려면 코드를 수정하거나 기존 컴파일러 옵션을 변경해야 할 수 있습니다.">
</Event><Event ErrorLevel="1" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="Visual C++ 프로젝트가 기본적으로 포함 Windows SxS 매니페스트를 만들어야 하는 요구 사항 때문에 매니페스트 도구를 사용한 빌드에서는 프로젝트의 매니페스트 파일이 자동으로 제외됩니다. 매니페스트 파일에 포함된 종속성 정보를 소스 코드에서 포함된 헤더 파일의 &quot;#pragma comment(linker,&quot;&lt;insert dependency here&gt;&quot;)&quot;로 변환하는 것이 좋습니다. 프로젝트가 이미 리소스 파일(.rc)을 통해 RT_MANIFEST 리소스 섹션에 매니페스트를 포함하고 있으면 이 줄을 주석 처리해야 프로젝트가 올바로 빌드됩니다.">
</Event><Event ErrorLevel="1" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="C++ 컴파일러 규칙이 변경되어 프로젝트를 오류 없이 빌드하려면 코드를 변경해야 합니다. C++ 컴파일러의 이전 버전에서는 멤버 함수 이름(예: MemberFunctionName)으로 멤버 함수의 포인터를 지정할 수 있었습니다. C++ 표준에서는 주소 연산자(예: &amp;ClassName::MemberFunctionName)를 사용하는 정규화된 이름이 필요합니다. Windows Forms 디자이너에서 사용하는 폼 또는 컨트롤이 프로젝트에 포함되어 있는 경우 디자이너에서 생성한 코드는 이벤트 처리기에 사용된 대리자 구문의 비호환 구문을 사용하므로 InitializeComponent에 포함되어 있는 코드를 변경해야 합니다.">
</Event><Event ErrorLevel="0" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="프로젝트 파일을 'E:\ICS from younghwan\01. Legacy\ICS_1_0\CommLib\CommLib.vcproj.7.10.old'(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="프로젝트가 업그레이드되었습니다.">
</Event><Event ErrorLevel="3" Project="CommLib" Source="..\CommLib\CommLib.vcproj" Description="Converted">
</Event><Event ErrorLevel="0" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="Visual C++에서는 이제 C 및 C++ 라이브러리를 더욱 안전하게 사용할 수 있습니다. 이를 위해 새 함수 및 향상된 함수, 추가 검사 및 유효성 검사, 내부 디자인 변경 등이 제공됩니다. 이러한 라이브러리는 기본적으로 사용하도록 설정됩니다. 프로젝트를 빌드할 때 안전하지 않은 함수 또는 매개 변수에 대한 경고가 표시될 수 있습니다. 경고에서는 일반적으로 더 안전한 다른 코딩 스타일 또는 함수를 제안합니다. 코드를 보다 안전하게 만들려면 이러한 경고에 따라 수정하는 것이 좋습니다. 자세한 내용은 설명서에서 'CRT의 보안 향상' 및 '확인된 반복기'를 검색하면 볼 수 있습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="ISO 표준 C++와의 호환성을 높이기 위해 C/C++ 컴파일러의 기본 설정이 수정되었습니다. 변경된 내용에는 표준 C++에서 for 루프 범위 지정 및 네이티브 형식 wchar_t 지원이 포함됩니다. 이러한 변경 사항으로 인해 기존 코드를 컴파일하려면 코드를 수정하거나 기존 컴파일러 옵션을 변경해야 할 수 있습니다.">
</Event><Event ErrorLevel="1" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="Visual C++ 프로젝트가 기본적으로 포함 Windows SxS 매니페스트를 만들어야 하는 요구 사항 때문에 매니페스트 도구를 사용한 빌드에서는 프로젝트의 매니페스트 파일이 자동으로 제외됩니다. 매니페스트 파일에 포함된 종속성 정보를 소스 코드에서 포함된 헤더 파일의 &quot;#pragma comment(linker,&quot;&lt;insert dependency here&gt;&quot;)&quot;로 변환하는 것이 좋습니다. 프로젝트가 이미 리소스 파일(.rc)을 통해 RT_MANIFEST 리소스 섹션에 매니페스트를 포함하고 있으면 이 줄을 주석 처리해야 프로젝트가 올바로 빌드됩니다.">
</Event><Event ErrorLevel="1" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="C++ 컴파일러 규칙이 변경되어 프로젝트를 오류 없이 빌드하려면 코드를 변경해야 합니다. C++ 컴파일러의 이전 버전에서는 멤버 함수 이름(예: MemberFunctionName)으로 멤버 함수의 포인터를 지정할 수 있었습니다. C++ 표준에서는 주소 연산자(예: &amp;ClassName::MemberFunctionName)를 사용하는 정규화된 이름이 필요합니다. Windows Forms 디자이너에서 사용하는 폼 또는 컨트롤이 프로젝트에 포함되어 있는 경우 디자이너에서 생성한 코드는 이벤트 처리기에 사용된 대리자 구문의 비호환 구문을 사용하므로 InitializeComponent에 포함되어 있는 코드를 변경해야 합니다.">
</Event><Event ErrorLevel="0" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="프로젝트 파일을 'E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleTransfer(DN)\ConsoleTransfer.vcproj.7.10.old'(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="프로젝트가 업그레이드되었습니다.">
</Event><Event ErrorLevel="3" Project="ConsoleTransfer" Source="..\ConsoleTransfer(DN)\ConsoleTransfer.vcproj" Description="Converted">
</Event><Event ErrorLevel="0" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="Visual C++에서는 이제 C 및 C++ 라이브러리를 더욱 안전하게 사용할 수 있습니다. 이를 위해 새 함수 및 향상된 함수, 추가 검사 및 유효성 검사, 내부 디자인 변경 등이 제공됩니다. 이러한 라이브러리는 기본적으로 사용하도록 설정됩니다. 프로젝트를 빌드할 때 안전하지 않은 함수 또는 매개 변수에 대한 경고가 표시될 수 있습니다. 경고에서는 일반적으로 더 안전한 다른 코딩 스타일 또는 함수를 제안합니다. 코드를 보다 안전하게 만들려면 이러한 경고에 따라 수정하는 것이 좋습니다. 자세한 내용은 설명서에서 'CRT의 보안 향상' 및 '확인된 반복기'를 검색하면 볼 수 있습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="ISO 표준 C++와의 호환성을 높이기 위해 C/C++ 컴파일러의 기본 설정이 수정되었습니다. 변경된 내용에는 표준 C++에서 for 루프 범위 지정 및 네이티브 형식 wchar_t 지원이 포함됩니다. 이러한 변경 사항으로 인해 기존 코드를 컴파일하려면 코드를 수정하거나 기존 컴파일러 옵션을 변경해야 할 수 있습니다.">
</Event><Event ErrorLevel="1" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="Visual C++ 프로젝트가 기본적으로 포함 Windows SxS 매니페스트를 만들어야 하는 요구 사항 때문에 매니페스트 도구를 사용한 빌드에서는 프로젝트의 매니페스트 파일이 자동으로 제외됩니다. 매니페스트 파일에 포함된 종속성 정보를 소스 코드에서 포함된 헤더 파일의 &quot;#pragma comment(linker,&quot;&lt;insert dependency here&gt;&quot;)&quot;로 변환하는 것이 좋습니다. 프로젝트가 이미 리소스 파일(.rc)을 통해 RT_MANIFEST 리소스 섹션에 매니페스트를 포함하고 있으면 이 줄을 주석 처리해야 프로젝트가 올바로 빌드됩니다.">
</Event><Event ErrorLevel="1" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="C++ 컴파일러 규칙이 변경되어 프로젝트를 오류 없이 빌드하려면 코드를 변경해야 합니다. C++ 컴파일러의 이전 버전에서는 멤버 함수 이름(예: MemberFunctionName)으로 멤버 함수의 포인터를 지정할 수 있었습니다. C++ 표준에서는 주소 연산자(예: &amp;ClassName::MemberFunctionName)를 사용하는 정규화된 이름이 필요합니다. Windows Forms 디자이너에서 사용하는 폼 또는 컨트롤이 프로젝트에 포함되어 있는 경우 디자이너에서 생성한 코드는 이벤트 처리기에 사용된 대리자 구문의 비호환 구문을 사용하므로 InitializeComponent에 포함되어 있는 코드를 변경해야 합니다.">
</Event><Event ErrorLevel="0" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="프로젝트 파일을 'E:\ICS from younghwan\01. Legacy\ICS_1_0\ConsoleUpdater(DN)\ConsoleUpdater.vcproj.7.10.old'(으)로 백업했습니다.">
</Event><Event ErrorLevel="0" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="프로젝트가 업그레이드되었습니다.">
</Event><Event ErrorLevel="3" Project="ConsoleUpdater" Source="..\ConsoleUpdater(DN)\ConsoleUpdater.vcproj" Description="Converted">
</Event><Event ErrorLevel="0" Project="" Source="ConsoleApp.sln" Description="솔루션을 변환했습니다.">
</Event><Event ErrorLevel="3" Project="" Source="ConsoleApp.sln" Description="Converted">
</Event></UpgradeLog>
@@ -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();
};
@@ -0,0 +1,283 @@
// WebDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConsoleApp.h"
#include "WebDlg.h"
#include ".\webdlg.h"
#include "Mshtml.h"
// CWebDlg 대화 상자입니다.
LPDISPATCH glpDisp = NULL; // global LPDISPATCH, can also
// be of class scope
IMPLEMENT_DYNAMIC(CWebDlg, CDialog)
CWebDlg::CWebDlg(CWnd* pParent /*=NULL*/)
: CDialog(CWebDlg::IDD, pParent)
{
}
CWebDlg::~CWebDlg()
{
}
void CWebDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EXPLORER1, m_web);
}
BEGIN_MESSAGE_MAP(CWebDlg, CDialog)
ON_WM_CLOSE()
END_MESSAGE_MAP()
// CWebDlg 메시지 처리기입니다.
BEGIN_EVENTSINK_MAP(CWebDlg, CDialog)
ON_EVENT(CWebDlg, IDC_EXPLORER1, 259, DocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CWebDlg, IDC_EXPLORER1, 251, NewWindow2Explorer1, VTS_PDISPATCH VTS_PBOOL)
ON_EVENT(CWebDlg, IDC_EXPLORER1, 263, WindowClosingExplorer1, VTS_BOOL VTS_PBOOL)
ON_EVENT(CWebDlg, IDC_EXPLORER1, 252, NavigateComplete2Explorer1, VTS_DISPATCH VTS_PVARIANT)
END_EVENTSINK_MAP()
void CWebDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
long width;
long height;
if (m_nType == 5)
{
long width = 627;
long height = 675;
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
m_web.MoveWindow(0, 0, width, height, TRUE);
MoveWindow(cx/2 - width /2,cy /2 - height/2,width, height);
return;
}
// if (glpDisp && glpDisp == pDisp)
{
// if the LPDISPATCH are same, that means
// it is the final DocumentComplete. Reset glpDisp
TRACE("Document is done downloading");
glpDisp = NULL;
IDispatch* pDocDispatch = NULL ;
pDocDispatch = m_web.get_Document();
IHTMLDocument2* pHTMLDoc = NULL;
IHTMLTextContainer *pText = NULL;
pDocDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pHTMLDoc);
IHTMLElement* pHTEMLElement = NULL;
IHTMLElement *lpParentElm;
pHTMLDoc->get_body(&pHTEMLElement);
pHTEMLElement->get_parentElement(&lpParentElm);
BSTR bstr;
lpParentElm->get_outerHTML(&bstr);
CString sData;
sData = bstr;
int curPos= 0;
CString sTemp = sData.Tokenize("$%^&",curPos);
if(!sTemp.IsEmpty())
{
sTemp= sData.Tokenize("$%^&",curPos);
if(!sTemp.IsEmpty())
{
int iPos=0;
width = atol(sTemp.Tokenize(",",iPos));
height = atol(sTemp.Tokenize(",",iPos));
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
if(width != 0 && height != 0)
{
m_web.MoveWindow(0, 0, width, height, TRUE);
MoveWindow(cx/2 - width /2,cy /2 - height/2,width, height);
}
}
}
SysFreeString (bstr);
// CComQIPtr<IHTMLElement2> element = pHTEMLElement;
// if(element)
// {
// element->get_clientHeight(&height);
// element->get_clientWidth(&width);
// int cx = GetSystemMetrics(SM_CXSCREEN);
// int cy = GetSystemMetrics(SM_CYSCREEN);
// m_web.MoveWindow(0, 0, width, height, TRUE);
// MoveWindow(cx/2 - width /2,cy /2 - height/2,width, height);
// }
}
}
void CWebDlg::NewWindow2Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel)
{
m_pWebDlg = new CWebDlg();
m_pWebDlg->Create(IDD_WEB_DLG,GetDesktopWindow());
m_pWebDlg->m_web.put_RegisterAsBrowser(TRUE);
*ppDisp = m_pWebDlg->m_web.get_Application();
CString strTitle;
GetWindowText(strTitle);
m_pWebDlg->SetWindowText(strTitle);
m_pWebDlg->ShowWindow(TRUE);
}
BOOL CWebDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
int CWebDlg::GetPage(WEBDLG_TYPE nFlag,CString sCP,CString sUser,CString strPath)
{
CString strURL;
CString strTitle;
CString sData;
CString strHeader = _T("Content-Type: application/x-www-form-urlencoded\r\n");
m_nType = nFlag;
switch(nFlag)
{
case MAN_TRAFFIC:
strURL = URL_MAN_TRAFFIC;
strTitle = "컨텐츠 통계";
sData.Format("p=%s!%s",sCP,sUser);
break;
case MAN_FOLDER:
strURL = URL_MAN_FOLDER;
strTitle = "권한 관리";
sData.Format("p=%s!%s",sCP,sUser);
break;
case MAN_USER:
strURL = URL_MAN_USER;
strTitle = "사용자 관리";
sData.Format("p=%s!%s",sCP,sUser);
break;
case MAN_TOP10:
strURL = URL_MAN_TOP10;
strTitle = "이미지 호스팅 Top10";
sData.Format("p=%s!%s",sCP,sUser);
break;
case MAN_FILE_STAT:
strURL = URL_MAN_FILE_STAT;
strTitle = "파일 통계";
sData.Format("p=%s!%s",sCP,strPath);
break;
case MAN_FILE_PRO:
strURL = URL_MAN_FILE_PRO;
strTitle = "파일 속성";
sData.Format("p=%s!%s",sCP,strPath);
break;
case MAN_NOTICE:
strURL = URL_MAN_NOTICE;
strTitle = "공지 사항";
sData.Format("p=%s!%s",sCP,sUser);
break;
case MAN_COUPON:
strURL = URL_MAN_COUPON;
strTitle = "쿠폰정보";
sData.Format("p=%s",sCP);
break;
case MAN_TRAFIC_STAT:
strURL = URL_MAN_TRAFIC_STAT;
strTitle = "트래픽 이용내역";
sData.Format("p=%s",sCP);
break;
case MAN_FINDID:
strURL = URL_MAN_FINDID;
strTitle = "아이디/비밀번호찾기";
break;
case MAN_DISTINFO:
strURL = URL_MAN_DISTINFO;
strTitle = "배포현황조회";
sData.Format("p=%s!%s!%s",sCP,sUser,strPath);
break;
}
SetWindowText(strTitle);
VARIANT vHeader;
vHeader.vt = VT_BSTR;
vHeader.bstrVal = strHeader.AllocSysString();
SAFEARRAY FAR *sfPost = NULL;
SAFEARRAYBOUND bound;
bound.cElements = sData.GetLength();
bound.lLbound = 0;
sfPost = SafeArrayCreate(VT_UI1,1,&bound);
for (long lIndex = 0; lIndex < (signed)bound.cElements;lIndex++)
{
SafeArrayPutElement(sfPost,&lIndex, sData.GetBuffer(bound.cElements) + lIndex);
}
sData.ReleaseBuffer();
VARIANT vaPost;
vaPost.vt = VT_ARRAY;
vaPost.parray = sfPost;
m_web.Navigate(strURL, 0 , NULL, &vaPost,&vHeader);
// m_web.Navigate(strURL, 0 , NULL, NULL,&vHeader);
SafeArrayDestroy(sfPost);
SysFreeString(vHeader.bstrVal);
return 0;
}
void CWebDlg::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;
}
void CWebDlg::OnClose()
{
CDialog::OnClose();
}
void CWebDlg::OnCancel()
{
DestroyWindow();
}
void CWebDlg::WindowClosingExplorer1(BOOL IsChildWindow, BOOL* Cancel)
{
PostMessage(WM_CLOSE,0,0);
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
}
void CWebDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// Check if glpDisp is NULL. If NULL, that means it is
// the top level NavigateComplete2. Save the LPDISPATCH
if (!glpDisp)
glpDisp = pDisp;
}
@@ -0,0 +1,66 @@
#pragma once
#include "explorer1.h"
#define URL_MAN_FOLDER "https://kpm.ktspeedway.co.kr/cp_manage/main_cp_folder_auth.php"
#define URL_MAN_USER "https://kpm.ktspeedway.co.kr/cp_manage/cp_member_list.php"
#define URL_MAN_TRAFFIC "https://kpm.ktspeedway.co.kr/traffic_manage/traffic_main.php?info_type=day"
#define URL_MAN_TOP10 "https://kpm.ktspeedway.co.kr/traffic_manage/chart_top10.php?info_type=r1"
#define URL_MAN_FILE_STAT "https://kpm.ktspeedway.co.kr/traffic_manage/file_detail.php?p=%s"
#define URL_MAN_FILE_PRO "http://kpm.ktspeedway.co.kr/traffic_manage/file_property.php?p=%s"
#define URL_MAN_NOTICE "https://kpm.ktspeedway.co.kr/notice/view_content.php?p=%s"
#define URL_MAN_COUPON "https://kpm.ktspeedway.co.kr/traffic_manage/coupon_history.php?p=%s"
#define URL_MAN_TRAFIC_STAT "http://kpm.ktspeedway.co.kr/traffic_manage/traffic_stats.php?p=%s"
#define URL_MAN_FINDID "http://kpm.ktspeedway.co.kr/cp_manage/find_info.php"
#define URL_MAN_DISTINFO "http://www.ktsystemhosting.com:8080/sp/manage/manage_server_list.html"
// CWebDlg 대화 상자입니다.
enum WEBDLG_TYPE {
MAN_TRAFFIC = 0,
MAN_FOLDER,
MAN_USER,
MAN_TOP10,
MAN_FILE_STAT,
MAN_FILE_PRO,
MAN_NOTICE,
MAN_COUPON,
MAN_TRAFIC_STAT,
MAN_FINDID,
MAN_DISTINFO
};
class CWebDlg : public CDialog
{
DECLARE_DYNAMIC(CWebDlg)
public:
CWebDlg(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CWebDlg();
// 대화 상자 데이터입니다.
enum { IDD = IDD_WEB_DLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
CExplorer1 m_web;
CWebDlg* m_pWebDlg;
int m_nType;
DECLARE_EVENTSINK_MAP()
void DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL);
void NewWindow2Explorer1(LPDISPATCH* ppDisp, BOOL* Cancel);
virtual BOOL OnInitDialog();
public:
int GetPage(WEBDLG_TYPE nFlag,CString sCP,CString sUser,CString strPath=_T(""));
protected:
virtual void PostNcDestroy();
public:
afx_msg void OnClose();
protected:
virtual void OnCancel();
public:
void WindowClosingExplorer1(BOOL IsChildWindow, BOOL* Cancel);
void NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL);
};
@@ -0,0 +1,809 @@
#include "stdafx.h"
#include "WebUtil.h"
#include "Wininet.h"
#include "atlenc.h"
#include "../CommLib/commlib.h"
#pragma comment( lib, "Wininet.lib" )
#import <msxml.dll>
#include <comutil.h>
#include ".\webutil.h"
CWebUtil::CWebUtil()
{
}
CWebUtil::~CWebUtil()
{
}
int CWebUtil::kp_process_errors(int nError,MODIFY_TYPE Type)
{
switch(nError)
{
case UNDEFINED_ERROR: // 알수 없는 오류
AfxMessageBox(_T("메타서버 오류 : 알수없는 오류"));
break;
case NOADMIT_SET_FAIL: // 무인증 요청 실패
AfxMessageBox(_T("메타서버 오류 : 무인증 요청 실패"));
break;
case ADMIT_SET_FAIL: // 무인증 해제 실패
AfxMessageBox(_T("메타서버 오류 : 무인증 해제 실패"));
break;
case LOGIN_FAIL_NOID: // 로그인 실패 : 아이디 없음
AfxMessageBox(_T("메타서버 오류 : 해당 아이디가 존재하지 않습니다."));
break;
case LOGIN_FAIL_NOPASSWD: // 로그인 실패 : 패스워드 틀림
AfxMessageBox(_T("메타서버 오류 : 비밀번호가 잘못 되었습니다."));
break;
case CANNOT_WRITE: // 파일 업로드 권한 없음
AfxMessageBox(_T("메타서버 오류 : 파일 업로드 권한 없음"));
break;
case NO_QUOTA: // 파일 업로드 용량 없음
AfxMessageBox(_T("메타서버 오류 : 파일 업로드 용량 없음"));
break;
case TARGET_FILE_EXIST: // 파일 수정 불가 : 대상 파일이 이미 존재함
AfxMessageBox(_T("메타서버 오류 : 파일 수정 불가 : 대상 파일이 이미 존재함"));
break;
default:
break;
}
return nError;
}
PCLFILE_STRUCTEX CWebUtil::kp_parse_file_list_struct(CString sData, unsigned int *count)
{
PCLFILE_STRUCTEX pclf = NULL;
MSXML::IXMLDOMDocumentPtr pDoc;
try
{
pDoc.CreateInstance(__uuidof(DOMDocument));
HRESULT hr = pDoc->loadXML(_bstr_t(sData));
if(VARIANT_TRUE == hr)
{
MSXML::IXMLDOMElementPtr pRecordSetInfo;
MSXML::IXMLDOMNodeListPtr pRecordSet;
MSXML::IXMLDOMElementPtr pRecordInfo;
MSXML::IXMLDOMNodeListPtr pFieldList;
MSXML::IXMLDOMElementPtr pFieldInfo;
CString szRecordCount = _T("0");
pRecordSetInfo = pDoc->selectSingleNode("//filelist");
if(pRecordSetInfo)
pRecordSet = pRecordSetInfo->childNodes;
szRecordCount = pRecordSetInfo->getAttribute("count");
int nCount = atol(kp_get_unbase64_data(szRecordCount));
if (nCount ==0)
return pclf;
pclf = new CLFILE_STRUCTEX[nCount];
*count = nCount;
for(int i = 0; i <= pRecordSet->length; i++)
{
pRecordInfo = pRecordSet->item[i];
if(NULL == pRecordInfo) continue;
pFieldList = pRecordInfo->childNodes;
if(NULL == pFieldList) continue;
CString szName = kp_get_decoded_data(kp_get_unbase64_data(pRecordInfo->getAttribute("name")));
CString szFlag = kp_get_decoded_data(kp_get_unbase64_data(pRecordInfo->getAttribute("flag")));
if(szFlag[0] == 'D')
pclf[i].attr = CLFILEATTR_FOLDER;
else
pclf[i].attr = 0;
strcpy(pclf[i].path,szName);
for(int j = 0; j < pFieldList->length; j++)
{
pFieldInfo = pFieldList->item[j];
if(NULL == pFieldInfo) break;
CString szNodeName = pFieldInfo->nodeName;
CString szTemp = pFieldInfo->text;
CString szValue = kp_get_decoded_data(kp_get_unbase64_data(szTemp));
if (szNodeName == "size")
pclf[i].size = _atoi64(szValue);
else if (szNodeName == "updateip")
strcpy(pclf[i].ip,szValue);
else if (szNodeName == "updatetime")
{
CTime fTime((time_t)atol(szValue));
struct tm* osTime;
osTime = fTime.GetLocalTm(NULL);
sprintf(pclf[i].lastModified,"%04d-%02d-%02d %s %02d:%02d:%02d",
osTime->tm_year+1900,
osTime->tm_mon +1,
osTime->tm_mday,
osTime->tm_hour > 12 ? "오후" : "오전",
osTime->tm_hour > 12 ? osTime->tm_hour - 12 : osTime->tm_hour,
osTime->tm_min,
osTime->tm_sec);
}
else if (szNodeName == "hit_today")
pclf[i].hit_today = atol(szValue);
else if (szNodeName == "hit_yesterday")
pclf[i].hit_yesterday = atol(szValue);
else if (szNodeName == "hit_avr")
pclf[i].hit_avr = atol(szValue);
else if (szNodeName == "per_success")
pclf[i].per_success = atol(szValue);
else if (szNodeName == "total_size")
pclf[i].total_size = _atoi64(szValue);
else if (szNodeName == "used_size")
pclf[i].used_size = _atoi64(szValue);
else if (szNodeName == "traffic")
pclf[i].traffic = _atoi64(szValue);
else if (szNodeName == "today_traffic")
pclf[i].today_traffic = _atoi64(szValue);
else if (szNodeName == "is_service")
strncpy(pclf[i].service_status, szValue , 2);
else if (szNodeName == "backup")
strcpy(pclf[i].backup_path, szValue);
// strcpy(pclf[i].backup_path, "/TEMP/szValue/");
}
}
}
}
catch(CException* )
{
return NULL;
}
return pclf;
}
PCLFILE_STRUCTEX CWebUtil::kp_get_file_list(const char *path, unsigned int depth, unsigned int *count)
{
CString strTemp;
CString sModNum;
CString strPath;
if (path[0] == 0x00)
strPath.Format(_T("/"));
else
strPath.Format(_T("%s"), path);
switch(depth)
{
case 2: // 서비스정보
sModNum = _T("10");
break;
case 1: // 현재 레벨의 파일 리스트
sModNum = _T("3");
break;
case 0: // 자기 자신 정보
sModNum = _T("9");
break;
}
strTemp = kp_get_crypted_data(sModNum) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(strPath);
TRACE(_T("\nkp_get_file_list : %s | %s | %s \n"),m_cpid,m_loginid,strPath);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
// strTemp = kp_get_unbase64_data(strTemp);
return kp_parse_file_list_struct(strTemp,count);
}
void CWebUtil::kp_free_file_list(PCLFILE_STRUCTEX pclf)
{
if (!pclf)
return;
delete []pclf;
}
int CWebUtil::kp_init(CString cp_id,CString cp_user_id, CString pass)
{
m_cpid = cp_id;
m_loginid = cp_user_id;
m_pass = pass;
return KP_ERROR_SUCCESS;
}
CString CWebUtil::kp_get_crypted_data(CString strData)
{
return kp_get_base64_data(kp_get_encoded_data(strData));
}
int CWebUtil::kp_set_annoy(CString sPath,BOOL bSet)
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("1")) + DELIM +
kp_get_crypted_data(sPath) + DELIM +
kp_get_crypted_data(bSet ? _T("1") : _T("0"));
/*
strTemp.Format(_T("%s%s%s%s%s"),
kp_get_crypted_data(_T("1")),DELIM,
kp_get_crypted_data(sPath),DELIM,
kp_get_crypted_data(bSet ? _T("1") : _T("0")));
*/
TRACE(_T("\nkp_set_annoy : %s | %s\n"),sPath,bSet ? _T("1") : _T("0"));
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_chk_login(BOOL bisNetdrive)
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("2")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(m_pass) + DELIM +
kp_get_crypted_data(bisNetdrive ? _T("1") : _T(""));
// if(!bisNetdrive)
// strTemp += kp_get_crypted_data(_T("1");
TRACE(_T("\nkp_chk_login : %s | %s | %s\n"),m_cpid,m_loginid,m_pass);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_chk_upload(CString sPath,CString sFileName,LARGE_INTEGER nSize,BOOL bDir)
{
CString strTemp;
CString strSize;
strSize.Format(_T("%I64d"),nSize.QuadPart);
strTemp = kp_get_crypted_data(_T("4")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sPath) + DELIM +
kp_get_crypted_data(sFileName) + DELIM +
kp_get_crypted_data(bDir?_T("D"):_T("F")) + DELIM +
kp_get_crypted_data(strSize);
/*
strTemp.Format(_T("%s%s%s%s%s%s%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("4")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sPath),DELIM,
kp_get_crypted_data(sFileName),DELIM,
kp_get_crypted_data(bDir?_T("D"):_T("F")),DELIM,
kp_get_crypted_data(strSize));
*/
TRACE(_T("\nkp_chk_upload : %s | %s | %s | %s | %s\n"),m_cpid,m_loginid,sPath,sFileName,strSize);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_set_start_upload(CString sPath, CString sFileName, LARGE_INTEGER nSize,BOOL bIsDir, BOOL bOverWrite)
{
CString strTemp;
CString strSize;
strSize.Format(_T("%I64d"),nSize.QuadPart);
strTemp = kp_get_crypted_data(_T("5")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sPath) + DELIM +
kp_get_crypted_data(sFileName) + DELIM +
kp_get_crypted_data(strSize) + DELIM +
kp_get_crypted_data(bIsDir?_T("D"):_T("F")) + DELIM +
kp_get_crypted_data(bOverWrite?_T("1"):_T("0"));
/*
strTemp.Format(_T("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("5")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sPath),DELIM,
kp_get_crypted_data(sFileName),DELIM,
kp_get_crypted_data(strSize),DELIM,
kp_get_crypted_data(bIsDir?_T("D"):_T("F")),DELIM,
kp_get_crypted_data(bOverWrite?_T("1"):_T("0"))
);
*/
TRACE(_T("\nkp_set_start_upload : %s | %s | %s | %s | %s | %s | %s\n"),
m_cpid,m_loginid,sPath,sFileName,strSize,bIsDir?_T("D"):_T("F"),bOverWrite?_T("1"):_T("0"));
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_set_end_upload(CString sPath, CString sFileName, LARGE_INTEGER nSize,BOOL bSuccess)
{
CString strTemp;
CString strSize;
strSize.Format(_T("%I64d"),nSize.QuadPart);
strTemp = kp_get_crypted_data(_T("6")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sPath) + DELIM +
kp_get_crypted_data(sFileName) + DELIM +
kp_get_crypted_data(strSize) + DELIM +
kp_get_crypted_data(bSuccess?_T("1"):_T("0"));
/*
strTemp.Format(_T("%s%s%s%s%s%s%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("6")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sPath),DELIM,
kp_get_crypted_data(sFileName),DELIM,
kp_get_crypted_data(strSize),DELIM,
kp_get_crypted_data(bSuccess?_T("1"):_T("0")));
*/
TRACE(_T("\nkp_set_end_upload : %s | %s | %s | %s | %s\n"),
m_cpid,m_loginid,sPath,sFileName,strSize);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_set_start_modify(CString sSPath, CString sSFileName, LARGE_INTEGER nSSize,
CString sDPath, CString sDFileName, LARGE_INTEGER nDSize, MODIFY_TYPE Type)
{
CString strTemp;
CString strSSize;
CString strDSize;
CString sFlag;
strSSize.Format(_T("%I64d"),nSSize.QuadPart);
strDSize.Format(_T("%I64d"),nDSize.QuadPart);
strTemp = kp_get_crypted_data(_T("7")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sSPath) + DELIM +
kp_get_crypted_data(sSFileName) + DELIM +
kp_get_crypted_data(strSSize) + DELIM +
kp_get_crypted_data(sDPath) + DELIM +
kp_get_crypted_data(sDFileName) + DELIM +
kp_get_crypted_data(strDSize) + DELIM +
kp_get_crypted_data(modify_types[Type]);
/*
strTemp.Format(_T("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("7")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sSPath),DELIM,
kp_get_crypted_data(sSFileName),DELIM,
kp_get_crypted_data(strSSize),DELIM,
kp_get_crypted_data(sDPath),DELIM,
kp_get_crypted_data(sDFileName),DELIM,
kp_get_crypted_data(strDSize),DELIM,
kp_get_crypted_data(modify_types[Type]));
*/
TRACE(_T("\nkp_set_start_modify : %s | %s | %s | %s | %s | %s | %s | %s | %s\n"),
m_cpid,m_loginid,sSPath,sSFileName,strSSize,sDPath,sDFileName,strDSize,modify_types[Type]);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp),Type);
}
int CWebUtil::kp_set_end_modify(CString sSPath, CString sSFileName, LARGE_INTEGER nSSize,
CString sDPath, CString sDFileName, LARGE_INTEGER nDSize, MODIFY_TYPE Type)
{
CString strTemp;
CString strSSize;
CString strDSize;
CString sFlag;
strSSize.Format(_T("%I64d"),nSSize.QuadPart);
strDSize.Format(_T("%I64d"),nDSize.QuadPart);
strTemp = kp_get_crypted_data(_T("8")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sSPath) + DELIM +
kp_get_crypted_data(sSFileName) + DELIM +
kp_get_crypted_data(strSSize) + DELIM +
kp_get_crypted_data(sDPath) + DELIM +
kp_get_crypted_data(sDFileName) + DELIM +
kp_get_crypted_data(strDSize) + DELIM +
kp_get_crypted_data(modify_types[Type]);
/*
strTemp.Format(_T("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("8")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sSPath),DELIM,
kp_get_crypted_data(sSFileName),DELIM,
kp_get_crypted_data(strSSize),DELIM,
kp_get_crypted_data(sDPath),DELIM,
kp_get_crypted_data(sDFileName),DELIM,
kp_get_crypted_data(strDSize),DELIM,
kp_get_crypted_data(modify_types[Type]));
*/
TRACE(_T("\nkp_set_end_modify : %s | %s | %s | %s | %s | %s | %s | %s | %s\n"),
m_cpid,m_loginid,sSPath,sSFileName,strSSize,sDPath,sDFileName,strDSize,modify_types[Type]);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp),Type);
}
CString CWebUtil::kp_get_encoded_data(CString strData)
{
char szEncoded[MAX_PATH << 1];
char* pszEncoded = szEncoded;
CString strRet;
LPCSTR pszURL = strData.GetBuffer();
while (*pszURL != NULL) {
if ((*pszURL >= 'a' && *pszURL <= 'z') || (*pszURL >= 'A' && *pszURL <= 'Z')
|| (*pszURL >= '0' && *pszURL <= '9') || *pszURL == '/')
*pszEncoded = (char)*pszURL;
else {
*pszEncoded++ = '%';
char szBuf[10];
sprintf(szBuf, _T("%02X"), *pszURL);
int nBufLen = (int)strlen(szBuf);
*pszEncoded++ = szBuf[nBufLen - 2];
*pszEncoded = szBuf[nBufLen - 1];
}
pszEncoded++;
pszURL++;
}
*pszEncoded = NULL;
strRet = szEncoded;
return strData;
}
#define BUFFER_SIZE 1024
CString CWebUtil::kp_get_decoded_data(CString strData)
{
TCHAR szOut[BUFFER_SIZE], szHex[3];
ZeroMemory(szOut, sizeof(szOut));
for (int i = 0, j = 0; strData[i]; i++, j++) {
if (strData[i] == '%') {
szHex[0] = strData[++i];
szHex[1] = strData[++i];
szHex[2] = 0;
sscanf((char *)szHex, "%x", &szOut[j]);
} else {
szOut[j] = strData[i];
}
}
CString sRet = szOut;
return strData;
}
CString CWebUtil::kp_get_base64_data(CString strData)
{
CString strRet;
int nDstLen = BEncodeGetRequiredLength(strData.GetLength(),sizeof(char));
Base64Encode((BYTE*)strData.GetBuffer(), strData.GetLength(), strRet.GetBuffer(nDstLen), &nDstLen);
strRet.ReleaseBuffer(nDstLen);
return strRet;
}
CString CWebUtil::kp_get_unbase64_data(CString strData)
{
CString strRet;
int nDstLen = Base64DecodeGetRequiredLength(strData.GetLength());
Base64Decode(strData.GetBuffer(),strData.GetLength(),(BYTE*)strRet.GetBuffer(nDstLen),&nDstLen);
strRet.ReleaseBuffer(nDstLen);
return strRet;
}
CString CWebUtil::kp_recv_data_http(CString strParam,BOOL bssl)
{
CString strRet;
DWORD dwFlags = 0 ;
HINTERNET hInternetConnect;
HINTERNET hOpenRequest;
HINTERNET hInternetRoot;
TRACE(_T("\nPARAM : %s\n"),strParam);
hInternetRoot = InternetOpen(_T("KPOST"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(bssl)
{
hInternetConnect = InternetConnect(hInternetRoot,KPOST_WEBIP,
INTERNET_DEFAULT_HTTPS_PORT,"","",INTERNET_SERVICE_HTTP,0,0);
dwFlags = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_CACHE_WRITE |INTERNET_FLAG_FORMS_SUBMIT |INTERNET_FLAG_SECURE;
}
else
{
hInternetConnect = InternetConnect(hInternetRoot,KPOST_WEBIP,
_HTTP_PORT,"","",INTERNET_SERVICE_HTTP,0,0);
dwFlags = INTERNET_FLAG_IGNORE_CERT_CN_INVALID|INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
}
hOpenRequest = HttpOpenRequest(hInternetConnect,_T("POST"),KPOST_WEBREF,HTTP_VERSION,"",NULL,dwFlags,0);
dwFlags = SECURITY_FLAG_IGNORE_UNKNOWN_CA|
SECURITY_FLAG_IGNORE_REVOCATION|
SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP|
SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS|
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID|
SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
InternetSetOption (hOpenRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof(dwFlags));
char szPostData[2048] = {0};
lstrcpy(szPostData, strParam);
// post header
char szLen[MAX_PATH] = {0};
char szHeader[2048] = {0};
sprintf(szLen, _T("%d"), lstrlen(szPostData));
lstrcpy(szHeader, _T("Accept: text/*\r\n"));
lstrcat(szHeader, _T("User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;* Windows NT)\r\n"));
lstrcat(szHeader, _T("Content-type: application/x-www-form-urlencoded\r\n"));
lstrcat(szHeader, _T("Content-length: "));
lstrcat(szHeader, szLen);
lstrcat(szHeader, _T("\r\n\n"));
HttpAddRequestHeaders(hOpenRequest, szHeader, -1L, HTTP_ADDREQ_FLAG_ADD);
BOOL bSendRequest = HttpSendRequest(hOpenRequest,NULL,0,szPostData,lstrlen(szPostData));
char szBuf[1024+1] = {0};
DWORD dwSize = 0;
InternetReadFile( hOpenRequest,szBuf,sizeof(szBuf)-1,&dwSize);
strRet += szBuf;
memset(szBuf,0x00,sizeof(szBuf));
while(dwSize)
{
dwSize = 0;
InternetReadFile( hOpenRequest,szBuf,sizeof(szBuf)-1,&dwSize);
if(dwSize)
{
szBuf[dwSize] = 0x00;
strRet += szBuf;
}
memset(szBuf,0x00,sizeof(szBuf));
}
BOOL bRet = InternetCloseHandle(hOpenRequest);
bRet = InternetCloseHandle(hInternetConnect);
bRet = InternetCloseHandle(hInternetRoot);
strRet.Trim();
TRACE(_T("\nRECV : %s\n"),strRet);
return strRet;
}
int CWebUtil::kp_set_backup(CString sSrcPath,CString sFlag)
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("11")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(sSrcPath) + DELIM +
kp_get_crypted_data(sFlag);
/*
strTemp.Format(_T("%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("11")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(sSrcPath),DELIM,
kp_get_crypted_data(sFlag));
*/
TRACE(_T("\nkp_set_backup : %s | %s | %s\n"),m_cpid,sSrcPath,sFlag);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_set_backup_path(CString sBackupPath)
{
CString strTemp;
strTemp.Format(_T("%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("13")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid) + DELIM +
kp_get_crypted_data(sBackupPath));
/*
strTemp.Format(_T("%s%s%s%s%s%s%s"),
kp_get_crypted_data(_T("13")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid),DELIM,
kp_get_crypted_data(sBackupPath));
*/
TRACE(_T("\nkp_set_backup_path : %s | %s | %s\n"),m_cpid,m_loginid, sBackupPath);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_chk_notice()
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("12")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid);
/*
strTemp.Format(_T("%s%s%s%s%s"),
kp_get_crypted_data(_T("12")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid));
*/
TRACE(_T("\nkp_chk_notice : %s\n"),m_cpid);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
CString CWebUtil::kp_get_backup_path()
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("14")) + DELIM +
kp_get_crypted_data(m_cpid) + DELIM +
kp_get_crypted_data(m_loginid);
/*
strTemp.Format(_T("%s%s%s%s%s"),
kp_get_crypted_data(_T("14")),DELIM,
kp_get_crypted_data(m_cpid),DELIM,
kp_get_crypted_data(m_loginid));
*/
TRACE(_T("\n kp_get_backup_path : %s | %s\n"),m_cpid,m_loginid);
strTemp = kp_get_unbase64_data(kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true));
strTemp.Trim();
return strTemp;
}
int CWebUtil::kp_sync_data()
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("15")) + DELIM + kp_get_crypted_data(m_cpid);
TRACE(_T("\n kp_sync_data : %s\n"),m_cpid);
strTemp = kp_get_unbase64_data(kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true));
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_get_sync_time()
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("16")) + DELIM + kp_get_crypted_data(m_cpid);
TRACE(_T("\n kp_get_sync_time : %s\n"),m_cpid);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),true);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_file_opt_log(PTF_LOG_STURCT ptflog_info)
{
CString strTemp;
CString str_action;
CString str_file_flag;
// if (0==ptflog_info->action) str_action="M";
// if (0==ptflog_info->file_flag) str_file_flag = "F";
strTemp = kp_get_crypted_data(_T("1")) + DELIM +
kp_get_crypted_data(ptflog_info->sp_user_id) + DELIM +
kp_get_crypted_data(ptflog_info->vol_name) + DELIM +
kp_get_crypted_data(ptflog_info->s_file) + DELIM +
kp_get_crypted_data(ptflog_info->t_file) + DELIM +
kp_get_crypted_data(CString(ptflog_info->action)) + DELIM +
kp_get_crypted_data(CString(ptflog_info->file_flag));
TRACE(_T("\n kp_get_sync_time : %s\n"),m_cpid);
strTemp = kp_recv_data_http(_T("p=") + kp_get_base64_data(strTemp),false);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
int CWebUtil::kp_send_mail(CString mail1 , CString mail2 , CString mail3 , CString file_name)
{
CString strTemp;
strTemp = kp_get_crypted_data(_T("2")) + DELIM +
kp_get_crypted_data(mail1) + DELIM +
kp_get_crypted_data(mail2) + DELIM +
kp_get_crypted_data(mail3) + DELIM +
kp_get_crypted_data(file_name);
TRACE(_T("\n kp_get_sync_time : %s\n"),m_cpid);
strTemp = _T("p=") + kp_get_base64_data(strTemp);
strTemp = kp_recv_data_http( strTemp ,false);
strTemp.Trim();
return kp_process_errors(atol(strTemp));
}
@@ -0,0 +1,150 @@
#pragma once
typedef struct {
char path[2048];
__int64 size;
char lastModified[32];
unsigned int attr;
char source[128];
int hit_today;
int hit_yesterday;
int hit_avr;
int per_success;
__int64 total_size;
__int64 used_size;
__int64 traffic;
__int64 today_traffic;
char service_status[2];
char ip[16];
char backup_path[2048];
} CLFILE_STRUCTEX, *PCLFILE_STRUCTEX;
typedef struct {
char sp_user_id[255];
char vol_name[255];
char s_file[255];
char t_file[255];
char action;
char file_flag;
} TF_LOG_STURCT, *PTF_LOG_STURCT;
#define KP_ERROR_SUCCESS 0
#define KP_ERROR_ERROR -1
#define UNDEFINED_ERROR 1000
#define NOADMIT_SET_FAIL 1001
#define NOADMIT_SET_SUCCESS 1010
#define ADMIT_SET_FAIL 1101
#define ADMIT_SET_SUCCESS 1110
#define LOGIN_FAIL_NOID 2001
#define LOGIN_FAIL_NOPASSWD 2002
#define LOGIN_FAIL_NETDRV 2003 // 2006.12.19 Ãß°¡
#define LOGIN_SUCCESS_NOCPD 2009
#define LOGIN_SUCCESS_EXCPD 2010
#define LOGIN_SUCCESS_NOCPD_ADMIN 2011
#define LOGIN_SUCCESS_EXCPD_ADMIN 2012
#define LOGIN_SUCCESS_NOCPD_SVC_ADMIN 2013 // 2006.11.30 Ãß°¡
#define LOGIN_SUCCESS_EXCPD_SVC_ADMIN 2014 // 2006.11.30 Ãß°¡
#define LOGIN_SUCCESS_NETDRV 2015 // 2006.12.19 Ãß°¡
#define CANNOT_WRITE 4001
#define NO_QUOTA 4002
#define UPLOAD_WORKING 4003
#define CAN_WRITE 4010
#define CAN_OVER_WRITE 4009
#define WRITE_WORKING 5001
#define WRITE_BEGIN 5010
#define WRITE_END 6010
#define MODIFY_WORKING 7001
#define MODIFY_BEGIN 7010
#define TARGET_FILE_EXIST 7002
#define MODIFY_END 8010
#define SET_BACKUP 1110
#define NOTICE_SHOW 1210
#define NOTICE_HIDE 1209
#define SYNC_SUCCESS 1510 // 2006.12.19 Ãß°¡
#define DELIM "!"
#define FILE_TYPE_D "D"
#define FILE_TYPE_F "F"
#define KPOST_WEBIP _T("www.ktsystemhosting.com")
#define KPOST_WEBREF _T("/sp/getlogs/modules/")
#define _HTTP_PORT 8080
//#define KPOST_WEBREF "modules/test.php"
static TCHAR *modify_types[] = {_T("R"), //Rename
_T("D"), //Delete
_T("M"), //Move
_T("C"), //Copy
_T("A") //Append
};
class CWebUtil
{
public:
static enum MODIFY_TYPE {
MOD_RENAME,
MOD_DELETE,
MOD_MOVE,
MOD_COPY,
MOD_APPEND,
MOD_UNKNOWN
};
public:
CWebUtil();
virtual ~CWebUtil();
PCLFILE_STRUCTEX kp_get_file_list(
const char *path, // Path
unsigned int depth, // 0 : itself
// 1 : 1 depth children
// 2 : all children
unsigned int *count); // File count
void kp_free_file_list(
PCLFILE_STRUCTEX pclf); // File list pointer
int kp_init(CString cp_id,CString cp_user_id, CString pass);
int kp_set_annoy(CString sPath,BOOL bSet);
int kp_chk_login(BOOL bisNetdrive = FALSE);
int kp_chk_upload(CString sPath,CString sFileName,LARGE_INTEGER nSize,BOOL bDir);
int kp_set_start_upload(CString sPath, CString sFileName, LARGE_INTEGER nSize,BOOL bIsDir, BOOL bOverWrite);
int kp_set_end_upload(CString sPath, CString sFileName, LARGE_INTEGER nSize,BOOL bSuccess);
int kp_set_start_modify(CString sSPath, CString sSFileName, LARGE_INTEGER nSSize,
CString sDPath, CString sDFileName, LARGE_INTEGER nDSize, MODIFY_TYPE Type);
int kp_set_end_modify(CString sSPath, CString sSFileName, LARGE_INTEGER nSSize,
CString sDPath, CString sDFileName, LARGE_INTEGER nDSize, MODIFY_TYPE Type);
int kp_set_backup(CString sSrcPath,CString sFlag);
int kp_set_backup_path(CString sBackupPath);
CString kp_get_backup_path();
int kp_chk_notice();
int kp_sync_data();
int kp_get_sync_time();
private:
CString m_cpid;
CString m_loginid;
CString m_pass;
CString kp_get_encoded_data(CString strData);
CString kp_get_decoded_data(CString strData);
CString kp_get_base64_data(CString strData);
CString kp_get_unbase64_data(CString strData);
CString kp_get_crypted_data(CString strData);
CString kp_recv_data_http(CString strParam,BOOL bssl);
PCLFILE_STRUCTEX kp_parse_file_list_struct(CString sData,unsigned int *count);
int kp_process_errors(int nError,MODIFY_TYPE Type = MOD_UNKNOWN);
public:
int kp_file_opt_log(PTF_LOG_STURCT);
int kp_send_mail(CString , CString , CString , CString );
};
@@ -0,0 +1,207 @@
BODY
{
BACKGROUND-COLOR: white;
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 100%;
MARGIN-LEFT: 0px;
MARGIN-TOP: 0px
}
P
{
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 70%;
LINE-HEIGHT: 12pt;
MARGIN-BOTTOM: 0px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 10px
}
.note
{
BACKGROUND-COLOR: #ffffff;
COLOR: #336699;
FONT-FAMILY: "Verdana", sans-serif;
FONT-SIZE: 100%;
MARGIN-BOTTOM: 0px;
MARGIN-LEFT: 0px;
MARGIN-TOP: 0px;
PADDING-RIGHT: 10px
}
.infotable
{
BACKGROUND-COLOR: #f0f0e0;
BORDER-BOTTOM: #ffffff 0px solid;
BORDER-COLLAPSE: collapse;
BORDER-LEFT: #ffffff 0px solid;
BORDER-RIGHT: #ffffff 0px solid;
BORDER-TOP: #ffffff 0px solid;
FONT-SIZE: 70%;
MARGIN-LEFT: 10px
}
.issuetable
{
BACKGROUND-COLOR: #ffffe8;
BORDER-COLLAPSE: collapse;
COLOR: #000000;
FONT-SIZE: 100%;
MARGIN-BOTTOM: 10px;
MARGIN-LEFT: 13px;
MARGIN-TOP: 0px
}
.issuetitle
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px;
COLOR: #003366;
FONT-WEIGHT: normal
}
.header
{
BACKGROUND-COLOR: #cecf9c;
BORDER-BOTTOM: #ffffff 1px solid;
BORDER-LEFT: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-TOP: #ffffff 1px solid;
COLOR: #000000;
FONT-WEIGHT: bold
}
.issuehdr
{
BACKGROUND-COLOR: #E0EBF5;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px solid;
COLOR: #000000;
FONT-WEIGHT: normal
}
.issuenone
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: 0px;
BORDER-LEFT: 0px;
BORDER-RIGHT: 0px;
BORDER-TOP: 0px;
COLOR: #000000;
FONT-WEIGHT: normal
}
.content
{
BACKGROUND-COLOR: #e7e7ce;
BORDER-BOTTOM: #ffffff 1px solid;
BORDER-LEFT: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-TOP: #ffffff 1px solid;
PADDING-LEFT: 3px
}
.issuecontent
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #dcdcdc 1px solid;
BORDER-TOP: #dcdcdc 1px solid;
PADDING-LEFT: 3px
}
A:link
{
COLOR: #cc6633;
TEXT-DECORATION: underline
}
A:visited
{
COLOR: #cc6633;
}
A:active
{
COLOR: #cc6633;
}
A:hover
{
COLOR: #cc3300;
TEXT-DECORATION: underline
}
H1
{
BACKGROUND-COLOR: #003366;
BORDER-BOTTOM: #336699 6px solid;
COLOR: #ffffff;
FONT-SIZE: 130%;
FONT-WEIGHT: normal;
MARGIN: 0em 0em 0em -20px;
PADDING-BOTTOM: 8px;
PADDING-LEFT: 30px;
PADDING-TOP: 16px
}
H2
{
COLOR: #000000;
FONT-SIZE: 80%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: 3px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 20px;
PADDING-LEFT: 0px
}
H3
{
COLOR: #000000;
FONT-SIZE: 80%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: -5px;
MARGIN-LEFT: 10px;
MARGIN-TOP: 20px
}
H4
{
COLOR: #000000;
FONT-SIZE: 70%;
FONT-WEIGHT: bold;
MARGIN-BOTTOM: 0px;
MARGIN-TOP: 15px;
PADDING-BOTTOM: 0px
}
UL
{
COLOR: #000000;
FONT-SIZE: 70%;
LIST-STYLE: square;
MARGIN-BOTTOM: 0pt;
MARGIN-TOP: 0pt
}
OL
{
COLOR: #000000;
FONT-SIZE: 70%;
LIST-STYLE: square;
MARGIN-BOTTOM: 0pt;
MARGIN-TOP: 0pt
}
LI
{
LIST-STYLE: square;
MARGIN-LEFT: 0px
}
.expandable
{
CURSOR: hand
}
.expanded
{
color: black
}
.collapsed
{
DISPLAY: none
}
.foot
{
BACKGROUND-COLOR: #ffffff;
BORDER-BOTTOM: #cecf9c 1px solid;
BORDER-TOP: #cecf9c 2px solid
}
.settings
{
MARGIN-LEFT: 25PX;
}
.help
{
TEXT-ALIGN: right;
margin-right: 10px;
}
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:key name="ProjectKey" match="Event" use="@Project"/>
<xsl:template match="Events" mode="createProjects">
<projects>
<xsl:for-each select="Event">
<!--xsl:sort select="@Project" order="descending"/-->
<xsl:if test="(1=position()) or (preceding-sibling::*[1]/@Project != @Project)">
<xsl:variable name="ProjectName" select="@Project"/>
<project>
<xsl:attribute name="name">
<xsl:value-of select="@Project"/>
</xsl:attribute>
<xsl:if test="@Project=''">
<xsl:attribute name="solution">
<xsl:value-of select="@Solution"/>
</xsl:attribute>
</xsl:if>
<xsl:for-each select="key('ProjectKey', $ProjectName)">
<!--xsl:sort select="@Source" /-->
<xsl:if test="(1=position()) or (preceding-sibling::*[1]/@Source != @Source)">
<source>
<xsl:attribute name="name">
<xsl:value-of select="@Source"/>
</xsl:attribute>
<xsl:variable name="Source">
<xsl:value-of select="@Source"/>
</xsl:variable>
<xsl:for-each select="key('ProjectKey', $ProjectName)[ @Source = $Source ]">
<event>
<xsl:attribute name="error-level">
<xsl:value-of select="@ErrorLevel"/>
</xsl:attribute>
<xsl:attribute name="description">
<xsl:value-of select="@Description"/>
</xsl:attribute>
</event>
</xsl:for-each>
</source>
</xsl:if>
</xsl:for-each>
</project>
</xsl:if>
</xsl:for-each>
</projects>
</xsl:template>
<xsl:template match="projects">
<xsl:for-each select="project">
<xsl:sort select="@Name" order="ascending"/>
<h2>
<xsl:if test="@solution">솔루션: <xsl:value-of select="@solution"/></xsl:if>
<xsl:if test="not(@solution)">프로젝트: <xsl:value-of select="@name"/>
<xsl:for-each select="source">
<xsl:variable name="Hyperlink" select="@name"/>
<xsl:for-each select="event[@error-level='4']">
<A class="note"><xsl:attribute name="HREF"><xsl:value-of select="$Hyperlink"/></xsl:attribute><xsl:value-of select="@description"/></A>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
</h2>
<table cellpadding="2" cellspacing="0" width="98%" border="1" bordercolor="white" class="infotable">
<tr>
<td nowrap="1" class="header" _locID="Filename">파일 이름</td>
<td nowrap="1" class="header" _locID="Status">상태</td>
<td nowrap="1" class="header" _locID="Errors">오류</td>
<td nowrap="1" class="header" _locID="Warnings">경고</td>
</tr>
<xsl:for-each select="source">
<xsl:sort select="@name" order="ascending"/>
<xsl:variable name="source-id" select="generate-id(.)"/>
<xsl:if test="count(event)!=count(event[@error-level='4'])">
<tr class="row">
<td class="content">
<A HREF="javascript:"><xsl:attribute name="onClick">javascript:document.images['<xsl:value-of select="$source-id"/>'].click()</xsl:attribute><IMG border="0" alt="expand/collapse section" class="expandable" height="11" onclick="changepic()" src="_UpgradeReport_Files/UpgradeReport_Plus.gif" width="9"><xsl:attribute name="name"><xsl:value-of select="$source-id"/></xsl:attribute><xsl:attribute name="child">src<xsl:value-of select="$source-id"/></xsl:attribute></IMG></A> <xsl:value-of select="@name"/>
</td>
<td class="content">
<xsl:if test="count(event[@error-level='3'])=1">
<xsl:for-each select="event[@error-level='3']">
<xsl:if test="@description='Converted'">변환됨</xsl:if>
<xsl:if test="@description!='Converted'"><xsl:value-of select="@description"/></xsl:if>
</xsl:for-each>
</xsl:if>
<xsl:if test="count(event[@error-level='3'])!=1 and count(event[@error-level='3' and @description='Converted'])!=0">변환됨
</xsl:if>
</td>
<td class="content"><xsl:value-of select="count(event[@error-level='2'])"/></td>
<td class="content"><xsl:value-of select="count(event[@error-level='1'])"/></td>
</tr>
<tr class="collapsed" bgcolor="#ffffff">
<xsl:attribute name="id">src<xsl:value-of select="$source-id"/></xsl:attribute>
<td colspan="7">
<table width="97%" border="1" bordercolor="#dcdcdc" rules="cols" class="issuetable">
<tr>
<td colspan="7" class="issuetitle" _locID="ConversionIssues">변환 문제점 - <xsl:value-of select="@name"/>:</td>
</tr>
<xsl:for-each select="event[@error-level!='3']">
<xsl:if test="@error-level!='4'">
<tr>
<td class="issuenone" style="border-bottom:solid 1 lightgray">
<xsl:value-of select="@description"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</td>
</tr>
</xsl:if>
</xsl:for-each>
<tr valign="top">
<td class="foot">
<xsl:if test="count(source)!=1">
<xsl:value-of select="count(source)"/> 파일
</xsl:if>
<xsl:if test="count(source)=1">
1 파일
</xsl:if>
</td>
<td class="foot">
변환됨: <xsl:value-of select="count(source/event[@error-level='3' and @description='Converted'])"/><BR/>
변환되지 않음 <xsl:value-of select="count(source) - count(source/event[@error-level='3' and @description='Converted'])"/>
</td>
<td class="foot"><xsl:value-of select="count(source/event[@error-level='2'])"/></td>
<td class="foot"><xsl:value-of select="count(source/event[@error-level='1'])"/></td>
</tr>
</table>
</xsl:for-each>
</xsl:template>
<xsl:template match="Property">
<xsl:if test="@Name!='Date' and @Name!='Time' and @Name!='LogNumber' and @Name!='Solution'">
<tr><td nowrap="1"><b><xsl:value-of select="@Name"/>: </b><xsl:value-of select="@Value"/></td></tr>
</xsl:if>
</xsl:template>
<xsl:template match="UpgradeLog">
<html>
<head>
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="_UpgradeReport_Files\UpgradeReport.css"/>
<title>변환 보고서
<xsl:if test="Properties/Property[@Name='LogNumber']">
<xsl:value-of select="Properties/Property[@Name='LogNumber']/@Value"/>
</xsl:if>
</title>
<script language="javascript">
function outliner () {
oMe = window.event.srcElement
//get child element
var child = document.all[event.srcElement.getAttribute("child",false)];
//if child element exists, expand or collapse it.
if (null != child)
child.className = child.className == "collapsed" ? "expanded" : "collapsed";
}
function changepic() {
uMe = window.event.srcElement;
var check = uMe.src.toLowerCase();
if (check.lastIndexOf("upgradereport_plus.gif") != -1)
{
uMe.src = "_UpgradeReport_Files/UpgradeReport_Minus.gif"
}
else
{
uMe.src = "_UpgradeReport_Files/UpgradeReport_Plus.gif"
}
}
</script>
</head>
<body topmargin="0" leftmargin="0" rightmargin="0" onclick="outliner();">
<h1 _locID="ConversionReport">변환 보고서 - <xsl:value-of select="Properties/Property[@Name='Solution']/@Value"/></h1>
<p><span class="note">
<b>변환 시간:</b> <xsl:value-of select="Properties/Property[@Name='Date']/@Value"/> <xsl:value-of select="Properties/Property[@Name='Time']/@Value"/><br/>
</span></p>
<xsl:variable name="SortedEvents">
<Events>
<xsl:for-each select="Event">
<xsl:sort select="@Project" order="ascending"/>
<xsl:sort select="@Source" order="ascending"/>
<xsl:sort select="@ErrorLevel" order="ascending"/>
<Event>
<xsl:attribute name="Project"><xsl:value-of select="@Project"/> </xsl:attribute>
<xsl:attribute name="Solution"><xsl:value-of select="/UpgradeLog/Properties/Property[@Name='Solution']/@Value"/> </xsl:attribute>
<xsl:attribute name="Source"><xsl:value-of select="@Source"/> </xsl:attribute>
<xsl:attribute name="ErrorLevel"><xsl:value-of select="@ErrorLevel"/> </xsl:attribute>
<xsl:attribute name="Description"><xsl:value-of select="@Description"/> </xsl:attribute>
</Event>
</xsl:for-each>
</Events>
</xsl:variable>
<xsl:variable name="Projects">
<xsl:apply-templates select="msxsl:node-set($SortedEvents)/*" mode="createProjects"/>
</xsl:variable>
<xsl:apply-templates select="msxsl:node-set($Projects)/*"/>
<p></p><p>
<table class="note">
<tr>
<td nowrap="1">
<b>변환 설정</b>
</td>
</tr>
<xsl:apply-templates select="Properties"/>
</table></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

@@ -0,0 +1,19 @@
// 컴퓨터에서 Microsoft Visual C++를 사용하여 생성한 IDispatch 래퍼 클래스입니다.
// 참고: 이 파일의 내용을 수정하지 마십시오. Microsoft Visual C++에서
// 이 클래스를 다시 생성할 때 수정한 내용을 덮어씁니다.
#include "stdafx.h"
#include "explorer1.h"
/////////////////////////////////////////////////////////////////////////////
// CExplorer1
IMPLEMENT_DYNCREATE(CExplorer1, CWnd)
/////////////////////////////////////////////////////////////////////////////
// CExplorer1 속성입니다.
/////////////////////////////////////////////////////////////////////////////
// CExplorer1 작업입니다.
@@ -0,0 +1,516 @@
#pragma once
// 컴퓨터에서 Microsoft Visual C++를 사용하여 생성한 IDispatch 래퍼 클래스입니다.
// 참고: 이 파일의 내용을 수정하지 마십시오. Microsoft Visual C++에서
// 이 클래스를 다시 생성할 때 수정한 내용을 덮어씁니다.
/////////////////////////////////////////////////////////////////////////////
// CExplorer1 래퍼 클래스입니다.
class CExplorer1 : public CWnd
{
protected:
DECLARE_DYNCREATE(CExplorer1)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x8856F961, 0x340A, 0x11D0, { 0xA9, 0x6B, 0x0, 0xC0, 0x4F, 0xD7, 0x5, 0xA2 } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
UINT nID, CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey);
}
// 특성
public:
enum
{
CSC_UPDATECOMMANDS = -1,
CSC_NAVIGATEFORWARD = 1,
CSC_NAVIGATEBACK = 2
}CommandStateChangeConstants;
enum
{
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20,
OLECMDID_UPDATECOMMANDS = 21,
OLECMDID_REFRESH = 22,
OLECMDID_STOP = 23,
OLECMDID_HIDETOOLBARS = 24,
OLECMDID_SETPROGRESSMAX = 25,
OLECMDID_SETPROGRESSPOS = 26,
OLECMDID_SETPROGRESSTEXT = 27,
OLECMDID_SETTITLE = 28,
OLECMDID_SETDOWNLOADSTATE = 29,
OLECMDID_STOPDOWNLOAD = 30,
OLECMDID_ONTOOLBARACTIVATED = 31,
OLECMDID_FIND = 32,
OLECMDID_DELETE = 33,
OLECMDID_HTTPEQUIV = 34,
OLECMDID_HTTPEQUIV_DONE = 35,
OLECMDID_ENABLE_INTERACTION = 36,
OLECMDID_ONUNLOAD = 37,
OLECMDID_PROPERTYBAG2 = 38,
OLECMDID_PREREFRESH = 39,
OLECMDID_SHOWSCRIPTERROR = 40,
OLECMDID_SHOWMESSAGE = 41,
OLECMDID_SHOWFIND = 42,
OLECMDID_SHOWPAGESETUP = 43,
OLECMDID_SHOWPRINT = 44,
OLECMDID_CLOSE = 45,
OLECMDID_ALLOWUILESSSAVEAS = 46,
OLECMDID_DONTDOWNLOADCSS = 47,
OLECMDID_UPDATEPAGESTATUS = 48,
OLECMDID_PRINT2 = 49,
OLECMDID_PRINTPREVIEW2 = 50,
OLECMDID_SETPRINTTEMPLATE = 51,
OLECMDID_GETPRINTTEMPLATE = 52,
OLECMDID_PAGEACTIONBLOCKED = 55,
OLECMDID_PAGEACTIONUIQUERY = 56,
OLECMDID_FOCUSVIEWCONTROLS = 57,
OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
OLECMDID_SHOWPAGEACTIONMENU = 59
}OLECMDID;
enum
{
OLECMDF_SUPPORTED = 1,
OLECMDF_ENABLED = 2,
OLECMDF_LATCHED = 4,
OLECMDF_NINCHED = 8,
OLECMDF_INVISIBLE = 16,
OLECMDF_DEFHIDEONCTXTMENU = 32
}OLECMDF;
enum
{
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
OLECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
}OLECMDEXECOPT;
enum
{
READYSTATE_UNINITIALIZED = 0,
READYSTATE_LOADING = 1,
READYSTATE_LOADED = 2,
READYSTATE_INTERACTIVE = 3,
READYSTATE_COMPLETE = 4
}tagREADYSTATE;
enum
{
secureLockIconUnsecure = 0,
secureLockIconMixed = 1,
secureLockIconSecureUnknownBits = 2,
secureLockIconSecure40Bit = 3,
secureLockIconSecure56Bit = 4,
secureLockIconSecureFortezza = 5,
secureLockIconSecure128Bit = 6
}SecureLockIconConstants;
enum
{
SWC_EXPLORER = 0,
SWC_BROWSER = 1,
SWC_3RDPARTY = 2,
SWC_CALLBACK = 4
}ShellWindowTypeConstants;
enum
{
SWFO_NEEDDISPATCH = 1,
SWFO_INCLUDEPENDING = 2,
SWFO_COOKIEPASSED = 4
}ShellWindowFindWindowOptions;
// 작업
public:
// IWebBrowser2
// Functions
//
void GoBack()
{
InvokeHelper(0x64, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void GoForward()
{
InvokeHelper(0x65, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void GoHome()
{
InvokeHelper(0x66, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void GoSearch()
{
InvokeHelper(0x67, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void Navigate(LPCTSTR URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{
static BYTE parms[] = VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, NULL, parms, URL, Flags, TargetFrameName, PostData, Headers);
}
void Refresh()
{
InvokeHelper(DISPID_REFRESH, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void Refresh2(VARIANT * Level)
{
static BYTE parms[] = VTS_PVARIANT ;
InvokeHelper(0x69, DISPATCH_METHOD, VT_EMPTY, NULL, parms, Level);
}
void Stop()
{
InvokeHelper(0x6a, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
LPDISPATCH get_Application()
{
LPDISPATCH result;
InvokeHelper(0xc8, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_Parent()
{
LPDISPATCH result;
InvokeHelper(0xc9, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_Container()
{
LPDISPATCH result;
InvokeHelper(0xca, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
LPDISPATCH get_Document()
{
LPDISPATCH result;
InvokeHelper(0xcb, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&result, NULL);
return result;
}
BOOL get_TopLevelContainer()
{
BOOL result;
InvokeHelper(0xcc, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
CString get_Type()
{
CString result;
InvokeHelper(0xcd, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
long get_Left()
{
long result;
InvokeHelper(0xce, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void put_Left(long newValue)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0xce, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
long get_Top()
{
long result;
InvokeHelper(0xcf, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void put_Top(long newValue)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0xcf, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
long get_Width()
{
long result;
InvokeHelper(0xd0, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void put_Width(long newValue)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0xd0, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
long get_Height()
{
long result;
InvokeHelper(0xd1, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void put_Height(long newValue)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0xd1, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
CString get_LocationName()
{
CString result;
InvokeHelper(0xd2, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
CString get_LocationURL()
{
CString result;
InvokeHelper(0xd3, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
BOOL get_Busy()
{
BOOL result;
InvokeHelper(0xd4, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void Quit()
{
InvokeHelper(0x12c, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
void ClientToWindow(long * pcx, long * pcy)
{
static BYTE parms[] = VTS_PI4 VTS_PI4 ;
InvokeHelper(0x12d, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pcx, pcy);
}
void PutProperty(LPCTSTR Property, VARIANT vtValue)
{
static BYTE parms[] = VTS_BSTR VTS_VARIANT ;
InvokeHelper(0x12e, DISPATCH_METHOD, VT_EMPTY, NULL, parms, Property, &vtValue);
}
VARIANT GetProperty(LPCTSTR Property)
{
VARIANT result;
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x12f, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms, Property);
return result;
}
CString get_Name()
{
CString result;
InvokeHelper(0x0, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
long get_HWND()
{
long result;
InvokeHelper(DISPID_HWND, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
CString get_FullName()
{
CString result;
InvokeHelper(0x190, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
CString get_Path()
{
CString result;
InvokeHelper(0x191, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
BOOL get_Visible()
{
BOOL result;
InvokeHelper(0x192, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_Visible(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x192, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_StatusBar()
{
BOOL result;
InvokeHelper(0x193, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_StatusBar(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x193, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
CString get_StatusText()
{
CString result;
InvokeHelper(0x194, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}
void put_StatusText(LPCTSTR newValue)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0x194, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
long get_ToolBar()
{
long result;
InvokeHelper(0x195, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
void put_ToolBar(long newValue)
{
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x195, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_MenuBar()
{
BOOL result;
InvokeHelper(0x196, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_MenuBar(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x196, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_FullScreen()
{
BOOL result;
InvokeHelper(0x197, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_FullScreen(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x197, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
void Navigate2(VARIANT * URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{
static BYTE parms[] = VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
InvokeHelper(0x1f4, DISPATCH_METHOD, VT_EMPTY, NULL, parms, URL, Flags, TargetFrameName, PostData, Headers);
}
long QueryStatusWB(long cmdID)
{
long result;
static BYTE parms[] = VTS_I4 ;
InvokeHelper(0x1f5, DISPATCH_METHOD, VT_I4, (void*)&result, parms, cmdID);
return result;
}
void ExecWB(long cmdID, long cmdexecopt, VARIANT * pvaIn, VARIANT * pvaOut)
{
static BYTE parms[] = VTS_I4 VTS_I4 VTS_PVARIANT VTS_PVARIANT ;
InvokeHelper(0x1f6, DISPATCH_METHOD, VT_EMPTY, NULL, parms, cmdID, cmdexecopt, pvaIn, pvaOut);
}
void ShowBrowserBar(VARIANT * pvaClsid, VARIANT * pvarShow, VARIANT * pvarSize)
{
static BYTE parms[] = VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
InvokeHelper(0x1f7, DISPATCH_METHOD, VT_EMPTY, NULL, parms, pvaClsid, pvarShow, pvarSize);
}
long get_ReadyState()
{
long result;
InvokeHelper(DISPID_READYSTATE, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL);
return result;
}
BOOL get_Offline()
{
BOOL result;
InvokeHelper(0x226, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_Offline(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x226, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_Silent()
{
BOOL result;
InvokeHelper(0x227, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_Silent(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x227, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_RegisterAsBrowser()
{
BOOL result;
InvokeHelper(0x228, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_RegisterAsBrowser(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x228, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_RegisterAsDropTarget()
{
BOOL result;
InvokeHelper(0x229, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_RegisterAsDropTarget(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x229, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_TheaterMode()
{
BOOL result;
InvokeHelper(0x22a, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_TheaterMode(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x22a, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_AddressBar()
{
BOOL result;
InvokeHelper(0x22b, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_AddressBar(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x22b, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
BOOL get_Resizable()
{
BOOL result;
InvokeHelper(0x22c, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&result, NULL);
return result;
}
void put_Resizable(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL ;
InvokeHelper(0x22c, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
// Properties
//
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 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,21 @@
//
// SPConsole.RC2 - resources Microsoft Visual C++에서 직접 편집하지 않는 리소스
//
#ifdef APSTUDIO_INVOKED
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// 여기에 수동으로 편집한 리소스를 추가합니다.
#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: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 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: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Some files were not shown because too many files have changed in this diff Show More