📄 poptestother.cpp
字号:
// PopTestOther.cpp : implementation file
//
#include "stdafx.h"
#include "NonLimitCalculator.h"
#include "PopTestOther.h"
#include "CLongInt.h"
#include "MyUsefulFunction.h"
#include "ThreadFunction.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPopTestOther dialog
CPopTestOther::CPopTestOther(CWnd* pParent /*=NULL*/)
: CDialog(CPopTestOther::IDD, pParent)
{
//{{AFX_DATA_INIT(CPopTestOther)
m_csEdit1 = _T("");
m_csEdit2 = _T("");
m_nRadio = -1;
m_csComResult = _T("");
m_csMyResult = _T("");
//}}AFX_DATA_INIT
}
//////////////////////////////////////////////////////////////////////////
void CPopTestOther::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPopTestOther)
DDX_Text(pDX, IDC_EDIT1, m_csEdit1);
DDV_MaxChars(pDX, m_csEdit1, 30);
DDX_Text(pDX, IDC_EDIT2, m_csEdit2);
DDV_MaxChars(pDX, m_csEdit2, 30);
DDX_Radio(pDX, IDC_RADIO1, m_nRadio);
DDX_Text(pDX, IDC_STATIC_COMRESULT, m_csComResult);
DDX_Text(pDX, IDC_STATIC_MYRESULT, m_csMyResult);
//}}AFX_DATA_MAP
}
//////////////////////////////////////////////////////////////////////////
BOOL CPopTestOther::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_nRadio = 0;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//////////////////////////////////////////////////////////////////////////
BOOL CPopTestOther::TestCalc(BOOL bCheck)
{
CLongInt li1, li2, liResult;
long l1, l2, lResult;
CString cs;
BOOL bIsEqual = TRUE;
UpdateData(TRUE);
try
{
li1 = m_csEdit1;
li2 = m_csEdit2;
}
catch(CLongIntIsNotNumberException * e)
{
e->ReportError(MB_OK, IDS_STRING_ISNOTNUM);
m_csComResult = "0";
m_csMyResult = "0";
e->Delete();
return TRUE;
}
switch(m_nRadio)
{
case 0:
liResult = li1 + li2;
if (!bCheck)
{
l1 = atol(li1.GetNumString());
l2 = atol(li2.GetNumString());
lResult = l1 + l2;
}
else lResult = 0;
break;
case 1:
liResult = li1 - li2;
if (!bCheck)
{
l1 = atol(li1.GetNumString());
l2 = atol(li2.GetNumString());
lResult = l1 - l2;
}
else lResult = 0;
break;
case 2:
liResult = li1 * li2;
if (!bCheck)
{
l1 = atol(li1.GetNumString());
l2 = atol(li2.GetNumString());
lResult = l1 * l2;
}
else lResult = 0;
break;
}
cs.Format("%ld", lResult);
m_csComResult = cs;
cs = liResult.GetNumString();
m_csMyResult = cs;
if (m_csComResult != m_csMyResult && !bCheck)
{
MessageBox("计算结果不一致!", "注意", MB_OK | MB_ICONSTOP);
bIsEqual = FALSE;
}
UpdateData(FALSE);
return bIsEqual;
}
//////////////////////////////////////////////////////////////////////////
LRESULT CPopTestOther::OnRandomTest(WPARAM wParam, LPARAM lParam)
{
CLongInt li1, li2, liResult;
long l1, l2, lResult;
CString cs;
RANDOMTESTPARAM * rtp = (RANDOMTESTPARAM *)lParam;
HANDLE m_hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, "ShouldStop");
ASSERT(m_hEvent);
int iLength1 = rtp -> iLength1;
int iLength2 = rtp -> iLength2;
DWORD dwStartTime;
switch(m_nRadio)
{
case 0: // 9 MAXpos
l1 = GetRandomNumberByLength(iLength1);
l2 = GetRandomNumberByLength(iLength2);
li1 = l1;
li2 = l2;
lResult = l1 + l2;
dwStartTime = GetTickCount();
liResult = li1 + li2;
break;
case 1: // 9 MAXpos
l1 = GetRandomNumberByLength(iLength1);
l2 = GetRandomNumberByLength(iLength2);
li1 = l1;
li2 = l2;
lResult = l1 - l2;
dwStartTime = GetTickCount();
liResult = li1 - li2;
break;
case 2: // 4 MAXpos
l1 = GetRandomNumberByLength(iLength1);
l2 = GetRandomNumberByLength(iLength2);
li1 = l1;
li2 = l2;
lResult = l1 * l2;
dwStartTime = GetTickCount();
liResult = li1 * li2;
}
rtp -> dwElapsedTime += GetTickCount() - dwStartTime;
m_csEdit1 = li1.GetNumString();
m_csEdit2 = li2.GetNumString();
cs.Format("%ld", lResult);
m_csComResult = cs;
m_csMyResult = liResult.GetNumString();
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
pEdit->UpdateWindow();
pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->UpdateWindow();
UpdateData(FALSE);
if (m_csComResult != m_csMyResult)
{
SetEvent(m_hEvent);
MessageBox("计算结果不一致!", "注意", MB_OK | MB_ICONSTOP);
::SendMessage(rtp -> hWndTop, WM_RESETREADONLYFLAG, 0, 0);
return 1;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
void CPopTestOther::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
}
//////////////////////////////////////////////////////////////////////////
void CPopTestOther::OnCancel()
{
// TODO: Add extra cleanup here
//CDialog::OnCancel();
}
//////////////////////////////////////////////////////////////////////////
void CPopTestOther::SetReadOnly(BOOL bIsReadOnly)
{
CEdit * pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
pEdit->SetReadOnly(bIsReadOnly);
pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->SetReadOnly(bIsReadOnly);
CWnd * pWnd = GetDlgItem(IDC_RADIO1);
pWnd -> EnableWindow(!bIsReadOnly);
pWnd = GetDlgItem(IDC_RADIO2);
pWnd -> EnableWindow(!bIsReadOnly);
pWnd = GetDlgItem(IDC_RADIO3);
pWnd -> EnableWindow(!bIsReadOnly);
}
//////////////////////////////////////////////////////////////////////////
LRESULT CPopTestOther::OnResetReadOnlyFlag(WPARAM wParam, LPARAM lParam)
{
SetReadOnly(FALSE);
return 1;
}
//////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CPopTestOther, CDialog)
//{{AFX_MSG_MAP(CPopTestOther)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_RANDOMTEST, OnRandomTest)
ON_MESSAGE(WM_RESETREADONLYFLAG, OnResetReadOnlyFlag)
END_MESSAGE_MAP()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -