📄 彩票dlg.cpp
字号:
// 彩票Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "彩票.h"
#include "彩票Dlg.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 };
CHyperLink m_Mail;
//}}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)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
m_Mail.SetURL("mailto:peijikui@sd365.com");
// m_linkTry.SetURL("http://www.sina.com.cn");
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, IDC_MAIL, m_Mail);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_iFlotteryCopys = 1;
m_strMust = _T("");
m_strMustNot = _T("");
m_iSortStyle = 0;
m_iMaxNum = 5;
m_iMinNum = 1;
m_bOdd = FALSE;
m_bMin = FALSE;
m_bMax = FALSE;
m_iOddNum = 3;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_MAIL, m_linkMail);
DDX_Control(pDX, IDC_RESULT, m_ctlResult);
DDX_Control(pDX, IDC_TYPE, m_ctlFlotteryType);
DDX_Text(pDX, IDC_TIMES, m_iFlotteryCopys);
DDX_Control(pDX, IDC_ADDRESS, m_linkAddress);
DDX_Text(pDX, IDC_MUSTSELECT, m_strMust);
DDX_Text(pDX, IDC_MUSTNOTSELECT, m_strMustNot);
DDX_Radio(pDX, IDC_SORT1, m_iSortStyle);
DDX_Text(pDX, IDC_MAXNUM, m_iMaxNum);
DDV_MinMaxInt(pDX, m_iMaxNum, 5, 36);
DDX_Text(pDX, IDC_MINNUM, m_iMinNum);
DDV_MinMaxInt(pDX, m_iMinNum, 1, 40);
DDX_Check(pDX, IDC_SETODD, m_bOdd);
DDX_Check(pDX, IDC_SETMIN, m_bMin);
DDX_Check(pDX, IDC_SETMAX, m_bMax);
DDX_Text(pDX, IDC_ODDNUM, m_iOddNum);
DDV_MinMaxInt(pDX, m_iOddNum, 0, 7);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ADVANCESETTING, OnAdvancesetting)
ON_BN_CLICKED(IDC_BEGIN, OnBegin)
ON_BN_CLICKED(IDC_SEEHISTORY, OnSeehistory)
ON_BN_CLICKED(IDC_SETMAX, OnSetmax)
ON_BN_CLICKED(IDC_SETMIN, OnSetmin)
ON_BN_CLICKED(IDC_SETODD, OnSetodd)
ON_WM_DESTROY()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 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
// TODO: Add extra initialization here
m_ctlFlotteryType.SetCurSel(0);
CRect rcDlg;
GetWindowRect(&rcDlg);
CWnd * pSmall = GetDlgItem(IDC_SMALL);
CRect rcSmall;
pSmall->GetWindowRect(&rcSmall);
rcDlg.bottom = rcSmall.bottom;
MoveWindow(rcDlg);
m_linkAddress.SetURL("www.lottery.gov.cn");
m_linkMail.SetURL(_T("mailto:peijikui@sd365.com"));
pLabelDlg = new CLabelDlg;
pLabelDlg->Create(IDD_LABEL);
pLabelDlg->ShowWindow(SW_SHOW);
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::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 CMyDlg::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();
/*CPaintDC dcClient(this);
//dcClient.CreateCompatibleDC(pDC);
CBitmap bitmap;
if( bitmap.LoadBitmap(IDB_BACK))
{
CDC memDC;
memDC.CreateCompatibleDC(&dcClient);
memDC.SelectObject(&bitmap);
BITMAP bmpInfo;
bitmap.GetBitmap(&bmpInfo);
CRect rcClient;
GetClientRect(&rcClient);
dcClient.StretchBlt(rcClient.left,rcClient.top,rcClient.right,rcClient.bottom,&memDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY);
memDC.DeleteDC();
}
//*/
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnAdvancesetting()
{
// TODO: Add your control notification handler code here
CWnd * pButton = GetDlgItem(IDC_ADVANCESETTING);
ASSERT_VALID(pButton);
CString strButton;
pButton->GetWindowText(strButton);
CString strTitle;
strTitle.LoadString(IDS_ADVANCELARGER);
BOOL bExpand =( strButton == strTitle);
CRect rcDlg;
GetWindowRect(&rcDlg);
if(bExpand)//enlarger the dialog
{
strTitle.LoadString(IDS_ADVANCESMALL);
pButton ->SetWindowText(strTitle);
CWnd * pLarger = GetDlgItem(IDC_LARGER);
CRect rcLarger;
pLarger->GetWindowRect(&rcLarger);
rcDlg.bottom = rcLarger.bottom;
CWnd * pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
MoveWindow(rcDlg,TRUE);//*/
}
else//收缩
{
strTitle.LoadString(IDS_ADVANCELARGER);
pButton ->SetWindowText(strTitle);
CWnd * pLarger = GetDlgItem(IDC_SMALL);
CRect rcSmall;
pLarger->GetWindowRect(&rcSmall);
rcDlg.bottom = rcSmall.bottom;
CWnd * pTemp;
if(m_ctlFlotteryType.GetCurSel() == 0)
pTemp = GetDlgItem(IDC_TYPE);
else
pTemp = GetDlgItem(IDC_BEGIN);
pTemp ->SetFocus();
MoveWindow(rcDlg,TRUE);
}
}
BOOL CMyDlg::CheckValid(int iNum)
{
if(listOk.GetCount() == 0 && listFade.GetCount() == 0)
return TRUE;
int iCount = listOk.GetCount();
POSITION pos = listOk.GetHeadPosition();
for(int i = 0 ; i < iCount; i++)
{
int iTemp = listOk.GetAt(pos);
if(iTemp == iNum)
return FALSE;
}
iCount = listFade.GetCount();
pos = listFade.GetHeadPosition();
for(i = 0; i< iCount; i ++)
{
int iTemp = listFade.GetAt(pos);
if(iTemp == iNum)
return FALSE;
}
return TRUE;
}
void CMyDlg::OnBegin()
{
// TODO: Add your control notification handler code here
UpdateData();
int iTotalSel;
int iToSel;
int iType = m_ctlFlotteryType.GetCurSel();
switch(iType)
{
case 0:
AfxMessageBox("请选择彩票类型");
return;
case 1:
case 4:
iTotalSel = 23;
iToSel = 5;
break;
case 2:
iTotalSel = 29;
iToSel = 7;
break;
case 3:
iTotalSel = 35;
iToSel = 7;
break;
case 5:
iTotalSel = 30;
iToSel = 7;
break;
case 6:
iTotalSel = 36;
iToSel = 7;
break;
default:
break;
}
Flottery flottery(iTotalSel,iToSel);
flottery.SetCareMax(m_bMax);//设定是否指定最大数
flottery.SetCareMin(m_bMin);//设定是否指定最小数
flottery.SetCareOdd(m_bOdd);//设定是否指定奇数个数
flottery.SetMaxNum(m_iMaxNum);//设置最大数
flottery.SetMinNum(m_iMinNum);//设置最小数
flottery.SetOddNum(m_iOddNum);//设置奇数个数
CString strTemp;
m_strMust.TrimLeft();
m_strMust.TrimRight();
//创建必选链表
while(strTemp != m_strMust)
{
int iTemp = m_strMust.FindOneOf(" ,;:#@*&%$");
if(iTemp < 0)
strTemp = m_strMust;
else
{
strTemp = m_strMust.Left(iTemp+1);
m_strMust = m_strMust.Right(m_strMust.GetLength() - iTemp-1);
m_strMust.TrimLeft();
}
int iMustItem = atoi(strTemp.GetBuffer(strTemp.GetLength()));
strTemp.ReleaseBuffer();
flottery.BuildMustList(iMustItem);
}
//创建必不选链表
strTemp.Empty();
m_strMustNot.TrimLeft();
m_strMustNot.TrimRight();
while(strTemp != m_strMustNot)
{
int iTemp = m_strMustNot.FindOneOf(" ,;:#@*&%$");
if(iTemp < 0)
strTemp = m_strMustNot;
else
{
strTemp = m_strMustNot.Left(iTemp+1);
m_strMustNot = m_strMustNot.Right(m_strMustNot.GetLength() - iTemp-1);
m_strMustNot.TrimLeft();
}
int iMustItem = atoi(strTemp.GetBuffer(strTemp.GetLength()));
strTemp.ReleaseBuffer();
// if(iMustItem != 0)
flottery.BuildMustNotList(iMustItem);
}
static int iPrintTimes = 1;
for(int iTimes = 0; iTimes < m_iFlotteryCopys; iTimes++)
{
int iResult = flottery.DoSelect(m_iSortStyle);//进行随机选择
CWnd * pMust;
//
int iHead;
int iCurSel = m_ctlFlotteryType.GetCurSel();
int iPos ;
switch(iResult)
{
case 0:
if(iPrintTimes == 1)//只有在第一次才打印
{
CString strCurType;
iCurSel = m_ctlFlotteryType.GetCurSel();
strTemp.Format(" 共%d注",m_iFlotteryCopys);
m_ctlFlotteryType.GetLBText(iCurSel,strCurType);
strCurType = strCurType +strTemp+ "\n";
iPos = m_ctlResult.GetTextLength();
m_ctlResult.SetSel(iPos,iPos);
m_ctlResult.ReplaceSel(strCurType);
iPrintTimes ++;
}
iPos = m_ctlResult.GetTextLength();
m_ctlResult.SetSel(iPos,iPos);
while(flottery.GetNextInt(iHead))
{
CString strResult;
strResult.Format("%d ",iHead);
m_ctlResult.ReplaceSel(strResult);
}
m_ctlResult.ReplaceSel("\n");
break;
case MUSTTOOMANY:
AfxMessageBox("输入的必选项太多");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
case TWOLISTCOLLIPSE:
AfxMessageBox("必选项和必不选项存在相同数");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
case ITEMERROR:
AfxMessageBox("必选项输入错误");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
case MAXERROR:
AfxMessageBox("输入的最大数错误");
pMust = GetDlgItem(IDC_MAXNUM);
pMust ->SetFocus();
return;
case MINERROR:
AfxMessageBox("输入的最小数错误");
pMust = GetDlgItem(IDC_MINNUM);
pMust ->SetFocus();
return;
case ODDTOOMANY:
AfxMessageBox("输入的奇数个数太多");
pMust = GetDlgItem(IDC_ODDNUM);
pMust ->SetFocus();
return;
case MINBIGGERMAX:
AfxMessageBox("最大数比最小数小");
pMust = GetDlgItem(IDC_MAXNUM);
pMust ->SetFocus();
return;
case ERRANTOOLITTLE:
AfxMessageBox("最大数和最小数区间太小");
pMust = GetDlgItem(IDC_MAXNUM);
pMust ->SetFocus();
return;
case EVENTOOLITTLE:
AfxMessageBox("最大数和最小数区间的偶数不足");
pMust = GetDlgItem(IDC_ODDNUM);
pMust ->SetFocus();
return;
case ODDTOOLITTLE:
AfxMessageBox("最大数和最小数区间的奇数不足");
pMust = GetDlgItem(IDC_ODDNUM);
pMust ->SetFocus();
return;
case MUSTBIGGERMAX:
AfxMessageBox("必选项中的数字大于规定的最大数");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
case MUSTLESSMIN :
AfxMessageBox("必选项中的数字小于规定的最小数");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
case MUSTNOTTOOMANY:
AfxMessageBox("必不选项中选项太多");
pMust = GetDlgItem(IDC_MUSTNOTSELECT);
pMust ->SetFocus();
return;
case MUSTODDTOOMANY:
AfxMessageBox("必选项中项太多");
pMust = GetDlgItem(IDC_MUSTSELECT);
pMust ->SetFocus();
return;
default:
AfxMessageBox("输入存在错误");
return;
}
}
iPrintTimes = 1;
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN://屏蔽回车
return TRUE;
case VK_ESCAPE://屏蔽Esc
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
extern CMyApp theApp;
void CMyDlg::OnSeehistory()
{
// TODO: Add your control notification handler code here
HWND pWnd = ::FindWindow(NULL,"阿皮小精灵");
if(pWnd != NULL)
{
GetDlgItem(IDC_SEEHISTORY) ->SetWindowText("开启小精灵");
delete pLabelDlg;
}
else
{
GetDlgItem(IDC_SEEHISTORY) ->SetWindowText("关闭小精灵");
pLabelDlg = new CLabelDlg;
pLabelDlg->Create(IDD_LABEL);
pLabelDlg->ShowWindow(SW_SHOW);
}
return;
}
void CMyDlg::OnSetmax()
{
// TODO: Add your control notification handler code here
UpdateData();
CEdit * pItem = static_cast<CEdit *>(GetDlgItem(IDC_MAXNUM));
pItem->EnableWindow(m_bMax);
if(m_bMax)
{
pItem->SetFocus();
pItem->SetSel(0,-1);
}
}
void CMyDlg::OnSetmin()
{
// TODO: Add your control notification handler code here
UpdateData();
CEdit * pItem = static_cast<CEdit *>(GetDlgItem(IDC_MINNUM));
pItem->EnableWindow(m_bMin);
if(m_bMin)
{
pItem ->SetFocus();
pItem ->SetSel(0,-1);
}
}
void CMyDlg::OnSetodd()
{
// TODO: Add your control notification handler code here
UpdateData();
CEdit * pItem =static_cast<CEdit *>(GetDlgItem(IDC_ODDNUM));
pItem->EnableWindow(m_bOdd);
if(m_bOdd)
{
pItem ->SetFocus();
pItem ->SetSel(0,-1);
}
}
void CMyDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
HWND hWnd = ::FindWindow(NULL,"阿皮小精灵");
if(hWnd != NULL)
delete pLabelDlg;
}
void CMyDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
if(MessageBox("真的要退出?","警告!",MB_YESNO) == IDYES)
CDialog::OnClose();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -