📄 listexpressiondlg.cpp
字号:
// ListExpressionDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Calculator.h"
#include "ListExpressionDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CListExpressionDlg dialog
CListExpressionDlg::CListExpressionDlg(CWnd* pParent /*=NULL*/)
: CDialog(CListExpressionDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CListExpressionDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CListExpressionDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CListExpressionDlg)
DDX_Control(pDX, IDC_EDIT_RESULT, m_ctrlResult);
DDX_Control(pDX, IDC_LIST_EXPRESSION, m_ctrlListExpression);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CListExpressionDlg, CDialog)
//{{AFX_MSG_MAP(CListExpressionDlg)
ON_BN_CLICKED(IDC_BUTTON_SELECT, OnButtonSelect)
ON_LBN_SELCHANGE(IDC_LIST_EXPRESSION, OnSelchangeListExpression)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CListExpressionDlg message handlers
BOOL CListExpressionDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrlListExpression.AddString("!(1 > 3) OR .F.");
m_ctrlListExpression.AddString("+1/-1");
m_ctrlListExpression.AddString("1+2+3+1/2");
m_ctrlListExpression.AddString("(121-1)/10-2");
m_ctrlListExpression.AddString("(1+1)*3+(2+2)");
m_ctrlListExpression.AddString("(1+1)+(2+2)+(3+3)");
m_ctrlListExpression.AddString("(1+1)+(2+2)*(3+3)*100");
m_ctrlListExpression.AddString("1+1*(1+1)");
m_ctrlListExpression.AddString("(10+5*9-15/3+(2*10-(12-2)))-((2.91-0.90-1.01)*100/10)");
m_ctrlListExpression.AddString("ABS(ABS(-45)-ABS(5)-ABS(10-30)-ABS(30-10))");
m_ctrlListExpression.AddString("ALLTRIM(\" TEST \") + ALLTRIM(\" 0\") + ALLTRIM(\"1 \")");
m_ctrlListExpression.AddString("ANSITOOEM(\"义耱\")+\"-\"+OEMTOANSI(ANSITOOEM(\"义耱\"))");
m_ctrlListExpression.AddString("CHR(ASC('A'))+CHR(ASC('Z'))");
m_ctrlListExpression.AddString("AT(\"test\",\"Is the test string\")");
m_ctrlListExpression.AddString("ATC(\"Test\",\"Is the test string\")");
m_ctrlListExpression.AddString("ATAN(0) + ATAN(PI()/2)");
m_ctrlListExpression.AddString("BETWEEN(4,0,10) AND BETWEEN(DATE(),DATE()-1,DATE()+1)");
m_ctrlListExpression.AddString("CMONTH(DATE())+\" \"+CDOW(DATE())");
m_ctrlListExpression.AddString("CEILING(10.1)+CEILING(-10.9)");
m_ctrlListExpression.AddString("CHRTRAN('ABCDEF','ACE','XYZQRST')");
m_ctrlListExpression.AddString("COS(PI()) + SIN(PI()/2)");
m_ctrlListExpression.AddString("CTOD(\"01 2002\")");
m_ctrlListExpression.AddString("CTOT(\"01 2002 18:20\")");
m_ctrlListExpression.AddString("YEAR(DATE())*10000+MONTH(DATE())*100+DAY(DATE())");
m_ctrlListExpression.AddString("DMY(DATE())");
m_ctrlListExpression.AddString("DTOC(DATE())+\" \"+DTOC(DATE(),1)+\" \"+DTOS(DATE())");
m_ctrlListExpression.AddString("EMPTY(CTOD('')) AND EMPTY('') AND EMPTY(0)");
m_ctrlListExpression.AddString("LOG(EXP(2))+LOG10(100)+EXP(0)");
m_ctrlListExpression.AddString("FLOOR(10.1)+FLOOR(-10.9)");
m_ctrlListExpression.AddString("GOMONTH(GOMONT(DATE()-DAY(DATE()),1),-2)");
m_ctrlListExpression.AddString("HOUR(DATETIME())*60*60+MINUTE(DATETIME())*60+SEC(DATETIME())");
m_ctrlListExpression.AddString("IIF(IIF(1>2,1,2)>0,DATE(),DATE()-1)");
m_ctrlListExpression.AddString("INT(-12.5)+INT(12.1)");
m_ctrlListExpression.AddString("ISALPHA('z') AND ISDIGIT('9')");
m_ctrlListExpression.AddString("ISLOWER('g') AND ISUPPER('G')");
m_ctrlListExpression.AddString("LEFT(\"TECT\",2)+RIGHT(\"test\",2)");
m_ctrlListExpression.AddString("LEN(\"Test\")");
m_ctrlListExpression.AddString("LIKE('Ch*','Chess') AND LIKE('*ss*','Chess') AND LIKE('*h?s?','Chess')");
m_ctrlListExpression.AddString("UPPER(\"Is \")+LOWER(\"Test\")");
m_ctrlListExpression.AddString("LTRIM(\" Test\")");
m_ctrlListExpression.AddString("MAX(DATE(),DATE()-2,DATE()-3)");
m_ctrlListExpression.AddString("MIN(MAX(3,8,5),MAX(2,7,3),4)");
m_ctrlListExpression.AddString("MDY(DATE())");
m_ctrlListExpression.AddString("MOD((4*9),(90/9))");
m_ctrlListExpression.AddString("OCCURS('a','abracadabra')");
m_ctrlListExpression.AddString("PADL(\"-\",3,'0')+PADC(\"|\",3,' ')+PADR(\"-\",3,'0')");
m_ctrlListExpression.AddString("REPLICATE('HELLO ',4)");
m_ctrlListExpression.AddString("ROUND(8.099,2)");
m_ctrlListExpression.AddString("SECONDS()/(60*60)");
m_ctrlListExpression.AddString("SIGN(-5)+SIGN(0)+SIGN(3)");
m_ctrlListExpression.AddString("'*'+SPACE(3)+'*'");
m_ctrlListExpression.AddString("SQRT(2*SQRT(2))");
m_ctrlListExpression.AddString("STR(3,3,1)+','+STR(3,2)+','+STR(3)");
m_ctrlListExpression.AddString("STRTRAN('abracadabra', 'a', 'q', 2, 3)");
m_ctrlListExpression.AddString("STUFF('abcdefghijklm',4,3,'12345')");
m_ctrlListExpression.AddString("SUBSTR('abcdefghijklm', 1, 5)");
m_ctrlListExpression.AddString("TAN(PI()/4)");
m_ctrlListExpression.AddString("TIME()");
m_ctrlListExpression.AddString("VAL('10')+VAL('5')");
m_ctrlListExpression.AddString("VARTYPE(DATE())+' '+VARTYPE('test')+' '+VARTYPE(9)");
m_ctrlListExpression.SetCurSel(0);
OnSelchangeListExpression();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CListExpressionDlg::OnButtonSelect()
{
OnOK();
}
void CListExpressionDlg::OnSelchangeListExpression()
{
CALXParser m_Parser;
VARIANT* pvarResult = NULL;
m_ctrlListExpression.GetText(m_ctrlListExpression.GetCurSel(), m_strExpression);
try
{
m_Parser.Parse(m_strExpression);
pvarResult = m_Parser.Execute();
}
catch(CALXParserException* e)
{
m_ctrlResult.SetWindowText("");
for(int i = 0; i < e->GetErrorCount(); i++)
{
e->GetErrorInfo(i);
e->ReportError();
}
e->Delete();
return;
}
catch(CException* e)
{
m_ctrlResult.SetWindowText("");
e->ReportError();
e->Delete();
return;
}
CString strRez;
switch(V_VT(pvarResult))
{
case VT_R8:
{
strRez.Format("%f",pvarResult->dblVal);
break;
}
case VT_BSTR:
{
CString strRezult(V_BSTR(pvarResult));
strRez.Format("\"%s\"",strRezult);
break;
}
case VT_DATE:
{
COleDateTime dte(V_DATE(pvarResult));
strRez = dte.Format();
break;
}
case VT_BOOL:
{
if(V_BOOL(pvarResult))
strRez = ".T.";
else
strRez = ".F.";
break;
}
default:
strRez = "Error result";
}
m_ctrlResult.SetWindowText(strRez);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -