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

📄 lotterydlg.cpp

📁 内容总数:115188个 今日更新:35个 注册人数:383470 今日注册:51 会员人数:39246 开发者数:9415 工作室数:1287
💻 CPP
字号:
// lotteryDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "lottery.h"
#include "lotteryDlg.h"
#include ".\lotterydlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// ClotteryDlg 对话框



ClotteryDlg::ClotteryDlg(CWnd* pParent /*=NULL*/)
: CDialog(ClotteryDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void ClotteryDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(ClotteryDlg, CDialog)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_NEXT, OnBnClickedNext)
	ON_BN_CLICKED(IDC_SEL1, OnBnClickedSel1)
	ON_BN_CLICKED(IDC_SEL2, OnBnClickedSel2)
	ON_BN_CLICKED(IDC_SEL3, OnBnClickedSel3)
	ON_BN_CLICKED(IDC_SEL4, OnBnClickedSel4)
	ON_CBN_SELCHANGE(IDC_CBLO, OnCbnSelchangeCblo)
	ON_BN_CLICKED(IDC_RETURN, OnBnClickedReturn)
	ON_BN_CLICKED(IDC_PRINT, OnBnClickedPrint)
	ON_BN_CLICKED(IDC_SEL5, OnBnClickedSel5)
END_MESSAGE_MAP()


// ClotteryDlg 消息处理程序

BOOL ClotteryDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	for(int i=0; i<70; i++)
	{
		m_ck[i/10][i%10] = (CButton*)GetDlgItem(IDC_CHECK1+i);
	}

	m_lb1 = (CListBox*)GetDlgItem(IDC_LIST1);
	m_lb2 = (CListBox*)GetDlgItem(IDC_LIST2);
	m_lb3 = (CListBox*)GetDlgItem(IDC_LIST3);
	m_lb4 = (CListBox*)GetDlgItem(IDC_LIST4);
	m_lb5 = (CListBox*)GetDlgItem(IDC_LIST5);
	
	m_cbLo = (CComboBox*)GetDlgItem(IDC_CBLO);
	m_cbHi = (CComboBox*)GetDlgItem(IDC_CBHI);
	m_cb1 = (CComboBox*)GetDlgItem(IDC_CB1);
	m_cb2 = (CComboBox*)GetDlgItem(IDC_CB2);

	m_edit = (CEdit*)GetDlgItem(IDC_EDIT);
	m_sel[0] = (CButton*)GetDlgItem(IDC_SEL1);
	m_sel[1] = (CButton*)GetDlgItem(IDC_SEL2);
	m_sel[2] = (CButton*)GetDlgItem(IDC_SEL3);
	m_sel[3] = (CButton*)GetDlgItem(IDC_SEL4);
	m_sel[4] = (CButton*)GetDlgItem(IDC_SEL5);

	m_s[0] = (CStatic*)GetDlgItem(IDC_STATIC1);
	m_s[1] = (CStatic*)GetDlgItem(IDC_STATIC2);
	m_s[2] = (CStatic*)GetDlgItem(IDC_STATIC3);
	m_sp = (CStatic*)GetDlgItem(IDC_PROCESS);
	m_pt = (CButton*)GetDlgItem(IDC_PRINT);
	
	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void ClotteryDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR ClotteryDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


void ClotteryDlg::OnBnClickedNext()
{
	int i,j,k;
	bool bs[7][10];
	
    //////////////////////////////////////////////////
	int TotalCount = 1;
	for(i=0; i<7; i++)
	{
		k=0;
		for(j=0; j<10; j++)
			if(bs[i][j] = (m_ck[i][j]->GetCheck() == BST_CHECKED))
				k++;
		TotalCount *= k;
	}
	if(TotalCount == 0)
	{
		MessageBox("至少有一位没有选择数字","警告");
		return;
	}
	if(TotalCount > 200000)
	{
		MessageBox("你选择的要生成号码超过200000个","警告");
		return;
	}

	///////////////////////////////////////////////////
	int nMin = 100;
	int nMax = 0;
	int RealGen = 0;
	CString str;
	for(int i0=0; i0<10; i0++)
	{
		if(!bs[0][i0])
			continue;

	for(int i1=0; i1<10; i1++)
	{
		if(!bs[1][i1])
			continue;

	for(int i2=0; i2<10; i2++)
	{
		if(!bs[2][i2])
			continue;
				
	for(int i3=0; i3<10; i3++)
	{
		if(!bs[3][i3])
			continue;

	for(register int i4=0; i4<10; i4++)
	{
		if(!bs[4][i4])
			continue;

	for(register int i5=0; i5<10; i5++)
	{
		if(!bs[5][i5])
			continue;

	for(register int i6=0; i6<10; i6++)
	{
		if(!bs[6][i6])
			continue;

		int tmp[10]={0};
		tmp[i0]++;tmp[i1]++;tmp[i2]++;tmp[i3]++;tmp[i4]++;tmp[i5]++;tmp[i6]++;
		if(tmp[0]>3 || tmp[1]>3 || tmp[2]>3 || tmp[3]>3 || tmp[4]>3 || tmp[5]>3 || tmp[6]>3 || tmp[7]>3 || tmp[8]>3 || tmp[9]>3)
			continue;
		
		int l = i0+i1+i2+i3+i4+i5+i6;
		if(nMin > l)nMin = l;
		if(nMax < l)nMax = l;

		char Code[8];
		Code[0]='0'+i0;Code[1]='0'+i1;Code[2]='0'+i2;Code[3]='0'+i3;Code[4]='0'+i4;Code[5]='0'+i5;Code[6]='0'+i6;Code[7]='\0';
		m_lb1 ->AddString(Code);
		
		if(!(++RealGen%10000))
		{
			str.Format(_T("已经产生号码  %d个"),RealGen);
			m_sp->SetWindowText(str);
		}

	}}}}}}}

	str.Format(_T("共有号码:\n   %d"),RealGen);
	m_s[0]->SetWindowText(str);

	str.Format(_T("共有号码: %d"),RealGen);
	m_s[2]->SetWindowText(str);

	m_cb1->SetCurSel(0);
	m_cb2->SetCurSel(0);

	if(RealGen)
	{
		str.Format(_T("组合范围为:\n  %d到%d"),nMin,nMax);
		m_s[1]->SetWindowText(str);
		
		int n = nMax - nMin + 1;
		for(i=0; i<n; i++)
		{
			str.Format(_T("%d"),nMin+i);
			m_cbLo->AddString(str);
			m_cbHi->AddString(str);
		}
		m_cbLo->SetCurSel(0);
		m_cbHi ->SetCurSel(n-1);
	}else
	{
		m_sel[0]->EnableWindow(FALSE);
		m_cbLo->EnableWindow(FALSE);
		m_cbHi->EnableWindow(FALSE);
		m_cb1->EnableWindow(FALSE);
		m_cb2->EnableWindow(FALSE);
	}
	
	m_sp->SetWindowText("");
	ShowPanel1(false);
	ShowPanel2(true);
}

void ClotteryDlg::ShowPanel1(bool bShow)
{
	int nCmdShow = bShow ? SW_SHOW : SW_HIDE;

	GetDlgItem(IDC_GROUP1)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP2)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP3)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP4)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP5)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP6)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_GROUP7)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_NEXT)->ShowWindow(nCmdShow);
	
	for(int i=0; i<7; i++)
		for(int j=0; j<10; j++)
			m_ck[i][j]->ShowWindow(nCmdShow);
}

void ClotteryDlg::ShowPanel2(bool bShow)
{
	int nCmdShow = bShow ? SW_SHOW : SW_HIDE;
	GetDlgItem(IDC_STATIC4)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_STATIC5)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_STATIC6)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_STATIC7)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_STATIC8)->ShowWindow(nCmdShow);
	GetDlgItem(IDC_RETURN)->ShowWindow(nCmdShow);
	
	for(int i=0; i<3; i++)
	{
		m_s[i]->ShowWindow(nCmdShow);
		m_sel[i]->ShowWindow(nCmdShow);
	}
	m_sel[3]->ShowWindow(nCmdShow);
	m_edit->ShowWindow(nCmdShow);
	m_cbLo->ShowWindow(nCmdShow);
	m_cbHi->ShowWindow(nCmdShow);
	m_cb1->ShowWindow(nCmdShow);
	m_cb2->ShowWindow(nCmdShow);;
	m_lb1->ShowWindow(nCmdShow);
	m_lb2->ShowWindow(nCmdShow);
	m_lb3->ShowWindow(nCmdShow);
	m_lb4->ShowWindow(nCmdShow);
	m_lb5->ShowWindow(nCmdShow);
	m_pt->ShowWindow(nCmdShow);

}
void ClotteryDlg::OnBnClickedSel1()
{
	CString str;
	str.Format(_T("共有号码: "));
	m_s[2]->SetWindowText(str);

	if(m_lb2->GetCount())
		m_lb2->ResetContent();

	int nBeGen = m_lb1->GetCount();
	int nLo,nHi;

	char str0[3];
	m_cbLo->GetLBText(m_cbLo->GetCurSel(),str0);
	nLo = atoi(str0);
	m_cbHi->GetLBText(m_cbHi->GetCurSel(),str0);
	nHi = atoi(str0);
	
	int RealGen = 0;
	for(register int i=0; i<nBeGen; i++)
	{
		char Code[8];
		m_lb1->GetText(i,Code);
		
		int l=Code[0]-7*'0'+Code[1]+Code[2]+Code[3]+Code[4]+Code[5]+Code[6];
		if(l>=nLo && l<=nHi)
		{
			m_lb2->AddString(Code);
			if(!(++RealGen%2500))
			{
				str.Format(_T("已经产生号码  %d个"),RealGen);
				m_sp->SetWindowText(str);
			}
		}
	}
	
	str.Format(_T("共有号码: %d"),RealGen);
	m_s[2]->SetWindowText(str);

	if(RealGen)
		m_sel[1]->EnableWindow();
	else
	{
		m_sel[1]->EnableWindow(FALSE);
	}

	if(m_sel[2]->IsWindowEnabled())
		m_sel[2]->EnableWindow(FALSE);
	if(m_sel[3]->IsWindowEnabled())
		m_sel[3]->EnableWindow(FALSE);
	if(m_pt->IsWindowEnabled())
		m_pt->EnableWindow(FALSE);
	if(m_sel[4]->IsWindowVisible())
	{
		m_sel[4]->ShowWindow(SW_HIDE);
		m_sel[3]->ShowWindow(SW_SHOW);
	}
	if(m_lb3->GetCount())
			m_lb3->ResetContent();
	if(m_lb4->GetCount())
		m_lb4->ResetContent();
	if(m_lb5->GetCount())
		m_lb5->ResetContent();
	m_sp->SetWindowText("");
}

