ShuangSeQiuDlg.cpp
上传用户:flyanjing
上传日期:2015-10-09
资源大小:649k
文件大小:22k
- // ShuangSeQiuDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "ShuangSeQiu.h"
- #include "ShuangSeQiuDlg.h"
- #include "AddHistoryDlg.h"
- #include "HistoryReorcd.h"
- #include "Spliter.h"
- #include "math.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- virtual BOOL OnInitDialog();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- BOOL CAboutDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- // TODO: Add extra initialization here
- SetDlgItemText(IDC_EDIT1,"声明:本程序采用历史开奖记录,用遗传算法计算下期可能出现的红色球号码和兰色球号码.本人不负责使用本程序引起的连带责任.");
-
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- //}}AFX_MSG_MAP
-
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CShuangSeQiuDlg dialog
- CShuangSeQiuDlg::CShuangSeQiuDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CShuangSeQiuDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CShuangSeQiuDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CShuangSeQiuDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CShuangSeQiuDlg)
- DDX_Control(pDX, IDC_CODELIST, m_list);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CShuangSeQiuDlg, CDialog)
- //{{AFX_MSG_MAP(CShuangSeQiuDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_BTN_YUCE, OnBtnYuce)
- ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
- ON_BN_CLICKED(IDC_BTN_VIEWHISTORY, OnBtnViewhistory)
- ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
- ON_BN_CLICKED(IDC_BTN_HISTORYSTAT, OnBtnHistorystat)
- ON_NOTIFY(NM_CLICK, IDC_CODELIST, OnClickCodelist)
- ON_BN_CLICKED(IDC_BTN_HISTORY, OnBtnHistory)
- ON_BN_CLICKED(IDC_BTN_DELETE, OnBtnDelete)
- //}}AFX_MSG_MAP
- ON_NOTIFY (NM_CUSTOMDRAW, IDC_CODELIST, OnCustomdrawMyList)
- ON_MESSAGE(WM_VALIDATE, OnEndLabelEditVariableCriteria) //添加的自定义的消息
- ON_MESSAGE(WM_SET_ITEMS, PopulateComboList)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CShuangSeQiuDlg message handlers
- BOOL CShuangSeQiuDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- //skinppLoadSkin("AquaOS.ssk");
- skinppLoadSkin("MAC.ssk");
- // Add "About..." menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
-
- m_list.EnableVScroll();
- m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
- m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
- m_list.InsertColumn(0,_T("ID"),LVCFMT_LEFT,30);
- m_list.InsertColumn(1,_T("红1"),LVCFMT_LEFT,40);
- m_list.InsertColumn(2,_T("红2"),LVCFMT_LEFT,40);
- m_list.InsertColumn(3,_T("红3"),LVCFMT_LEFT,40);
- m_list.InsertColumn(4,_T("红4"),LVCFMT_LEFT,40);
- m_list.InsertColumn(5,_T("红5"),LVCFMT_LEFT,40);
- m_list.InsertColumn(6,_T("红6"),LVCFMT_LEFT,40);
- m_list.InsertColumn(7,_T("蓝"),LVCFMT_LEFT,40);
- line = 0;
- yuce = 0;
- //初始化变量
- initVar();
- //读历史数据
- ReadHistroy();
- CString strValidChars;//
- m_list.SetReadOnlyColumns(0);//read only
- strValidChars = "0123456789";
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,1);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,2);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,3);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,4);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,5);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,6);//digital only edit
- m_list.SetColumnValidEditCtrlCharacters(strValidChars,7);//digital only edit
-
- // TODO: Add extra initialization here
-
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CShuangSeQiuDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CShuangSeQiuDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CShuangSeQiuDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- //初始化变量
- void CShuangSeQiuDlg::initVar()
- {
- for(int i=0;i<6;i++){
- red[i] ="";
- }
- blue=""; //已经蓝球
- for(int r=0;r<34;r++){
- StatRed[r] =0; //红球累计
- StatRedRate[r] = 0.0; //红球累计率
- sn[r] = r;
- }
- for(int b=0;b<17;b++){
- StatBlue[b] =0; //蓝球累计
- StatBlueRate[b] = 0.0; //蓝球累计率
- }
-
- int dd = 0;
- deleteflag = false;
- totalsn = 0;
- popnum = 20;
- //为预报工作作一些初始化
- for(int item=0;item<popnum;item++){
- for(int r=0;r<6;r++){
- ItemCountRed[item][r]=0;
- }
- ItemCountBlue[item]=0;
- ItemCountRedRate[item] =0;
- }
- MAXRATE = 20; //rate 排序前max的值
- thebest =0;
- yecefail = true;
- }
- //读历史数据
- void CShuangSeQiuDlg::ReadHistroy()
- {
- CHistoryReorcd chr;
- CString path = chr.GetCurPath();
- CString filename = path+ "\history.txt";
- line = chr.GetFileLine(filename);
- //分析每一行的数据,根据不同的内容,把值分到不同的数组中.
- for(int i=1;i<=line;i++){
- CString linestr= chr.GetLineActionFile(filename,i);
- int sub = linestr.Find(":",0);
- CString codestr = linestr.Mid(sub+1);
- CSpliter cSpliter;
- cSpliter.setdata(codestr);
- cSpliter.setsplitflag(",");
- CStringArray a;
- cSpliter.getsplitstrarray(a);
- int number_red=0;
- for(int r=0;r<6;r++){
- number_red = atoi(a.GetAt(r));
- StatRed[number_red] ++;
- }
- //把最后两期的号赋到全局数组中,以供预测时候比较.
- if(i == line-1){
- for(int p=0;p<6;p++){
- int sn =p;
- passval[sn] = atoi(a.GetAt(p));
- }
- }else if (i == line){
- for(int p=0;p<6;p++){
- int sn = 6+p;
- passval[sn] = atoi(a.GetAt(p));
- }
- }
-
- int number_blue = atoi(a.GetAt(6));
- StatBlue[number_blue] ++;
- }
-
- float RedTotolTime = (float)6*line; //红球总出现次数
- float BlueTotolTime = (float)line; //蓝球总出现次数
- //计算机率
- for(int rr=1;rr<34;rr++){
- StatRedRate[rr] = (float)StatRed[rr] / RedTotolTime; //红球累计率
- }
- for(int br=1;br<17;br++){
- StatBlueRate[br] = (float)StatBlue[br] /BlueTotolTime; //蓝球累计率
- }
-
- }
- void CShuangSeQiuDlg::OnBtnYuce()
- {
- yecefail = true;
- while(yecefail){
- //通过算法得到数值
- GAStudy();
- UpdateData(TRUE);
- int i =m_list.GetItemCount();
- CString str;
- str.Format("%d",totalsn+1);
- if (!yecefail){
- SetDlgItemText(IDC_STATIC_INFO,"信息:这是个可选号码!" );
- m_list.InsertItem(LVIF_TEXT|LVIF_STATE, i+1, str, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED, 0, 0);
- }
- if (!yecefail){
- for(int sub=0;sub<6;sub++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[thebest][sub] ]);
- m_list.SetItemText(i,sub+1,s);
- }
- int blue = rand()%(16) + 1;
- CString bstr;
- bstr.Format("%d",blue);
- //兰色球号码,没有怎么做,随机了一个兰色球,哈...
- m_list.SetItemText(i,7,_T(bstr));
- totalsn ++;
- }
- UpdateData(FALSE);
- }
-
- }
- //开始GA学习
- void CShuangSeQiuDlg::GAStudy()
- {
- initpop(); //初始化种群
- int train_count =0;
- int totalval =118; //累加和
- int bubiaole =0;
- int pre = 0;
- while( totalval < 75 || totalval > 125 || train_count< 10 )
- {
- totalval = 0; //初始化为0
- train_count++; //下一代
- ComputeFit(); //计算适应度
-
- SelectAndDeletePop(); //选择和淘汰种群
-
- CrossPop(); //交叉操作
- Mutation(); //变异操作
- thebest = GetResult(); //得到最优种群ID
- int val[6] ={0};
-
- for(int i=0;i<6;i++){
- val[i] = sn[ItemCountRed[thebest][i]];
- totalval = totalval + val[i];
- }
- if (pre == totalval){
- bubiaole ++;
- }else{
- pre = totalval;
- }
- if (bubiaole>10){
- //AfxMessageBox("出现不推荐号码已跳过,请继续预测!");
- SetDlgItemText(IDC_STATIC_INFO,"信息:出现不推荐号码已跳过,系统继续预测中......" );
- yecefail = true;
- break;
- }else{
- yecefail = false;
- }
- //比较与上两期差别
- int samecount =0;
- for(i=0;i<6;i++){
- for(int sn=0;sn<12;sn++){
- if( val[i] == passval[sn] ){
- samecount ++ ;
- if (samecount > 2 ){ //如果大于两个则,放弃这个预测
- yecefail = true;
- SetDlgItemText(IDC_STATIC_INFO,"信息:与上两期相似号跳过,系统继续预测中......" );
- break;
- }else{
- yecefail = false;
- }
- }
- }
- }
- int dd = 0;
-
- }
- }
- //初始化种群
- void CShuangSeQiuDlg::initpop()
- {
- //排序
- int tmp=0;
- for(int i=1;i<34;i++){
- for(int j=i+1;j<34;j++)
- if( StatRedRate[sn[i]] < StatRedRate[sn[j]] ) {
- tmp = sn[i];
- sn[i]= sn[j];
- sn[j] = tmp;
- }
- }
- //间接排序问题
- /*
- CStdioFile file;
- file.Open("sort.txt",CFile::modeCreate|CFile::modeReadWrite);
- int len = 34;
- for(i=1;i<len ;i++){
- CString rate,ratelist;
- ratelist.Format("%.8f",StatRedRate[sn[i]]);
- rate.Format("%d --",sn[i]);
- rate = rate + ratelist;
- file.WriteString(rate);
- file.WriteString("n");
- }
- file.Close();
- */
- srand(time(0));/*设置种子,并生成伪随机序列*/
- for(int pop=0;pop<popnum;pop++){
- for(int j=0;j<6;j++){
- bool same = true;
- int r =0;
- int min = 1;
- int diff=0;
- while(same){
- r = rand()%(MAXRATE) + min;
- for(int next=0 ;next<6; next++){
- if (r == ItemCountRed[pop][next] ){
- same =true;
- diff= 0;
- break;
- }else{
- diff ++;
- }
- }
- if (diff >= 5){
- same = false;
- }
- }
- ItemCountRed[pop][j] = r;
- }
- }
- CStdioFile file;
- file.Open("pop.txt",CFile::modeCreate|CFile::modeReadWrite);
- for(i=0;i<popnum ;i++){
- CString popn="";
- for(int j=0;j<6;j++){
- CString nextp="";
- nextp.Format("%d",sn[ItemCountRed[i][j]] ); //相当于rate.Format("%d --",sn[i]);
- popn = popn + " " + nextp;
- }
- file.WriteString(popn);
- file.WriteString("n");
- }
- file.Close();
- }
- //计算适应度
- void CShuangSeQiuDlg::ComputeFit()
- {
- for(int pop=0;pop<popnum;pop++){
- for(int j=0;j<6;j++){
- int cur = sn[ItemCountRed[pop][j]] ;
- ItemCountRedRate[pop] =ItemCountRedRate[pop] + StatRedRate[cur] ;
- }
- }
- CStdioFile file;
- file.Open("poprate.txt",CFile::modeCreate|CFile::modeReadWrite);
- for(int i=0;i<popnum ;i++){
- CString popn="";
- popn.Format("%.8f",ItemCountRedRate[i]);
- file.WriteString(popn);
- file.WriteString("n");
- }
- file.Close();
- }
- //选择和淘汰种群
- void CShuangSeQiuDlg::SelectAndDeletePop()
- {
- float maxrate =0;
- float minrate =1000;
- for(int i=0;i<popnum ;i++){
- if (ItemCountRedRate[i] > maxrate){
- maxindex = i;
- maxrate = ItemCountRedRate[i] ;
- }
- if (ItemCountRedRate[i] < minrate){
- minindex = i;
- minrate = ItemCountRedRate[i] ;
- }
- }
- CStdioFile file;
- CFileStatus fs;
- if(!CFile::GetStatus(_T("popselect.txt"),fs))
- {
- file.Open("popselect.txt",CFile::modeCreate|CFile::modeReadWrite);
- }else{
- file.Open("popselect.txt",CFile::modeReadWrite);
- }
-
- file.SeekToEnd();
- CString maxindexstr="";
- maxindexstr.Format("%d 最优的种群ID",maxindex);
- file.WriteString(maxindexstr);
- file.WriteString("n");
- CString minindexstr="";
- minindexstr.Format("%d 最差的种群ID",minindex);
- file.WriteString(minindexstr);
- file.WriteString("n");
- file.Close();
-
- }
- //交叉操作
- void CShuangSeQiuDlg::CrossPop()
- {
- srand(time(0));
- int min =0;
- int r = 0; //随机一个种群号
- CStdioFile file;
- file.Open("CrossPop.txt",CFile::modeCreate|CFile::modeReadWrite);
-
- file.SeekToEnd();
- CString rr="";
- rr.Format("%d",minindex);
- CString crossstr="最差的 minindex=" + rr + "n";
- for(int i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[minindex][i] ]);
- crossstr = crossstr + s + " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- bool nextthreesame = true;
- //如果随机的后三位和最优的前三位不同就可以
- while(nextthreesame){
- r = rand()%(popnum) + min; //从种群20中随机一个种群号
- int cuti= 3;
- int cutb =0;
- for(cuti=3;cuti<6;cuti++){ //随机的后三位
- for(cutb=0;cutb<3;cutb++){//最优的前三位比较
- if(sn[ ItemCountRed[r][cuti] ] == sn[ ItemCountRed[maxindex][cutb] ]){
- nextthreesame = true; //有相同的,则要重新找随机种群
- break;
- }
- }
- }
- if(cuti == 6 && cutb == 3){
- nextthreesame = false;
- }
- }
- //用最好的种群和随机的种群进行杂交,替换最差的种群的前三位值
- for(int cutb=0;cutb<3;cutb++){
- ItemCountRed[minindex][cutb] = ItemCountRed[maxindex][cutb] ;
- }
- for(int cuti=3;cuti<6;cuti++){
- ItemCountRed[minindex][cuti] = ItemCountRed[r][cuti] ;
- }
- rr.Format("%d",r);
- crossstr="随机 r=" + rr + "n";
- for(i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[r][i] ]);
- crossstr = crossstr + s+ " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- rr.Format("%d",maxindex);
- crossstr="最好的 maxindex=" + rr + "n";
- for(i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[maxindex][i] ]);
- crossstr = crossstr + s + " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- rr.Format("%d",minindex);
- crossstr="新的 minindex=" + rr + "n";
- for(i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[minindex][i] ]);
- crossstr = crossstr + s + " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- file.Close();
- }
- //变异操作
- void CShuangSeQiuDlg::Mutation()
- {
- float r = (float)rand()/65535 ;
- int min =0;
- int opindex = 0;
- if(r<0.4){
- opindex = rand()%(MAXRATE) + min; //从最优号码里面选一个号
- ItemCountRed[minindex][0] = opindex;
- }else if (r<0.8){
- opindex = rand()%(33) + min; //从全部号里面选一个号
- ItemCountRed[minindex][5] = opindex;
- }else{
- opindex = rand()%(33) + MAXRATE; //从最差号中选一个号
- ItemCountRed[minindex][5] = opindex;
- }
-
- CStdioFile file;
- file.Open("Mutation.txt",CFile::modeCreate|CFile::modeReadWrite);
- CString rr="";
- rr.Format("%.8f", r);
- CString crossstr="随机 r = " + rr + "n";
- file.WriteString(crossstr);
- file.WriteString("n");
- if(r<0.5){
- rr.Format("%d", opindex);
- crossstr="最优选号 opindex = " + rr + "n";
- file.WriteString(crossstr);
- file.WriteString("n");
- }else{
- rr.Format("%d", opindex);
- crossstr="全部选号 opindex = " + rr + "n";
- file.WriteString(crossstr);
- file.WriteString("n");
- }
- crossstr="变异后n";
- for(int i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[minindex][i] ]);
- crossstr = crossstr + s + " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- file.Close();
-
- }
- //得到最优的遗传结果
- int CShuangSeQiuDlg::GetResult()
- {
- int thebestpop =0;
- for(int pop=0;pop<popnum;pop++){
- ItemCountRedRate[pop] =0;
- for(int j=0;j<6;j++){
- int cur = sn[ItemCountRed[pop][j]] ;
- ItemCountRedRate[pop] =ItemCountRedRate[pop] + StatRedRate[cur] ;
- }
- }
- CStdioFile file;
- file.Open("poprateget.txt",CFile::modeCreate|CFile::modeReadWrite);
- for(int i=0;i<popnum ;i++){
- CString popn="";
- popn.Format("%.8f",ItemCountRedRate[i]);
- file.WriteString(popn);
- file.WriteString("n");
- }
- float maxrate =0;
- for(i=0;i<popnum ;i++){
- if (ItemCountRedRate[i] > maxrate){
- maxindex = i;
- maxrate = ItemCountRedRate[i] ;
- }
- }
-
- CString thebest = "";
- thebest.Format("%d",maxindex);
- file.WriteString(thebest);
- file.WriteString("n");
- CString crossstr="最优的种群为:n";
- for(i=0;i<6;i++){
- CString s="";
- s.Format("%d" ,sn[ ItemCountRed[maxindex][i] ]);
- crossstr = crossstr + s + " ";
- }
- file.WriteString(crossstr);
- file.WriteString("n");
- file.Close();
- thebestpop = maxindex;
- return thebestpop;
- }
- //新增历史
- void CShuangSeQiuDlg::OnBtnAdd()
- {
- CAddHistoryDlg adddlg;
- if (adddlg.DoModal()){
- //重新初始化;
- initVar();
- //重新导入记录;
- ReadHistroy();
- }
- }
- //查看历史
- void CShuangSeQiuDlg::OnBtnViewhistory()
- {
- WinExec("Notepad.exe history.txt", SW_SHOW);
- }
- //保存号码
- void CShuangSeQiuDlg::OnBtnSave()
- {
- CStdioFile file;
- file.Open("save.txt",CFile::modeCreate|CFile::modeReadWrite);
- int len = m_list.GetItemCount();
- for(int i=0;i<len ;i++){
- CString codeline;
- for(int j=1;j<8;j++){
- CString code = m_list.GetItemText(i,j);
- codeline = codeline + code + " ";
- }
- file.WriteString(codeline);
- file.WriteString("n");
- }
- file.Close();
- WinExec("Notepad.exe save.txt", SW_SHOW);
-
- }
- //历史统计
- void CShuangSeQiuDlg::OnBtnHistorystat()
- {
- CStdioFile file;
- file.Open("historystat.txt",CFile::modeCreate|CFile::modeReadWrite);
- CString redt;
- redt.Format("%d",line);
-
- CString rss = "现在总期数 " + redt+ "期.n" ;
- file.WriteString(rss);
- for(int r =1;r<34;r++){
- CString rstr,rn;
- rstr.Format("%d",r);
- rn.Format("%d",StatRed[r]);
- CString rp = "红" + rstr + " 出现 " + rn+ "次.";
- CString redrate;
- redrate.Format("%.8f",StatRedRate[r]);
- rp = rp + " 出现率为" + redrate + "n";
- file.WriteString(rp);
- }
- file.WriteString("n***********************n");
- CString bluet;
- bluet.Format("%d",line);
- CString bss = "兰球共出现 " + bluet+ "次.n" ;
- file.WriteString(bss);
- for(int b=1;b<17;b++){
- CString bstr,bn;
- bstr.Format("%d",b);
- bn.Format("%d",StatBlue[b]);
- CString bp = "兰" + bstr + " 出现 " + bn+ "次.";
- CString bluerate;
- bluerate.Format("%.8f",StatBlueRate[b]);
- bp = bp + " 出现率为" + bluerate + "n";
- file.WriteString(bp);
- }
- file.Close();
- WinExec("Notepad.exe historystat.txt", SW_SHOW);
- }
- void CShuangSeQiuDlg::OnClickCodelist(NMHDR* pNMHDR, LRESULT* pResult)
- {
- POSITION Pos = m_list.GetFirstSelectedItemPosition();
- cursel = m_list.GetNextSelectedItem(Pos);
- *pResult = 0;
- }
- LRESULT CShuangSeQiuDlg::PopulateComboList(WPARAM wParam, LPARAM lParam)
- {
- // Get the Combobox window pointer
- CComboBox* pInPlaceCombo = static_cast<CComboBox*> (GetFocus());
- // Get the inplace combbox top left
- CRect obWindowRect;
- pInPlaceCombo->GetWindowRect(&obWindowRect);
- CPoint obInPlaceComboTopLeft(obWindowRect.TopLeft());
- m_list.GetWindowRect(&obWindowRect);
- int iColIndex = (int )wParam;
- CStringList* pComboList = reinterpret_cast<CStringList*>(lParam);
- pComboList->RemoveAll();
- if (obWindowRect.PtInRect(obInPlaceComboTopLeft))
- {
- if(iColIndex==2) //对combox 列进行操作
- {
- // for(int i =0;i<ACTNUM;i++){
- // pComboList->AddTail(actstr[i]);
- // }
- }
- }
- return true;
- }
- LRESULT CShuangSeQiuDlg::OnEndLabelEditVariableCriteria(WPARAM wParam, LPARAM lParam)
- {
- LV_DISPINFO* pDispInfo = (LV_DISPINFO*)lParam;
-
- return 1;
- }
- void CShuangSeQiuDlg::OnBtnHistory()
- {
- }
- void CShuangSeQiuDlg::OnBtnDelete()
- {
- m_list.DeleteItem(cursel);
- }
- //为什么不进这个函数
- LRESULT CShuangSeQiuDlg::OnCustomdrawMyList ( NMHDR* pNMHDR, LRESULT* pResult )
- {
- //This code based on Michael Dunn's excellent article on
- //list control custom draw at http://www.codeproject.com/listctrl/lvcustomdraw.asp
- NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
- // Take the default processing unless we set this to something else below.
- *pResult = CDRF_DODEFAULT;
- // First thing - check the draw stage. If it's the control's prepaint
- // stage, then tell Windows we want messages for every item.
- if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
- {
- *pResult = CDRF_NOTIFYITEMDRAW;
- }
- else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
- {
- // This is the notification message for an item. We'll request
- // notifications before each subitem's prepaint stage.
-
- *pResult = CDRF_NOTIFYSUBITEMDRAW;
- }
- else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
- {
-
- COLORREF clrNewTextColor, clrNewBkColor;
-
- int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
- CString strTemp = m_list.GetItemText(nItem,pLVCD->iSubItem);
- clrNewTextColor = RGB(255,0,0); //Set the text to red
- clrNewBkColor = RGB(255,255,0); //Set the bkgrnd color to blue
-
- pLVCD->clrText = clrNewTextColor;
- pLVCD->clrTextBk = clrNewBkColor;
-
-
- // Tell Windows to paint the control itself.
- *pResult = CDRF_DODEFAULT;
-
-
- }
- return 1;
- }