Files
FutureChecker/ConfigDlg.cpp
2013-07-21 00:33:28 +00:00

261 lines
8.6 KiB
C++

// ConfigDlg.cpp : implementation file
//
#include "stdafx.h"
#include "futurechecker.h"
#include "ConfigDlg.h"
#include <afxctl.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CConfigDlg dialog
CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConfigDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CConfigDlg)
m_strFutureJcode = _T(""); // 선물종목코드.
m_nFAamountLimitTime = 0;
m_nFAmountLimitLine = 0;
m_nFAmountUpCondition = 0;
m_nFAmountDownCondition = 0;
m_bFAmountApplyCheck = FALSE;
m_nFcurLimitTime = 0;
m_nFcurLevelCondition = 0;
m_bFcurApplyCheck = FALSE;
m_nFAmountRuleRadio = -1;
m_nFApplyRuleRadio = -1;
m_nFApplyRuleRadioLimitTime = 0;
//}}AFX_DATA_INIT
m_Fut = NULL;
}
CConfigDlg::~CConfigDlg()
{
m_Fut.Release();
}
void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CConfigDlg)
DDX_Control(pDX, IDC_FUTURE_JCODE_COMBO, m_hFutureCodeComboBox);
DDX_Text(pDX, IDC_FUTURE_JCODE_EDIT, m_strFutureJcode);
DDV_MaxChars(pDX, m_strFutureJcode, 20);
DDX_Control(pDX, IDC_DOWNCONDITION_HOTKEY, m_hDownCondition_HotKey);
DDX_Control(pDX, IDC_UPCONDITION_HOTKEY, m_hUpCondition_HotKey);
DDX_Control(pDX, IDC_HOOKLOCKUNLOCK_HOTKEY, m_hLockUnlock_HotKey);
DDX_Text(pDX, IDC_FAMOUNT_LIMITTIME_EDIT, m_nFAamountLimitTime);
DDV_MinMaxLong(pDX, m_nFAamountLimitTime, 1, 100000);
DDX_Text(pDX, IDC_FAMOUNT_LIMITLINE_EDIT, m_nFAmountLimitLine);
DDV_MinMaxInt(pDX, m_nFAmountLimitLine, 1, 20);
DDX_Text(pDX, IDC_FAMOUNT_UPCONDITION_EDIT, m_nFAmountUpCondition);
DDV_MinMaxLong(pDX, m_nFAmountUpCondition, 1, 10000000);
DDX_Text(pDX, IDC_FAMOUNT_DOWNCONDITION_EDIT, m_nFAmountDownCondition);
DDV_MinMaxLong(pDX, m_nFAmountDownCondition, 1, 10000000);
DDX_Check(pDX, IDC_FAMOUNT_APPLY_CHECK, m_bFAmountApplyCheck);
DDX_Text(pDX, IDC_FCUR_LIMITTIME_EDIT, m_nFcurLimitTime);
DDV_MinMaxLong(pDX, m_nFcurLimitTime, 1, 100000);
DDX_Text(pDX, IDC_FCUR_LEVELCONDITION_EDIT, m_nFcurLevelCondition);
DDV_MinMaxInt(pDX, m_nFcurLevelCondition, 1, 5);
DDX_Check(pDX, IDC_FCUR_APPLY_CHECK, m_bFcurApplyCheck);
DDX_Radio(pDX, IDC_FAMOUNT_RULE_RADIO1, m_nFAmountRuleRadio);
DDX_Radio(pDX, IDC_F_APPLY_RADIO1, m_nFApplyRuleRadio);
DDX_Text(pDX, IDC_F_APPLY_RADIO2_EDIT, m_nFApplyRuleRadioLimitTime);
DDV_MinMaxLong(pDX, m_nFApplyRuleRadioLimitTime, 1, 100000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
//{{AFX_MSG_MAP(CConfigDlg)
ON_CBN_SELCHANGE(IDC_FUTURE_JCODE_COMBO, OnSelchangeFutureJcodeCombo)
ON_BN_CLICKED(IDC_FAMOUNT_RULE_RADIO1, OnFAmountRuleRadio)
ON_BN_CLICKED(IDC_FAMOUNT_RULE_RADIO2, OnFAmountRuleRadio)
ON_BN_CLICKED(IDC_FAMOUNT_RULE_RADIO3, OnFAmountRuleRadio)
ON_BN_CLICKED(IDC_F_APPLY_RADIO1, OnFApplyRuleRadio)
ON_BN_CLICKED(IDC_F_APPLY_RADIO2, OnFApplyRuleRadio)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConfigDlg message handlers
BOOL CConfigDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ModifyStyleEx(NULL, WS_EX_TOPMOST);
HRESULT hr = m_Fut.CreateInstance(__uuidof(CpFutureCode));
try
{
if( SUCCEEDED(hr) )
{
short nCount = (short)m_Fut->GetCount();
for( short i=0; i<nCount; i++ )
{
CString b1 = (LPCTSTR)(_bstr_t)m_Fut->GetData(0,i);
m_hFutureCodeComboBox.AddString( b1 );
}
}
}
catch( _com_error e )
{
MessageBox(e.ErrorMessage(), "CpFutureCode 초기화 실패", MB_OK|MB_ICONSTOP);
CDialog::OnCancel();
return FALSE;
}
///////////////////////////////////////////////////////////////
Load();
OnSelchangeFutureJcodeCombo();
OnFAmountRuleRadio();
OnFApplyRuleRadio();
///////////////////////////////////////////////////////////////
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConfigDlg::OnOK()
{
if( ! Save() ) return;
if( g_AppEnv.bFApplyRuleRadio == 0 )
{
if( !g_AppEnv.bFAmountApplyCheck && !g_AppEnv.bFcurApplyCheck )
{
int nID = MessageBox( "거래량+호가 모두 꺼져있습니다.",
"검사조건 확인", MB_OK|MB_ICONINFORMATION );
return;
}
}
else if( g_AppEnv.bFApplyRuleRadio == 1 )
{
if( !g_AppEnv.bFAmountApplyCheck || !g_AppEnv.bFcurApplyCheck )
{
int nID = MessageBox( "[합집합]조건은 거래량+호가 모두 켜져있어야합니다.",
"검사조건 확인", MB_OK|MB_ICONINFORMATION );
return;
}
}
CDialog::OnOK();
}
void CConfigDlg::Load()
{
m_hLockUnlock_HotKey.SetHotKey( g_AppEnv.LockUnlockHotKey.wVk, g_AppEnv.LockUnlockHotKey.wModifier );
m_hUpCondition_HotKey.SetHotKey( g_AppEnv.UpConditionHotKey.wVk, g_AppEnv.UpConditionHotKey.wModifier );
m_hDownCondition_HotKey.SetHotKey( g_AppEnv.DownConditionHotKey.wVk, g_AppEnv.DownConditionHotKey.wModifier );
m_nFApplyRuleRadio = g_AppEnv.bFApplyRuleRadio;
m_nFApplyRuleRadioLimitTime = g_AppEnv.nFApplyRuleRadioLimitTime;
((CButton*)GetDlgItem( IDC_RUNSTAT_CHECK ))->SetCheck(g_AppEnv.bRunStatCheck);
((CButton*)GetDlgItem( IDC_FAMOUNT_APPLY_CHECK ))->SetCheck(g_AppEnv.bFAmountApplyCheck);
((CButton*)GetDlgItem( IDC_FCUR_APPLY_CHECK ))->SetCheck(g_AppEnv.bFcurApplyCheck);
m_nFAamountLimitTime = g_AppEnv.nFAamountLimitTime;
m_nFAmountLimitLine = g_AppEnv.nFAmountLimitLine;
m_nFAmountRuleRadio = g_AppEnv.nFAmountRuleRadio;
m_nFAmountUpCondition = g_AppEnv.nFAmountUpCondition;
m_nFAmountDownCondition = g_AppEnv.nFAmountDownCondition;
m_bFAmountApplyCheck = g_AppEnv.bFAmountApplyCheck;
int nIndex = m_hFutureCodeComboBox.SelectString(0, g_AppEnv.szFutureCode);
if( nIndex == LB_ERR )
m_hFutureCodeComboBox.SetCurSel(0);
m_nFcurLimitTime = g_AppEnv.nFcurLimitTime;
m_nFcurLevelCondition = g_AppEnv.nFcurLevelCheck;
m_bFcurApplyCheck = g_AppEnv.bFcurApplyCheck;
UpdateData(FALSE);
}
BOOL CConfigDlg::Save()
{
UpdateData();
m_hLockUnlock_HotKey.GetHotKey( g_AppEnv.LockUnlockHotKey.wVk, g_AppEnv.LockUnlockHotKey.wModifier );
m_hUpCondition_HotKey.GetHotKey( g_AppEnv.UpConditionHotKey.wVk, g_AppEnv.UpConditionHotKey.wModifier );
m_hDownCondition_HotKey.GetHotKey( g_AppEnv.DownConditionHotKey.wVk, g_AppEnv.DownConditionHotKey.wModifier );
g_AppEnv.bFApplyRuleRadio = m_nFApplyRuleRadio;
g_AppEnv.nFApplyRuleRadioLimitTime = m_nFApplyRuleRadioLimitTime;
g_AppEnv.bRunStatCheck = ((CButton*)GetDlgItem( IDC_RUNSTAT_CHECK ))->GetCheck();
g_AppEnv.bFAmountApplyCheck = ((CButton*)GetDlgItem( IDC_FAMOUNT_APPLY_CHECK ))->GetCheck();
g_AppEnv.bFcurApplyCheck = ((CButton*)GetDlgItem( IDC_FCUR_APPLY_CHECK ))->GetCheck();
g_AppEnv.nFAamountLimitTime = m_nFAamountLimitTime;
g_AppEnv.nFAmountLimitLine = m_nFAmountLimitLine;
g_AppEnv.nFAmountRuleRadio = m_nFAmountRuleRadio;
g_AppEnv.nFAmountUpCondition = m_nFAmountUpCondition;
g_AppEnv.nFAmountDownCondition = m_nFAmountDownCondition;
g_AppEnv.bFAmountApplyCheck = m_bFAmountApplyCheck;
m_hFutureCodeComboBox.GetLBText( m_hFutureCodeComboBox.GetCurSel(), g_AppEnv.szFutureCode );
g_AppEnv.nFcurLimitTime = m_nFcurLimitTime;
g_AppEnv.nFcurLevelCheck = m_nFcurLevelCondition;
g_AppEnv.bFcurApplyCheck = m_bFcurApplyCheck;
return TRUE;
}
void CConfigDlg::OnSelchangeFutureJcodeCombo()
{
CString rString;
int nSel = m_hFutureCodeComboBox.GetCurSel();
m_hFutureCodeComboBox.GetLBText(nSel, rString);
CString strName = (LPCTSTR)(_bstr_t)m_Fut->CodeToName( (LPCTSTR)rString );
SetDlgItemText( IDC_FUTURE_JCODE_EDIT, strName );
}
void CConfigDlg::OnFAmountRuleRadio()
{
UpdateData(TRUE);
if( m_nFAmountRuleRadio == 0 )
{
SetDlgItemText( IDC_FAMOUNT_UPCONDITION_STATIC, "매수 - 매도 :" );
SetDlgItemText( IDC_FAMOUNT_DOWNCONDITION_STATIC, "매도 - 매수 :" );
}
else if(m_nFAmountRuleRadio == 1 )
{
SetDlgItemText( IDC_FAMOUNT_UPCONDITION_STATIC, "매수 :" );
SetDlgItemText( IDC_FAMOUNT_DOWNCONDITION_STATIC, "매도 :" );
}
else if(m_nFAmountRuleRadio == 2 )
{
SetDlgItemText( IDC_FAMOUNT_UPCONDITION_STATIC, "OR조건 :" );
SetDlgItemText( IDC_FAMOUNT_DOWNCONDITION_STATIC, "OR조건 :" );
}
}
void CConfigDlg::OnFApplyRuleRadio()
{
UpdateData(TRUE);
BOOL bEnable=FALSE;
CWnd *pWnd[3] = {NULL,};
pWnd[0] = (CWnd*)GetDlgItem( IDC_F_APPLY_RADIO2_STATIC1 );
pWnd[1] = (CWnd*)GetDlgItem( IDC_F_APPLY_RADIO2_EDIT );
pWnd[2] = (CWnd*)GetDlgItem( IDC_F_APPLY_RADIO2_STATIC2 );
if( m_nFApplyRuleRadio == 0 ) // 교집합.
bEnable = FALSE;
else // 합집합
bEnable = TRUE;
pWnd[0]->EnableWindow(bEnable);
pWnd[1]->EnableWindow(bEnable);
pWnd[2]->EnableWindow(bEnable);
}