📄 dlgrelation.cpp
字号:
// DlgRelation.cpp : implementation file
//
#include "stdafx.h"
#include "Lottery.h"
#include "DlgRelation.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgRelation dialog
CDlgRelation::CDlgRelation(CWnd* pParent /*=NULL*/)
: CDialog(CDlgRelation::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgRelation)
//}}AFX_DATA_INIT
m_isFilled=FALSE;
m_nFactor=1;
m_dMax=m_dAve=m_dStd=0;
m_dMin=INT_MAX;
}
void CDlgRelation::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgRelation)
DDX_Control(pDX, IDC_LIST1, m_list);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgRelation, CDialog)
//{{AFX_MSG_MAP(CDlgRelation)
ON_WM_SIZE()
ON_WM_PAINT()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgRelation message handlers
void CDlgRelation::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (m_list.m_hWnd)
{
m_list.MoveWindow(0,0,cx,cy/2);
}
m_nWidth=cx;
m_nHeight=cy;
}
BOOL CDlgRelation::OnInitDialog()
{
CDialog::OnInitDialog();
m_pBuf=NULL;
DWORD style=m_list.GetExtendedStyle();
style |=(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_ONECLICKACTIVATE|LVS_EX_FULLROWSELECT);
m_list.SetExtendedStyle(style);
m_list.SetBkColor(RGB(64,64,64));
m_list.SetTextBkColor(RGB(64,64,64));
m_list.SetTextColor(RGB(255,255,0));
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgRelation::OnPaint()
{
int nBase=50;
CPaintDC dc(this); // device context for painting
CBrush bkBrush(RGB(64,64,64));
dc.FillRect(CRect(0,m_nHeight/2+2,m_nWidth,m_nHeight),&bkBrush);
bkBrush.DeleteObject();
CPen penCord(PS_SOLID,1,RGB(255,255,0)),penLine(PS_SOLID,1,RGB(0,255,0)),*pOldPen;
pOldPen=dc.SelectObject(&penCord);
dc.MoveTo(1,m_nHeight-nBase);
dc.LineTo(m_nWidth,m_nHeight-nBase);
if (!m_isFilled)
{
GetRelationData();
m_isFilled=TRUE;
}
CString strText;
dc.SetTextColor(RGB(255,255,255));
dc.SetBkColor(RGB(64,64,64));
pOldPen=dc.SelectObject(&penCord);
for (int i=0; i<50; i+=1)
{
strText.Format("%d",i);
CRect rect=CRect(i*28*m_nFactor-10,m_nHeight-nBase+7,i*28*m_nFactor+10,m_nHeight-nBase+27);
dc.DrawText(strText,&rect,DT_CENTER);
dc.MoveTo(i*28*m_nFactor,m_nHeight-nBase);
dc.LineTo(i*28*m_nFactor,m_nHeight-nBase+9);
}
CRect rect3(m_nWidth-80,m_nHeight/2+5,m_nWidth-10,m_nHeight/2+80);
CString str;
str.Format("Max=%5.3f\r\nMin=%5.3f\r\nAve=%5.3f\r\nStd=%5.3f",m_dMax,m_dMin,m_dAve,m_dStd);
dc.DrawText(str,&rect3,DT_RIGHT|DT_NOCLIP);
dc.SelectObject(&penLine);
for (i=0; i<m_nSize; i++)
{
UINT temp=m_pBuf[i];
int nOrder=1;
for (int j=i+1; j<m_nSize; j++)
{
if (temp != m_pBuf[j]) break;
nOrder++;
}
dc.MoveTo(m_pBuf[i]*m_nFactor,m_nHeight-nBase-1);
dc.LineTo(m_pBuf[i]*m_nFactor,m_nHeight-nBase-20*nOrder-1);
i+=nOrder-1;
}
dc.SelectObject(pOldPen);
penCord.DeleteObject();
penLine.DeleteObject();
}
void CDlgRelation::OnDestroy()
{
CDialog::OnDestroy();
if (m_pBuf) delete[] m_pBuf;
}
BOOL CDlgRelation::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN)
{
int nChar=pMsg->wParam;
BOOL bShouldRedraw=FALSE;
switch (nChar)
{
case VK_SUBTRACT:
if (m_nFactor > 1)
{
m_nFactor--;
bShouldRedraw=TRUE;
}
break;
case VK_ADD:
if (m_nFactor < 10)
{
m_nFactor++;
bShouldRedraw=TRUE;
}
break;
}
if (bShouldRedraw)
{
CRect rect(0,m_nHeight/2,m_nWidth,m_nHeight);
InvalidateRect(&rect);
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CDlgRelation::GetRelationData()
{
int count=m_pArray->GetSize();
m_nSize=count;
if (!m_pBuf) m_pBuf=new UINT[count];
LOTTERY lty;
for (int i=0; i<count; i++)
{
lty=m_pArray->GetAt(i);
m_pBuf[i]=lty.RelationAnalysis();
}
for (i=0; i<count; i++)
{
for (int j=i+1; j<count; j++)
{
if (m_pBuf[i] < m_pBuf[j])
{
UINT temp=m_pBuf[i];
m_pBuf[i]=m_pBuf[j];
m_pBuf[j]=temp;
}
}
}
if (m_dMin==INT_MAX)
{
double dSum=0;
for (int i=0; i<m_nSize; i++)
{
dSum+=m_pBuf[i];
if (m_pBuf[i] > m_dMax) m_dMax=m_pBuf[i];
if (m_pBuf[i] < m_dMin) m_dMin=m_pBuf[i];
}
m_dAve=dSum/m_nSize;
m_dAve/=28.0;
m_dMax/=28.0;
m_dMin/=28.0;
double dStd=0;
for (i=0; i<m_nSize; i++)
{
dStd+=(m_pBuf[i]/28.0 - m_dAve)*(m_pBuf[i]/28.0 - m_dAve);
}
m_dStd=sqrt(dStd);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -