Initial commit: ROW Client source code

Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 16:24:34 +09:00
commit e067522598
5135 changed files with 1745744 additions and 0 deletions

View File

@@ -0,0 +1,446 @@
// SettingOptionPage.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
//
#include "stdafx.h"
#include "PatchMaker.h"
#include "SettingOptionPage.h"
#include "UtilityFunc.h"
#include "PMSettingConstant.h"
#include ".\settingoptionpage.h"
// CSettingOptionPage <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
IMPLEMENT_DYNAMIC(CSettingOptionPage, CPropertyPage)
CSettingOptionPage::CSettingOptionPage(CPMSetting& pmSetting, CPropertySheet& ownerSheet)
: CPropertyPage(CSettingOptionPage::IDD)
, m_dwManualPatchMinVer(100)
, m_OwnerSheet(ownerSheet)
, m_pmSettingOption(pmSetting)
{
}
CSettingOptionPage::~CSettingOptionPage()
{
}
void CSettingOptionPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CB_OPT_PATCH_TYPE, m_cbPatchType);
DDX_Control(pDX, IDC_ED_OPT_OLD_PKG, m_edOldPkgPos);
DDX_Control(pDX, IDC_ED_OPT_NEW_CLIENT, m_edNewClientPos);
DDX_Control(pDX, IDC_ED_OPT_NEW_PKG, m_edNewPkgPos);
DDX_Control(pDX, IDC_ED_OPT_MAX_PKG, m_edMaxPkgSize);
DDX_Control(pDX, IDC_CB_OPT_OLD_PKG_POS, m_cbPkgPos);
DDX_Control(pDX, IDC_ED_OPT_FTP_ADDR, m_edFTPAddr);
DDX_Control(pDX, IDC_ED_OPT_FTP_PORT, m_edFTPPort);
DDX_Control(pDX, IDC_CK_OPT_FTP_PASSIVE, m_bFTPPassive);
DDX_Control(pDX, IDC_ED_OPT_MANUAL_PATCH_FILE, m_edManualPatchFolder);
DDX_Control(pDX, IDC_ED_OPT_MANUAL_SFX_FILE, m_edManualPatchSFXFile);
DDX_Control(pDX, IDC_ED_OPT_MANUAL_MIN_VER, m_edManualPatchMinVer);
DDX_Text(pDX, IDC_ED_OPT_MANUAL_MIN_VER, m_dwManualPatchMinVer);
DDV_MinMaxUInt(pDX, m_dwManualPatchMinVer, 100, 10000);
}
BEGIN_MESSAGE_MAP(CSettingOptionPage, CPropertyPage)
ON_BN_CLICKED(IDC_BTN_OPT_OLD_PKG, OnBnClickedBtnOptOldPkg)
ON_BN_CLICKED(IDC_BTN_OPT_NEW_CLIENT, OnBnClickedBtnOptNewClient)
ON_BN_CLICKED(IDC_BTN_OPT_NEW_PKG, OnBnClickedBtnOptNewPkg)
ON_BN_CLICKED(IDC_BTN_OPT_MANUAL_PATCH_FILE, OnBnClickedBtnOptManualPatchFile)
ON_BN_CLICKED(IDC_BTN_OPT_MANUAL_SFX_FILE, OnBnClickedBtnOptManualSfxFile)
ON_BN_CLICKED(ID_SAVE_SETUP, OnBnClickedSaveSetup)
ON_BN_CLICKED(ID_LOAD_SETUP, OnBnClickedLoadSetup)
ON_REGISTERED_MESSAGE(PMConst::AP_SETTING_ENABLE, OnEnableAutoPatchOption)
ON_REGISTERED_MESSAGE(PMConst::AP_SETTING_DISABLE, OnDisableAutoPatchOption)
ON_REGISTERED_MESSAGE(PMConst::MP_SETTING_ENABLE, OnEnableManualPatchOption)
ON_REGISTERED_MESSAGE(PMConst::MP_SETTING_DISABLE, OnDisableManualPatchOption)
ON_CBN_SELCHANGE(IDC_CB_OPT_OLD_PKG_POS, OnCbnSelchangeCbOptOldPkgPos)
ON_WM_DESTROY()
END_MESSAGE_MAP()
// CSettingOptionPage <20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
inline int AddCBString(CComboBox& combo, CString& tempString, int nIndex, UINT nID)
{
tempString.LoadString(nID);
return combo.InsertString(nIndex, tempString);
}
BOOL CSettingOptionPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: <20><><EFBFBD><20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CString szTmp;
m_cbPatchType.InsertString(0, PMConst::PatchType_Part1);
m_cbPatchType.InsertString(1, PMConst::PatchType_BattleLohan);
m_cbPatchType.InsertString(2, PMConst::PatchType_Part2);
m_cbPatchType.InsertString(3, PMConst::PatchType_Part2Test);
m_cbPatchType.InsertString(4, PMConst::PatchType_Part2Malay);
AddCBString(m_cbPkgPos, szTmp, 0, IDS_CB_FTP);
AddCBString(m_cbPkgPos, szTmp, 1, IDS_CB_LOCAL);
OnCbnSelchangeCbOptOldPkgPos();
return TRUE; // return TRUE unless you set the focus to a control
// <20><><EFBFBD><EFBFBD>: OCX <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FALSE<53><45> <20><>ȯ<EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
}
void CSettingOptionPage::OnBnClickedBtnOptOldPkg()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PMUtil::BrowseForFolder(GetSafeHwnd(),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"), m_edOldPkgPos);
}
void CSettingOptionPage::OnBnClickedBtnOptNewClient()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PMUtil::BrowseForFolder(GetSafeHwnd(),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"), m_edNewClientPos);
}
void CSettingOptionPage::OnBnClickedBtnOptNewPkg()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PMUtil::BrowseForFolder(GetSafeHwnd(),
_T("<EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"), m_edNewPkgPos);
}
void CSettingOptionPage::OnBnClickedBtnOptManualPatchFile()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PMUtil::BrowseForFolder(GetSafeHwnd(),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"), m_edManualPatchFolder);
}
void CSettingOptionPage::OnBnClickedBtnOptManualSfxFile()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CString szFileName;
if (PMUtil::BrowseForExisingFile(this->GetSafeHwnd(),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ SFX<46><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>"), "SFX File\0*.exe", szFileName))
{
m_edManualPatchSFXFile.SetWindowText(szFileName);
}
}
void CSettingOptionPage::OnBnClickedSaveSetup()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
UpdateSetupData(TRUE);
if (!m_pmSettingOption.SaveSetting())
{
MessageBox(_T("<EFBFBD>¾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"), MB_OK | MB_ICONEXCLAMATION);
}
}
void CSettingOptionPage::OnBnClickedLoadSetup()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if (m_pmSettingOption.LoadSetting())
{
UpdateSetupData(FALSE);
OnCbnSelchangeCbOptOldPkgPos();
}
else
{
MessageBox(_T("<EFBFBD>¾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>"),
_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"), MB_OK | MB_ICONEXCLAMATION);
}
}
void SetCBSel(CComboBox& cb, CString& szValue, int nDefaultSel = 0)
{
CString szCBValue;
int nMaxCount = cb.GetCount();
for (int nCount = 0; nCount < nMaxCount; ++nCount)
{
cb.GetLBText(nCount, szCBValue);
if (0 == szValue.CompareNoCase(szCBValue))
{
cb.SetCurSel(nCount);
break;
}
}
if (nCount == nMaxCount)
{
// ã<>ƺ<EFBFBD><C6BA><EFBFBD> <20>´<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
cb.SetCurSel(nDefaultSel);
}
}
void CSettingOptionPage::UpdateSetupData(bool bSaveAndValidate)
{
CString szValue;
struct KeyValuePair
{
LPCTSTR m_szKey;
CEdit& m_edValue;
};
KeyValuePair keyValueData[] =
{
{ PMConst::AP_OldPkg, m_edOldPkgPos },
{ PMConst::AP_NewClient, m_edNewClientPos },
{ PMConst::AP_NewPkg, m_edNewPkgPos },
{ PMConst::AP_MaxPkg, m_edMaxPkgSize },
{ PMConst::AP_FTPAddr, m_edFTPAddr },
{ PMConst::AP_FTPPort, m_edFTPPort },
{ PMConst::MP_Folder, m_edManualPatchFolder },
{ PMConst::MP_SFXFile, m_edManualPatchSFXFile }
};
const int nMaxData = sizeof(keyValueData) / sizeof(KeyValuePair);
if (!bSaveAndValidate)
{
// <20>¾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><>Ʈ<EFBFBD>ѷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
for (int nCount = 0; nCount < nMaxData; ++nCount)
{
m_pmSettingOption.GetSettingData(keyValueData[nCount].m_szKey, szValue);
keyValueData[nCount].m_edValue.SetWindowText(szValue);
}
m_pmSettingOption.GetSettingData(PMConst::PatchType, szValue);
SetCBSel(m_cbPatchType, szValue);
m_pmSettingOption.GetSettingData(PMConst::AP_PkgPosType, szValue);
SetCBSel(m_cbPkgPos, szValue);
m_pmSettingOption.GetSettingData(PMConst::AP_FTPPassive, szValue);
m_bFTPPassive.SetCheck(0 == szValue.CompareNoCase(_T("TRUE")) ? BST_CHECKED : BST_UNCHECKED);
m_pmSettingOption.GetSettingData(PMConst::MP_MinVer, szValue);
long nVersion = atol(szValue);
if (nVersion < 100) { nVersion = 100; }
m_dwManualPatchMinVer = nVersion;
// <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> ȭ<><20>ݿ<EFBFBD><DDBF>Ѵ<EFBFBD>.
UpdateData(FALSE);
}
else
{
// ȭ<><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
UpdateData(TRUE);
// <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20>¾<EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
for (int nCount = 0; nCount < nMaxData; ++nCount)
{
keyValueData[nCount].m_edValue.GetWindowText(szValue);
m_pmSettingOption.SetSettingData(keyValueData[nCount].m_szKey, szValue);
}
int nCurSel = m_cbPatchType.GetCurSel();
if (CB_ERR != nCurSel)
{
m_cbPatchType.GetLBText(nCurSel, szValue);
m_pmSettingOption.SetSettingData(PMConst::PatchType, szValue);
}
nCurSel = m_cbPkgPos.GetCurSel();
if (CB_ERR != nCurSel)
{
m_cbPkgPos.GetLBText(nCurSel, szValue);
m_pmSettingOption.SetSettingData(PMConst::AP_PkgPosType, szValue);
}
m_pmSettingOption.SetSettingData(PMConst::AP_FTPPassive,
BST_CHECKED == m_bFTPPassive.GetCheck() ? _T("TRUE") : _T("FALSE"));
szValue.Format("%u", m_dwManualPatchMinVer);
m_pmSettingOption.SetSettingData(PMConst::MP_MinVer, szValue);
}
}
bool CSettingOptionPage::IsEmptyOption()
{
if (CB_ERR == m_cbPatchType.GetCurSel() ||
0 == m_edOldPkgPos.GetWindowTextLength() ||
0 == m_edNewClientPos.GetWindowTextLength() ||
0 == m_edNewPkgPos.GetWindowTextLength() ||
0 == m_edMaxPkgSize.GetWindowTextLength() ||
CB_ERR == m_cbPkgPos.GetCurSel() ||
0 == m_edManualPatchFolder.GetWindowTextLength() ||
0 == m_edManualPatchSFXFile.GetWindowTextLength() ||
m_dwManualPatchMinVer < 100 ||
10000 < m_dwManualPatchMinVer)
{
// <20><> <20>׸<EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
return true;
}
CString szPkgPos, szFTPPos((LPCTSTR)IDS_CB_FTP);
m_cbPkgPos.GetLBText(m_cbPkgPos.GetCurSel(), szPkgPos);
if (0 == szPkgPos.CompareNoCase(szFTPPos) &&
(0 == m_edFTPAddr.GetWindowTextLength() ||
0 == m_edFTPPort.GetWindowTextLength()))
{
// FTP<54><50> <20><><EFBFBD><EFBFBD><EFBFBD>ߴµ<DFB4>, <20>ּҳ<D6BC> Port<72><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
return true;
}
return false;
}
BOOL CSettingOptionPage::OnKillActive()
{
// TODO: <20><><EFBFBD>⿡ Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
if (this == m_OwnerSheet.GetActivePage())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ű<EFBFBD><C5B1><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendMessage(WM_COMMAND, MAKEWPARAM(ID_SAVE_SETUP, BN_CLICKED));
if (IsEmptyOption())
{
MessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ֽʽÿ<CABD>"),
_T("<EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>"), MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
}
return CPropertyPage::OnKillActive();
}
BOOL CSettingOptionPage::OnSetActive()
{
// TODO: <20><><EFBFBD>⿡ Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
SendMessage(WM_COMMAND, MAKEWPARAM(ID_LOAD_SETUP, BN_CLICKED));
return CPropertyPage::OnSetActive();
}
afx_msg LRESULT CSettingOptionPage::OnEnableAutoPatchOption(WPARAM wParam, LPARAM lParam)
{
SetAutoPatchOption(true);
return 0;
}
afx_msg LRESULT CSettingOptionPage::OnDisableAutoPatchOption(WPARAM wParam, LPARAM lParam)
{
SetAutoPatchOption(false);
return 0;
}
afx_msg LRESULT CSettingOptionPage::OnEnableManualPatchOption(WPARAM wParam, LPARAM lParam)
{
SetManualPatchOption(true);
return 0;
}
afx_msg LRESULT CSettingOptionPage::OnDisableManualPatchOption(WPARAM wParam, LPARAM lParam)
{
SetManualPatchOption(false);
return 0;
}
void CSettingOptionPage::SetAutoPatchOption(bool bEnable)
{
UINT nDisableID[] =
{
IDC_BTN_OPT_OLD_PKG,
IDC_BTN_OPT_NEW_CLIENT,
IDC_BTN_OPT_NEW_PKG,
};
PMUtil::EnableDlgItems(*this, nDisableID,
sizeof(nDisableID)/sizeof(UINT), bEnable);
if (bEnable && !theApp.IsManualPatchOperate())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20>۵<EFBFBD> <20><><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD> Enable
m_cbPatchType.EnableWindow(TRUE);
}
else
{
m_cbPatchType.EnableWindow(FALSE);
}
m_cbPkgPos.EnableWindow(bEnable);
m_bFTPPassive.EnableWindow(bEnable);
m_edOldPkgPos.SetReadOnly(!bEnable);
m_edMaxPkgSize.SetReadOnly(!bEnable);
m_edFTPAddr.SetReadOnly(!bEnable);
m_edFTPPort.SetReadOnly(!bEnable);
}
void CSettingOptionPage::SetManualPatchOption(bool bEnable)
{
UINT nDisableID[] =
{
IDC_BTN_OPT_MANUAL_PATCH_FILE,
IDC_BTN_OPT_MANUAL_SFX_FILE
};
PMUtil::EnableDlgItems(*this, nDisableID,
sizeof(nDisableID)/sizeof(UINT), bEnable);
if (bEnable && !theApp.IsAutoPatchOperate())
{
// <20>ڵ<EFBFBD><DAB5><EFBFBD>ġ<EFBFBD><C4A1> <20>۵<EFBFBD> <20><><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD> Enable
m_cbPatchType.EnableWindow(TRUE);
}
else
{
m_cbPatchType.EnableWindow(FALSE);
}
m_edManualPatchMinVer.SetReadOnly(!bEnable);
}
void CSettingOptionPage::OnCbnSelchangeCbOptOldPkgPos()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
BOOL bEnableFTP = FALSE;
int nCurSel = m_cbPkgPos.GetCurSel();
if (CB_ERR != nCurSel)
{
CString szFTP((LPCTSTR)IDS_CB_FTP);
CString szCurrentSel;
m_cbPkgPos.GetLBText(nCurSel, szCurrentSel);
if (0 == szCurrentSel.CompareNoCase(szFTP))
{
bEnableFTP = TRUE;
}
}
m_edFTPAddr.EnableWindow(bEnableFTP);
m_edFTPPort.EnableWindow(bEnableFTP);
m_bFTPPassive.EnableWindow(bEnableFTP);
m_edOldPkgPos.SetReadOnly(!bEnableFTP);
}
void CSettingOptionPage::OnDestroy()
{
SendMessage(WM_COMMAND, MAKEWPARAM(ID_SAVE_SETUP, BN_CLICKED));
CPropertyPage::OnDestroy();
}