📄 poptestdiv.cpp
字号:
// PopTestDiv.cpp : implementation file
//
#include "stdafx.h"
#include "NonLimitCalculator.h"
#include "PopTestDiv.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
/////////////////////////////////////////////////////////////////////////////
// CPopTestDiv dialog
CPopTestDiv::CPopTestDiv(CWnd* pParent /*=NULL*/)
: CDialog(CPopTestDiv::IDD, pParent)
{
//{{AFX_DATA_INIT(CPopTestDiv)
m_csEdit1 = _T("");
m_csEdit2 = _T("");
m_csComMod = _T("");
m_csComQuo = _T("");
m_csMyMod = _T("");
m_csMyQuo = _T("");
//}}AFX_DATA_INIT
}
/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPopTestDiv)
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_Text(pDX, IDC_STATIC_COMMODRESULT, m_csComMod);
DDX_Text(pDX, IDC_STATIC_COMQUORESULT, m_csComQuo);
DDX_Text(pDX, IDC_STATIC_MYMODRESULT, m_csMyMod);
DDX_Text(pDX, IDC_STATIC_MYQUORESULT, m_csMyQuo);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
BOOL CPopTestDiv::TestCalc(BOOL bCheck)
{
CLongInt li1, li2, liResult, liMod;
long l1, l2, lResult, lMod;
CString cs;
BOOL bIsEqual = TRUE;
UpdateData(TRUE);
try
{
li1 = m_csEdit1;
li2 = m_csEdit2;
liResult = Div(li1, li2).liQuotient;
liMod = Div(li1, li2).liModulus;
}
catch(CLongIntDivException *e)
{
e->ReportError(MB_OK, IDS_STRING_DIVZERO);
m_csComQuo = "0";
m_csComMod = "0";
m_csMyQuo = "0";
m_csMyMod = "0";
e->Delete();
return TRUE;
}
catch(CLongIntIsNotNumberException * e)
{
e->ReportError(MB_OK, IDS_STRING_ISNOTNUM);
m_csComQuo = "0";
m_csComMod = "0";
m_csMyQuo = "0";
m_csMyMod = "0";
e->Delete();
return TRUE;
}
if (!bCheck)
{
l1 = atol(li1.GetNumString());
l2 = atol(li2.GetNumString());
lResult = long(l1 / l2);
lMod = l1 % l2;
}
else
{
lResult = 0;
lMod = 0;
}
cs.Format("%ld", lResult);
m_csComQuo = cs;
cs.Format("%ld", lMod);
m_csComMod = cs;
cs = liResult.GetNumString();
m_csMyQuo = cs;
cs = liMod.GetNumString();
m_csMyMod = cs;
if (m_csComQuo != m_csMyQuo && !bCheck)
{
MessageBox("商数结果不一致!", "注意", MB_OK | MB_ICONSTOP);
bIsEqual = FALSE;
}
if (m_csComMod != m_csMyMod && !bCheck)
{
MessageBox("余数结果不一致!", "注意", MB_OK | MB_ICONSTOP);
bIsEqual = FALSE;
}
UpdateData(FALSE);
return bIsEqual;
}
/////////////////////////////////////////////////////////////////////////////
LRESULT CPopTestDiv::OnRandomTest(WPARAM wParam, LPARAM lParam)
{
CLongInt li1, li2, liResult, liMod;
long l1, l2, lResult, lMod;
CString cs;
DIVIDERESULT dr;
BOOL bIsEqual = TRUE;
RANDOMTESTPARAM * rtp = (RANDOMTESTPARAM *)lParam;
HANDLE m_hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, "ShouldStop");
ASSERT(m_hEvent);
l1 = GetRandomNumberByLength(rtp -> iLength1);
do
{
l2 = GetRandomNumberByLength(rtp -> iLength2);
}while(l2 == 0);
li1 = l1;
li2 = l2;
lResult = long(l1 / l2);
lMod = long(l1 % l2);
DWORD dwStartTime = GetTickCount();
dr = Div(li1, li2);
liResult = dr.liQuotient;
liMod = dr.liModulus;
rtp -> dwElapsedTime += GetTickCount() - dwStartTime;
m_csEdit1 = li1.GetNumString();
m_csEdit2 = li2.GetNumString();
cs.Format("%ld", lResult);
m_csComQuo = cs;
cs.Format("%ld", lMod);
m_csComMod = cs;
cs = liResult.GetNumString();
m_csMyQuo = cs;
cs = liMod.GetNumString();
m_csMyMod = cs;
UpdateData(FALSE);
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
pEdit->UpdateWindow();
pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->UpdateWindow();
if (m_csComQuo != m_csMyQuo || m_csComMod != m_csMyMod)
{
SetEvent(m_hEvent);
MessageBox("结果不一致!", "注意", MB_OK | MB_ICONSTOP);
bIsEqual = FALSE;
::SendMessage(rtp -> hWndTop, WM_RESETREADONLYFLAG, 0, 0);
}
return bIsEqual;
}
/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::OnCancel()
{
// TODO: Add extra cleanup here
//CDialog::OnCancel();
}
/////////////////////////////////////////////////////////////////////////////
BOOL CPopTestDiv::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
void CPopTestDiv::SetReadOnly(BOOL bIsReadOnly)
{
CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);
pEdit->SetReadOnly(bIsReadOnly);
pEdit->UpdateWindow();
pEdit = (CEdit *)GetDlgItem(IDC_EDIT2);
pEdit->SetReadOnly(bIsReadOnly);
pEdit->UpdateWindow();
}
/////////////////////////////////////////////////////////////////////////////
LRESULT CPopTestDiv::OnResetReadOnlyFlag(WPARAM wParam, LPARAM lParam)
{
SetReadOnly(FALSE);
return 1;
}
/////////////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CPopTestDiv, CDialog)
//{{AFX_MSG_MAP(CPopTestDiv)
//}}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 + -