⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poptestother.cpp

📁 一个用来对非常大的数进行科学计算的程序库
💻 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 + -