📄 childview.cpp
字号:
// ChildView.cpp : implementation of the CChildView class
//
#include "stdafx.h"
#include "Lottery.h"
#include "ChildView.h"
#include "DlgChoseNumber.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define C_30_7 2035800
#define C_30_8 5852925
CChildView *pCV;
extern CListCtrl * g_pList;
/////////////////////////////////////////////////////////////////////////////
// CChildView
CChildView::CChildView()
{
m_nMin=2;
m_nMax=10;
}
CChildView::~CChildView()
{
if (m_pFreq) delete [] m_pFreq;
}
BEGIN_MESSAGE_MAP(CChildView,CWnd )
//{{AFX_MSG_MAP(CChildView)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_FREQUENCY_STATISTICS, OnFrequencyStatistics)
ON_COMMAND(ID_EVEN_ODD_STATISTICS, OnEvenOddStatistics)
ON_COMMAND(IDD_CONNTINUED_NUMBER, OnConntinuedNumber)
ON_COMMAND(IDD_SEGMENT_STATISTICS, OnSegmentStatistics)
ON_COMMAND(ID_RELATION_STATISTICS, OnRelationStatistics)
ON_COMMAND(ID_LOTTERY, OnLottery)
ON_NOTIFY(NM_RCLICK,IDC_LISTCTRL_LOTTERY,OnListRClick)
ON_NOTIFY(NM_CLICK,IDC_LISTCTRL_LOTTERY,OnListClick)
ON_NOTIFY(LVN_KEYDOWN,IDC_LISTCTRL_LOTTERY,OnListKeydown)
ON_COMMAND(ID_SETUP_STATISTICS_NUMBER, OnSetupStatisticsNumber)
ON_COMMAND(ID_SHOW_CURVE_VIEW, OnShowCurveView)
ON_COMMAND(ID_SHOW_SEQUENCY, OnShowSequency)
ON_COMMAND(ID_SHOW_GRAPH_LIST, OnShowGraphList)
ON_UPDATE_COMMAND_UI(ID_SHOW_GRAPH_LIST, OnUpdateShowGraphList)
ON_COMMAND(ID_SHOW_SUM_WINDOW, OnShowSumWindow)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChildView message handlers
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);
return TRUE;
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
}
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd ::OnCreate(lpCreateStruct) == -1)
return -1;
pCV=this;
CRect rect;
GetClientRect(&rect);
m_list.Create(LVS_NOSORTHEADER|WS_TABSTOP|LVS_REPORT|LVS_SHOWSELALWAYS|WS_VISIBLE|WS_BORDER|WS_CHILD,rect,this,IDC_LISTCTRL_LOTTERY);
m_list.InsertColumn(0,"期号",LVCFMT_CENTER,30,0);
m_list.InsertColumn(1," 1 ",LVCFMT_CENTER,30,1);
m_list.InsertColumn(2," 2 ",LVCFMT_CENTER,30,2);
m_list.InsertColumn(3," 3 ",LVCFMT_CENTER,30,3);
m_list.InsertColumn(4," 4 ",LVCFMT_CENTER,30,4);
m_list.InsertColumn(5," 5 ",LVCFMT_CENTER,30,5);
m_list.InsertColumn(6," 6 ",LVCFMT_CENTER,30,6);
m_list.InsertColumn(7," 7 ",LVCFMT_CENTER,30,7);
m_list.InsertColumn(8,"特号",LVCFMT_CENTER,30,8);
m_listFrequency.Create(LVS_NOSORTHEADER|LVS_REPORT|WS_VISIBLE|WS_CHILD|WS_BORDER,rect,this,IDC_LISTBOX_FREQUENCY);
m_listRelation.Create(LVS_NOSORTHEADER|LVS_REPORT|WS_VISIBLE|WS_CHILD|WS_BORDER,rect,this,IDC_LISTBOX_RELATION);
m_listConntinue.Create(LVS_NOSORTHEADER|LVS_REPORT|WS_VISIBLE|WS_CHILD|WS_BORDER,rect,this,IDC_LISTBOX_CONNTINUE);
DWORD style=m_list.GetExtendedStyle();
style |=(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE);
m_list.SetExtendedStyle(style);
m_listFrequency.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
m_listRelation.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
m_listConntinue.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
/* m_list.SetTextBkColor(RGB(64,64,64));
m_list.SetBkColor(RGB(64,64,64));
m_list.SetTextColor(RGB(255,255,0));
m_listFrequency.SetTextBkColor(RGB(64,64,64));
m_listFrequency.SetBkColor(RGB(64,64,64));
m_listFrequency.SetTextColor(RGB(255,255,0));
m_listRelation.SetTextBkColor(RGB(64,64,64));
m_listRelation.SetBkColor(RGB(64,64,64));
m_listRelation.SetTextColor(RGB(255,255,0));
m_listConntinue.SetTextBkColor(RGB(64,64,64));
m_listConntinue.SetBkColor(RGB(64,64,64));
m_listConntinue.SetTextColor(RGB(255,255,0));*/
m_iWidth=5;
m_bShowGraph=FALSE;
m_GraphList.Create(LVS_NOSORTHEADER|WS_TABSTOP|LVS_REPORT|LVS_SHOWSELALWAYS|WS_BORDER|WS_CHILD,rect,this,IDC_LISTCTRL_GRAPH);
m_GraphList.InsertColumn(0,"期号",LVCFMT_CENTER,30,0);
for (int i=0; i<30; i++)
{
CString strText;
strText.Format("%d",i+1);
m_GraphList.InsertColumn(i+1,strText,LVCFMT_CENTER,20,i+1);
}
m_GraphList.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE);
m_GraphList.SetTextColor(RGB(255,0,0));
//--------------Initialize Flat ScrollBar------------//
InitializeFlatSB(m_list.m_hWnd);
FlatSB_EnableScrollBar(m_list.m_hWnd,SB_BOTH,ESB_ENABLE_BOTH);
// FlatSB_SetScrollProp(m_list.m_hWnd,WSB_PROP_VBKGCOLOR,RGB(64,64,64),FALSE);
// FlatSB_SetScrollProp(m_list.m_hWnd,WSB_PROP_HBKGCOLOR,RGB(64,64,64),FALSE);
InitializeFlatSB(m_GraphList.m_hWnd);
FlatSB_EnableScrollBar(m_GraphList.m_hWnd,SB_BOTH,ESB_ENABLE_BOTH);
// FlatSB_SetScrollProp(m_GraphList.m_hWnd,WSB_PROP_VBKGCOLOR,RGB(64,64,64),FALSE);
// FlatSB_SetScrollProp(m_GraphList.m_hWnd,WSB_PROP_HBKGCOLOR,RGB(64,64,64),FALSE);
InitializeFlatSB(m_listConntinue.m_hWnd);
FlatSB_EnableScrollBar(m_listConntinue.m_hWnd,SB_BOTH,ESB_ENABLE_BOTH);
// FlatSB_SetScrollProp(m_listConntinue.m_hWnd,WSB_PROP_VBKGCOLOR,RGB(64,64,64),FALSE);
// FlatSB_SetScrollProp(m_listConntinue.m_hWnd,WSB_PROP_HBKGCOLOR,RGB(64,64,64),FALSE);
InitializeFlatSB(m_listFrequency.m_hWnd);
FlatSB_EnableScrollBar(m_listFrequency.m_hWnd,SB_BOTH,ESB_ENABLE_BOTH);
// FlatSB_SetScrollProp(m_listFrequency.m_hWnd,WSB_PROP_VBKGCOLOR,RGB(64,64,64),FALSE);
// FlatSB_SetScrollProp(m_listFrequency.m_hWnd,WSB_PROP_HBKGCOLOR,RGB(64,64,64),FALSE);
InitializeFlatSB(m_listRelation.m_hWnd);
FlatSB_EnableScrollBar(m_listRelation.m_hWnd,SB_BOTH,ESB_ENABLE_BOTH);
// FlatSB_SetScrollProp(m_listRelation.m_hWnd,WSB_PROP_VBKGCOLOR,RGB(64,64,64),FALSE);
// FlatSB_SetScrollProp(m_listRelation.m_hWnd,WSB_PROP_HBKGCOLOR,RGB(64,64,64),FALSE);
//--------------Initialize Flat ScrollBar------------//
LoadLotteryNumber(false);
m_iStart=-1;
m_iEnd=-1;
m_pFreq=NULL;
m_dlgFre.Create(IDD_DIALOG_FREQUENCY_STATISTICS,this);
m_dlgEvenOdd.Create(IDD_DIALOG_EVEN_ODD,this);
m_dlgConn.Create(IDD_DIALOG_CONNTINUED_NUMBER,this);
m_dlgSeg.Create(IDD_DIALOG_SEGMENT,this);
m_dlgRel.Create(IDD_DIALOG_RELATION,this);
m_dlgLottery.Create(IDD_DIALOG_LOTTERY,this);
m_dlgSeq.Create(IDD_DIALOG_SEQUENCY,this);
m_CurveView.Create(IDD_DIALOG_CURVE_VIEW,this);
m_dlgSum.Create(IDD_DIALOG_SUM,this);
return 0;
}
void CChildView::ShowGraphList(BOOL bShow)
{
if (bShow)
{
m_GraphList.ShowWindow(SW_SHOWNORMAL);
m_list.ShowWindow(SW_HIDE);
m_listRelation.ShowWindow(SW_HIDE);
m_listFrequency.ShowWindow(SW_HIDE);
m_listConntinue.ShowWindow(SW_HIDE);
}
else
{
m_GraphList.ShowWindow(SW_HIDE);
m_list.ShowWindow(SW_SHOWNORMAL);
m_listRelation.ShowWindow(SW_SHOWNORMAL);
m_listFrequency.ShowWindow(SW_SHOWNORMAL);
m_listConntinue.ShowWindow(SW_SHOWNORMAL);
}
}
void CChildView::OnShowGraphList()
{
if (m_bShowGraph) m_bShowGraph=FALSE;
else m_bShowGraph=TRUE;
ShowGraphList(m_bShowGraph);
}
void CChildView::OnUpdateShowGraphList(CCmdUI* pCmdUI)
{
if (m_bShowGraph) pCmdUI->SetCheck(1);
else pCmdUI->SetCheck(0);
}
//------------------主窗口ONSIZE处理--------------------//
void CChildView::OnSize(UINT nType, int cx, int cy)
{
CWnd ::OnSize(nType, cx, cy);
int w=GetSystemMetrics(SM_CXVSCROLL);
if (m_listFrequency.m_hWnd)
{
m_listFrequency.MoveWindow(cx/5*2,0,cx/5,cy);
}
if (m_listRelation.m_hWnd)
{
m_listRelation.MoveWindow(cx/5*3,0,cx/5*2,cy/5*3);
}
if (m_listConntinue.m_hWnd)
{
m_listConntinue.MoveWindow(cx/5*3,cy/5*3,cx/5*2,cy/5*2);
}
if (m_GraphList.m_hWnd)
{
m_GraphList.MoveWindow(0,0,cx,cy,FALSE);
m_GraphList.SetColumnWidth(0,50);
m_GraphList.SetColumnWidth(30,30);
for (int i=1; i<30; i++)
{
m_GraphList.SetColumnWidth(i,(cx-100)/29);
}
}
if (m_list.m_hWnd)
{
m_list.SetColumnWidth(0,70);
m_list.MoveWindow(0,0,cx/5*2,cy);
cx=cx/5*2-70;
for (int i=1; i<8; i++)
{
m_list.SetColumnWidth(i,(cx-w)/8-1);
}
m_list.SetColumnWidth(i,(cx-w)-(cx-w)/8*7+7);
}
}
//------------------从文件或者资源读入彩票号码--------------------//
void CChildView::LoadLotteryNumber(BOOL bFromFile)
{
if (bFromFile)
{
CStdioFile file;
CString strFileName="lottery.txt";
if (!file.Open(strFileName,CFile::modeRead))
{
CFileDialog fd(TRUE,NULL,"lottery.txt");
if (fd.DoModal()==IDCANCEL)
return;
strFileName=fd.GetPathName();
file.Open(strFileName,CFile::modeRead);
}
CString strBuf,strNum;
LOTTERY lty;
int order=0;
while(file.ReadString(strBuf))
{
int k=0;
int len=strBuf.GetLength();
m_list.InsertItem(order,NULL);
int i=0;
refill:
while(i<len && (strBuf.GetAt(i) < 48 || strBuf.GetAt(i) > 57)) i++;
int j=i;
while(i<len && strBuf.GetAt(i) > 47 && strBuf.GetAt(i) < 58) i++;
strNum=strBuf.Mid(j,i-j);
lty.i[k]=atoi(strNum.GetBuffer(strNum.GetLength()));
m_list.SetItemText(order,k++,strNum);
if (k<9) goto refill;
order++;
m_array.Add(lty);
}
file.Close();
}
else
{//load lottery from resource
CString strName;
strName.Format("#%d",IDR_MYDATA1);
HRSRC hRsrc=FindResource(NULL,strName,"MYDATA");
if (hRsrc)
{
HGLOBAL hGlobal=LoadResource(NULL,hRsrc);
if (hGlobal)
{
char *p=(char*)LockResource(hGlobal);
CString str=p;
CString strBuf="",strNum;
LOTTERY lty;
int order=0;
while (*p!=0xa) {strBuf+=*p;p++;}
strBuf+=*p;p++;
while(strBuf.GetLength() > 20 && strBuf.GetAt(0)==' ')
{
int k=0;
int len=strBuf.GetLength();
m_list.InsertItem(order,NULL);
int i=0;
refill2:
while(i<len && (strBuf.GetAt(i) < 48 || strBuf.GetAt(i) > 57)) i++;
int j=i;
while(i<len && strBuf.GetAt(i) > 47 && strBuf.GetAt(i) < 58) i++;
strNum=strBuf.Mid(j,i-j);
lty.i[k]=atoi(strNum.GetBuffer(strNum.GetLength()));
m_list.SetItemText(order,k++,strNum);
if (k<9) goto refill2;
order++;
m_array.Add(lty);
strBuf="";
while (*p!=0xa) {strBuf+=*p;p++;}
strBuf+=*p;p++;
}
}
}
}
//fill the graphlist
int size = m_array.GetSize();
for (int i=0; i<m_array.GetSize(); i++)
{
m_GraphList.InsertItem(i,NULL);
LOTTERY lty=m_array.GetAt(i);
CString strTemp;
strTemp.Format("%d",lty.t.t0);
m_GraphList.SetItemText(i,0,strTemp);
strTemp="▲";
for (int j=1; j<8; j++)
{
m_GraphList.SetItemText(i,lty.i[j],strTemp);
}
strTemp="△";
m_GraphList.SetItemText(i,lty.i[8],strTemp);
}
}
//------------------概率统计菜单处理--------------------//
void CChildView::OnFrequencyStatistics()
{
if (!m_dlgFre.m_isFilled)
{
FrequencyStatistics(0, m_array.GetSize()-1, &(m_dlgFre.m_list),&(m_dlgFre.m_list2));
m_dlgFre.m_isFilled=TRUE;
}
m_dlgFre.ShowWindow(SW_SHOWNORMAL);
}
//----------------奇偶统计菜单处理------------------//
void CChildView::OnEvenOddStatistics()
{
if (!m_dlgEvenOdd.m_isFilled)
{
EvenOddStatistics(0, m_array.GetSize()-1, &(m_dlgEvenOdd.m_list));
m_dlgEvenOdd.m_isFilled=TRUE;
}
m_dlgEvenOdd.ShowWindow(SW_SHOWNORMAL);
}
//----------------连字号统计菜单处理-----------------//
void CChildView::OnConntinuedNumber()
{
if (!m_dlgConn.m_isFilled)
{
ConntinuedNumber(0, m_array.GetSize()-1, &(m_dlgConn.m_list));
m_dlgConn.m_isFilled=TRUE;
}
m_dlgConn.ShowWindow(SW_SHOWNORMAL);
}
//----------------分段统计菜单处理-----------------//
void CChildView::OnSegmentStatistics()
{
if (!m_dlgSeg.m_isFilled )
{
SegmentStatistics(0, m_array.GetSize()-1, &(m_dlgSeg.m_list));
m_dlgSeg.m_isFilled=TRUE;
}
m_dlgSeg.ShowWindow(SW_SHOWNORMAL);
}
//----------------相关统计菜单处理-----------------//
void CChildView::OnRelationStatistics()
{
if (!m_dlgRel.m_isFilled)
{
m_dlgRel.m_pArray=&m_array;
RelationStatistics(0, m_array.GetSize()-1, &(m_dlgRel.m_list));
}
g_pList=&(m_dlgRel.m_list);
m_dlgRel.ShowWindow(SW_SHOWNORMAL);
}
//------------------产生中奖号码--------------------//
void CChildView::OnLottery()
{
if (!m_dlgRel.m_isFilled)
{
m_dlgRel.m_pArray=&m_array;
RelationStatistics(0, m_array.GetSize()-1, &(m_dlgRel.m_list));
}
if (!m_dlgFre.m_isFilled)
{
FrequencyStatistics(0, m_array.GetSize()-1, &(m_dlgFre.m_list),&(m_dlgFre.m_list2));
m_dlgFre.m_isFilled=TRUE;
m_dlgFre.ForceInvalidate();
}
g_pList=&(m_dlgRel.m_list);
m_dlgRel.GetRelationData();
CString strText;
strText.Format("%6.3f",m_dlgRel.m_dAve);
m_dlgLottery.SetDlgItemText(IDC_EDIT_RELATION,strText);
strText.Format("%5.3f",m_dlgFre.m_dAve);
m_dlgLottery.SetDlgItemText(IDC_EDIT_FS1,strText);
m_dlgLottery.ShowWindow(SW_SHOWNORMAL);
}
//----------------鼠标右键单击中奖列表处理-----------------//
void CChildView::OnListRClick(NMHDR * pNotifyStruct, LRESULT * result)
{
NMLISTVIEW *pL=(NMLISTVIEW *)pNotifyStruct;
POINT p=pL->ptAction;
ClientToScreen(&p);
CMenu menu,* pSubMenu;
menu.LoadMenu(IDR_MAINFRAME);
pSubMenu=menu.GetSubMenu(0);
pSubMenu->DeleteMenu(ID_APP_EXIT,MF_BYCOMMAND);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,p.x,p.y,this);
pSubMenu->DestroyMenu();
menu.DestroyMenu();
}
//----------------键盘消息列表项改变处理-----------------//
void CChildView::OnListKeydown( NMHDR * pNotifyStruct, LRESULT * result )
{
NMLVKEYDOWN *pL=(NMLVKEYDOWN*)pNotifyStruct;
{
NMLISTVIEW nl;
LRESULT result;
switch (pL->wVKey)
{
case VK_UP:
if (m_iStart > 0)
{
nl.iItem=((m_iEnd - m_iStart)>>1) + m_iStart - 1;
OnListClick((NMHDR*)&nl,&result);
}
break;
case VK_DOWN:
if (m_iEnd < m_array.GetSize()-1)
{
nl.iItem=((m_iEnd - m_iStart)>>1) + m_iStart + 1;
OnListClick((NMHDR*)&nl,&result);
}
break;
}
}
}
//----------------鼠标左键单击中奖列表处理-----------------//
void CChildView::OnListClick(NMHDR * pNotifyStruct, LRESULT * result)
{
NMLISTVIEW *pL=(NMLISTVIEW *)pNotifyStruct;
if (pL->iItem >= 0)
{
int count=m_list.GetItemCount();
if (m_iStart != -1 && m_iEnd != -1)
{
for (int i=m_iStart; i<m_iEnd+1; i++)
m_list.SetCheck(i,FALSE);
}
if (((int)(pL->iItem) + (int)m_iWidth/2) >= count)
{
m_iEnd = count-1;
m_iStart = m_iEnd-m_iWidth+1;
}
else if (((int)(pL->iItem) - (int)m_iWidth/2) < 0)
{
m_iStart=0;
m_iEnd=m_iStart+m_iWidth-1;
}
else
{
m_iStart=pL->iItem - m_iWidth/2;
m_iEnd=pL->iItem + m_iWidth/2 - ((m_iWidth % 2)?0:1);
}
for (int i=m_iStart; i<m_iEnd+1; i++)
m_list.SetCheck(i,TRUE);
FrequencyStatistics(m_iStart,m_iEnd,&m_listFrequency);
RelationStatistics(m_iStart,m_iEnd,&m_listRelation);
ConntinuedNumber(m_iStart,m_iEnd,&m_listConntinue);
}
}
//------------------分段统计--------------------//
void CChildView::SegmentStatistics(int iStart, int iEnd, CListBox *pListBox)
{
if (pListBox->GetCount())
pListBox->ResetContent();
int count=(iEnd - iStart) + 1;
UINT greate15=0;
UINT less15=0;
UINT between2030=0,between1020=0,between010=0;
int acNumber[30];
ZeroMemory(acNumber,30*sizeof(int));
double dSum=0;
for (int i=iStart; i<iEnd+1; i++)
{
LOTTERY lty=m_array.GetAt(i);
acNumber[lty.GetAC()]++;
dSum+=lty.GetAC();
for (int j=0; j<9; j++)
{
if (lty.i[j] < 11)
{
between010++;
less15++;
}
if (lty.i[j] > 10 && lty.i[j] < 15)
{
between1020++;
less15++;
}
if (lty.i[j] >= 15 && lty.i[j] < 21)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -