📄 lotterydlg.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 + -