Files
interactive/application/sp-console3/ConsoleTransfer/ConfigDlg.cpp
2026-08-07 17:38:18 +09:00

148 lines
3.5 KiB
C++

// ConfigDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "ConfigDlg.h"
#include "../SHEUtil.h"
// CConfigDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CConfigDlg, CDialog)
CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConfigDlg::IDD, pParent)
{
m_iPage = -1;
}
CConfigDlg::~CConfigDlg()
{
for (std::vector<CConfigPage*>::iterator iter = m_dlgVec.begin(); iter != m_dlgVec.end(); iter++)
delete (*iter);
}
void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TAB, m_tab);
}
BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnTabSelchange)
ON_BN_CLICKED(IDOK, OnOk)
END_MESSAGE_MAP()
// CConfigDlg 메시지 처리기입니다.
BOOL CConfigDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
m_tab.InsertItem(0, "전송후 작업");
m_tab.InsertItem(1, "같은 파일 처리");
m_tab.InsertItem(2, "기타");
m_tab.SetItemSize(CSize(130, 17));
m_tab.GetClientRect(&m_rcFrame);
m_rcFrame.left += 1;
m_rcFrame.top += 20;
m_rcFrame.right -= 1;
m_rcFrame.bottom -= 1;
if (m_regutil.OpenKey(HKEY_CURRENT_USER, CString(REG_KEY))) {
m_dlg1.m_nAfterWork = m_regutil.GetNumValue("AfterWork");
m_dlg1.m_bForceKill = m_regutil.GetNumValue("ForceKill");
m_dlg2.m_nWritePolicy = m_regutil.GetNumValue("WritePolicy");
m_dlg3.m_bChkShowAllFile = m_regutil.GetNumValue("ShowAllFile");
m_regutil.CloseKey();
}
AddPage(m_dlg1, "전송후 작업");
AddPage(m_dlg2, "같은 파일 처리");
AddPage(m_dlg3, "기타");
ShowPage(0);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CConfigDlg::AddPage(CConfigSubDlg &dlg, LPCTSTR pszCaption)
{
CConfigPage *pcp = new CConfigPage();
pcp->m_pdlg = &dlg;
pcp->m_nID = dlg.GetID();
pcp->m_sCaption = pszCaption;
m_dlgVec.push_back(pcp);
if (!::IsWindow(dlg.m_hWnd))
dlg.Create(dlg.GetID(), &m_tab);
}
BOOL CConfigDlg::ShowPage(int iPage)
{
if (m_tab.GetCurSel() >= 0) {
CConfigPage* pcp = (CConfigPage*)m_dlgVec[m_tab.GetCurSel()];
if (!pcp)
return FALSE;
if (pcp->m_pdlg) {
if (::IsWindow(pcp->m_pdlg->m_hWnd))
pcp->m_pdlg->ShowWindow(SW_HIDE);
}
}
CConfigPage* pcp = (CConfigPage*)m_dlgVec[iPage];
if (!pcp)
return FALSE;
if (pcp->m_pdlg) {
if (::IsWindow(pcp->m_pdlg->m_hWnd)) {
pcp->m_pdlg->SetParent(&m_tab);
pcp->m_pdlg->MoveWindow(m_rcFrame.left, m_rcFrame.top, m_rcFrame.Width(), m_rcFrame.Height());
pcp->m_pdlg->ShowWindow(SW_SHOW);
pcp->m_pdlg->RedrawWindow();
pcp->m_pdlg->SetFocus();
}
m_tab.SetCurSel(iPage);
m_iPage = iPage;
}
return TRUE;
}
void CConfigDlg::OnTabSelchange(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
ShowPage(m_tab.GetCurSel());
*pResult = 0;
}
void CConfigDlg::OnOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_dlg1.UpdateData();
m_dlg2.UpdateData();
m_dlg3.UpdateData();
if (m_regutil.OpenKey(HKEY_CURRENT_USER, CString(REG_KEY))) {
m_regutil.SetNumValue("AfterWork", m_dlg1.m_nAfterWork);
m_regutil.SetNumValue("ForceKill", m_dlg1.m_bForceKill);
m_regutil.SetNumValue("WritePolicy", m_dlg2.m_nWritePolicy);
m_regutil.SetNumValue("ShowAllFile", m_dlg3.m_bChkShowAllFile);
m_regutil.CloseKey();
}
CDialog::OnOK();
}