void ClotteryDlg::OnBnClickedSel2()
{
	CString str;
	str.Format(_T("共有号码: "));
	m_s[2]->SetWindowText(str);

	if(m_lb3->GetCount())
		m_lb3->ResetContent();

	int nBeGen = m_lb2->GetCount();
	int m = m_cb1->GetCurSel()+1;

	int RealGen = 0;

	for(register int i=0; i<nBeGen; i++)
	{
		char Code[8];
		m_lb2->GetText(i,Code);

		int tmp[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
		tmp[Code[0]-'0']++;
		tmp[Code[1]-'0']++;
		tmp[Code[2]-'0']++;
		tmp[Code[3]-'0']++;
		tmp[Code[4]-'0']++;
		tmp[Code[5]-'0']++;
		tmp[Code[6]-'0']++;

		if(((tmp[0]>0)+(tmp[1]>0)+(tmp[2]>0)+(tmp[3]>0)+(tmp[4]>0)+(tmp[5]>0)+(tmp[6]>0)+
			(tmp[7]>0)+(tmp[8]>0)+(tmp[9]>0)) == m)
		{
			m_lb3->AddString(Code);
			if(!(++RealGen%2500))
			{
				str.Format(_T("已经产生号码  %d个"),RealGen);
				m_sp->SetWindowText(str);
			}
		}
	}	

	str.Format(_T("共有号码: %d"),RealGen);
	m_s[2]->SetWindowText(str);

	if(RealGen)
		m_sel[2]->EnableWindow();
	else
	{
		m_sel[2]->EnableWindow(FALSE);
	}
	if(m_sel[3]->IsWindowEnabled())
		m_sel[3]->EnableWindow(FALSE);
	if(m_pt->IsWindowEnabled())
		m_pt->EnableWindow(FALSE);
	if(m_sel[4]->IsWindowVisible())
	{
		m_sel[4]->ShowWindow(SW_HIDE);
		m_sel[3]->ShowWindow(SW_SHOW);
	}
	if(m_lb4->GetCount())
			m_lb4->ResetContent();
	if(m_lb5->GetCount())
		m_lb5->ResetContent();
	m_sp->SetWindowText("");
}

void ClotteryDlg::OnBnClickedSel3()
{
	CString str;
	str.Format(_T("共有号码: "));
	m_s[2]->SetWindowText(str);

	if(m_lb4->GetCount())
		m_lb4->ResetContent();

	int nBeGen = m_lb3->GetCount();
	int nNum = m_cb2->GetCurSel() + 1;

	int RealGen = 0;

#define M 0x00000001

	for(register int i=0; i<nBeGen; i++)
	{
		char Code[8];
		m_lb3->GetText(i,Code);
		if((Code[0]&M)+(Code[1]&M)+(Code[2]&M)+(Code[3]&M)+(Code[4]&M)+(Code[5]&M)+(Code[6]&M) == nNum)
		{
			m_lb4->AddString(Code);
			if(!(++RealGen%2500))
			{
				str.Format(_T("已经产生号码  %d个"),RealGen);
				m_sp->SetWindowText(str);
			}
		}
	}

	str.Format(_T("共有号码: %d"),RealGen);
	m_s[2]->SetWindowText(str);

	if(RealGen != 0)
		m_sel[3]->EnableWindow();
	else
	{
		m_sel[3]->EnableWindow(FALSE);
	}
	if(m_pt->IsWindowEnabled())
		m_pt->EnableWindow(FALSE);
	if(m_sel[4]->IsWindowVisible())
	{
		m_sel[4]->ShowWindow(SW_HIDE);
		m_sel[3]->ShowWindow(SW_SHOW);
	}
	if(m_lb5->GetCount())
		m_lb5->ResetContent();
	m_sp->SetWindowText("");
}

void ClotteryDlg::OnBnClickedSel4()
{
	CString str;
	m_edit->GetWindowText(str);
	int SelCount = atoi(str);
	int Total = m_lb4->GetCount();
	
	if(SelCount<=0 || SelCount>Total)
	{
		MessageBox("非法输入","错误");
		return;
	}

	srand((unsigned int)GetTickCount());
	while(SelCount)
	{
		int i = rand()%Total;
		m_lb4->GetText(i,str);
		m_lb5->AddString(str);
		m_lb4->DeleteString(i);
		SelCount--;
		Total--;
	}

	str.Format(_T("共有号码: %d"),m_lb5->GetCount());
	m_s[2]->SetWindowText(str);
	m_pt->EnableWindow();
	m_sel[3]->ShowWindow(SW_HIDE);
	m_sel[4]->ShowWindow(SW_SHOW);
}

void ClotteryDlg::OnCbnSelchangeCblo()
{
	CString str;
	m_cbLo->GetLBText(m_cbLo->GetCurSel(),str);
	int nMin= atoi(str);

	m_cbHi->GetLBText(0,str);
	int nFirst = atoi(str);

	m_cbHi->GetLBText(m_cbHi->GetCurSel(),str);
	if(atoi(str)<nMin) m_cbHi->SetCurSel(m_cbHi->GetCount()-1);

	if(nFirst < nMin)
		do
		{
			m_cbHi->DeleteString(0);
			m_cbHi->GetLBText(0,str);
		}while(atoi(str)<nMin);
	else if(nFirst > nMin)
		do
		{
			str.Format("%d",--nFirst);
			m_cbHi->InsertString(0,str);
		}while(nFirst > nMin);
}

void ClotteryDlg::OnBnClickedReturn()
{
	m_cbLo->ResetContent();
	m_cbHi->ResetContent();
	m_lb1->ResetContent();
	m_lb2->ResetContent();
	m_lb3->ResetContent();
	m_lb4->ResetContent();
	m_lb5->ResetContent();
	m_sel[0]->EnableWindow();
	m_sel[1]->EnableWindow(FALSE);
	m_sel[2]->EnableWindow(FALSE);
	m_sel[3]->EnableWindow(FALSE);
	m_sel[4]->ShowWindow(SW_HIDE);
	m_pt->EnableWindow(FALSE);
	m_cbLo->EnableWindow();
	m_cbHi->EnableWindow();
	m_cb1->EnableWindow();
	m_cb2->EnableWindow();
	m_s[1]->SetWindowText("");

	for(int i=0; i<7; i++)
		for(int j=0; j<10; j++)
			if(m_ck[i][j]->GetCheck() == BST_CHECKED)
				m_ck[i][j]->SetCheck(BST_UNCHECKED);

	ShowPanel1(true);
	ShowPanel2(false);
}

void ClotteryDlg::OnBnClickedPrint()
{
	CPrintDialog dlg(FALSE);
	dlg.GetDefaults();
	
	HDC hdcPrinter = dlg.GetPrinterDC();
	if(hdcPrinter == NULL)
	{
		MessageBox("没有安装打印机","警告");
		return;
	}

	CDC dcPrinter;
	dcPrinter.Attach(hdcPrinter);

	DOCINFO docinfo;
	memset(&docinfo,0,sizeof(DOCINFO));
	docinfo.cbSize = sizeof(DOCINFO);
	docinfo.lpszDocName = "选中号码";

	if(dcPrinter.StartDoc(&docinfo) <= 0)
	{
		MessageBox("未能初始化打印机","警告");
		dcPrinter.DeleteDC();
		return;
	}

	CFont ft;
	ft.CreatePointFont(120,"宋体");
	CFont *oldFt = dcPrinter.SelectObject(&ft);
	dcPrinter.SetBkMode(TRANSPARENT);

	CString str;
	m_lb5->GetText(0,str);
	CSize sz = dcPrinter.GetOutputTextExtent(str);
	int nWidth = dcPrinter.GetDeviceCaps(HORZRES);
	int nx = nWidth/(sz.cx + 30);
	int dx = nWidth/nx;
	int nHeight = dcPrinter.GetDeviceCaps(VERTRES);
	int ny = nHeight/(sz.cy + 10);
	int dy = nHeight/ny;

	int nSum = nx*ny;
	int nTotal = m_lb5->GetCount();
	int nPage = (nTotal-1)/nSum + 1;

	for(int i=0; i<nPage; i++)
	{
		if(dcPrinter.StartPage() <= 0)
		{
			MessageBox("不能启动打印页");
			dcPrinter.AbortDoc();
			goto end;
		}

		int base = nSum *i;
		if(nTotal-base < nSum)
			nSum = nTotal -base;
		for(int j=0; j<nSum; j++)
		{
			m_lb5->GetText(base+j,str);
			dcPrinter.TextOut((j%nx)*dx,(j/nx)*dy,str);
		}

		dcPrinter.EndPage();
	}

	dcPrinter.EndDoc();
end:
	dcPrinter.SelectObject(oldFt);
	dcPrinter.DeleteDC();
}

void ClotteryDlg::OnBnClickedSel5()
{
	int SelCount = m_lb5->GetCount();
	CString str;
	while(SelCount--)
	{
		m_lb5->GetText(SelCount,str);
		m_lb4->AddString(str);
	}
	
	m_lb5->ResetContent();
	str.Format(_T("共有号码: %d"),m_lb4->GetCount());
	m_s[2]->SetWindowText(str);
	m_pt->EnableWindow(FALSE);
	m_sel[4]->ShowWindow(SW_HIDE);
	m_sel[3]->ShowWindow(SW_SHOW);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -