// FormulaDlg.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "FormulaDlg.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFormulaDlg dialog CFormulaDlg::CFormulaDlg(CWnd* pParent /*=NULL*/) : CDialog(CFormulaDlg::IDD, pParent) { //{{AFX_DATA_INIT(CFormulaDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT ZeroMemory(&m_fmtCurrency, sizeof(m_fmtCurrency)); m_fmtCurrency.lpDecimalSep = new TCHAR[10]; m_fmtCurrency.lpThousandSep = new TCHAR[10]; m_fmtCurrency.lpCurrencySymbol = new TCHAR[10]; m_fmtCurrency.Grouping = 3; m_fmtCurrency.NumDigits = GetLocaleLong(LOCALE_IDIGITS); m_fmtCurrency.LeadingZero = GetLocaleLong(LOCALE_ILZERO); m_fmtCurrency.NegativeOrder = GetLocaleLong(LOCALE_INEGCURR); m_fmtCurrency.PositiveOrder = GetLocaleLong(LOCALE_ICURRENCY); GetLocaleInfo(XTPResourceManager()->GetActiveLCID(), LOCALE_SDECIMAL, m_fmtCurrency.lpDecimalSep, 10); GetLocaleInfo(XTPResourceManager()->GetActiveLCID(), LOCALE_SCURRENCY, m_fmtCurrency.lpCurrencySymbol, 10); GetLocaleInfo(XTPResourceManager()->GetActiveLCID(), LOCALE_STHOUSAND, m_fmtCurrency.lpThousandSep, 10); } CFormulaDlg::~CFormulaDlg() { SAFE_DELETE_AR(m_fmtCurrency.lpDecimalSep); SAFE_DELETE_AR(m_fmtCurrency.lpThousandSep); SAFE_DELETE_AR(m_fmtCurrency.lpCurrencySymbol); } int CFormulaDlg::GetLocaleLong(LCTYPE LCType) { TCHAR szResult[5]; int nResult = ::GetLocaleInfo(XTPResourceManager()->GetActiveLCID(), LCType, szResult, 4); _ASSERTE(nResult == 2); UNUSED(nResult); return _ttoi(szResult); } void CFormulaDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFormulaDlg) DDX_Control(pDX, IDC_GRID, m_wndGrid); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFormulaDlg, CDialog) //{{AFX_MSG_MAP(CFormulaDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFormulaDlg message handlers BOOL CFormulaDlg::OnInitDialog() { CDialog::OnInitDialog(); CXTPGridColumn* pColumnProduct = m_wndGrid.AddColumn(new CXTPGridColumn(0, _T("Product"), 150)); CXTPGridColumn* pColumnState = m_wndGrid.AddColumn(new CXTPGridColumn(1, _T("State"), 150)); CXTPGridColumn* pColumnSales = m_wndGrid.AddColumn(new CXTPGridColumn(2, _T("Sales"), 150)); pColumnState->SetAlignment(DT_RIGHT); // pColumnState->SetAlignment(DT_LEFT); struct Item { LPCTSTR pszProduct; LPCTSTR pszState; int nSales; }; Item items[] = { { _T("Pen"), _T("NSW"), 20 }, { _T("Paper"), _T("NSW"), 10 }, { _T("Books"), _T("NSW"), 10 }, { _T("Pen"), _T("SA"), 20 }, { _T("Paper"), _T("SA"), 10 }, { _T("Books"), _T("SA"), 10 }, { _T("Pen"), _T("WA"), -200000 }, { _T("Paper"), _T("WA"), 100000 }, { _T("Books"), _T("WA"), 100000 }, }; CXTPGridRecord* pRecord; int i; for (i = 0; i < _countof(items); i++) { pRecord = m_wndGrid.AddRecord(new CXTPGridRecord()); pRecord->AddItem(new CXTPGridRecordItemText(items[i].pszProduct)); pRecord->AddItem(new CXTPGridRecordItemText(items[i].pszState)); pRecord->AddItem(new CXTPGridRecordItemNumber(items[i].nSales)); } m_wndGrid.GetColumns()->GetGroupsOrder()->Add(pColumnProduct); m_wndGrid.Populate(); BOOL bUseCurrencyFormat = TRUE; for (i = 0; i < m_wndGrid.GetRows()->GetCount(); i++) { CXTPGridRow* pRow = m_wndGrid.GetRows()->GetAt(i); if (pRow->IsGroupRow()) { CXTPGridGroupRow* pGroupRow = reinterpret_cast(pRow); if (bUseCurrencyFormat) { pGroupRow->SetFormatString(_T(" Subtotal ")); pGroupRow->SetCurrencyFormat(&m_fmtCurrency); } else { pGroupRow->SetFormatString(_T(" Subtotal $=%.02f")); } pGroupRow->SetFormula(_T("SUMSUB(R*C1:R*C8)")); pGroupRow->UpdateValue(); bUseCurrencyFormat = !bUseCurrencyFormat; } } return FALSE; } void CFormulaDlg::OnOK() { CDialog::OnOK(); }