📄 awardfortvs.cpp
字号:
// AwardForTVS.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <time.h>
#include <string>
#include <vector>
using namespace std;
vector<string> vMobileNum;
vector<int> vAwardSeq;
int wnd_w=0,wnd_h=0;
RECT rc;
HINSTANCE hInst;
BOOL fTimer=FALSE;
BOOL fAward=FALSE;
int g_rd=-1;
char * NUMBERBMPS[11]={"IDB_BITMAP_0","IDB_BITMAP_1","IDB_BITMAP_2","IDB_BITMAP_3",
"IDB_BITMAP_4","IDB_BITMAP_5","IDB_BITMAP_6","IDB_BITMAP_7",
"IDB_BITMAP_8","IDB_BITMAP_9","IDB_BITMAP_10"};
LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
void OnTimer(HWND);
void draw_mobile(HWND,int);
void LoadData(HWND);
void OutputData(HWND);
void draw_text(HWND,LPCSTR);
BOOL IsNumber(LPCSTR);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor=NULL;
wc.hIcon=NULL;
wc.hInstance=hInstance;
wc.lpfnWndProc=(WNDPROC)MainWndProc;
wc.lpszClassName="award";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
if(!RegisterClass(&wc))
return -1;
wnd_w=GetSystemMetrics(SM_CXFULLSCREEN);
wnd_h=GetSystemMetrics(SM_CYFULLSCREEN);
rc.top=wnd_h/3;
rc.left=wnd_w/4;
rc.bottom=wnd_h/3+30;
rc.right=wnd_w/4*3;
srand(time(NULL));
hInst=hInstance;
HWND hWnd=CreateWindowEx(0,"award","南方电视台越看越有味答题抽奖程序--按ESCAPE退出",WS_VISIBLE,0,0,wnd_w,wnd_h,NULL,NULL,hInstance,NULL);
if(NULL == hWnd)
return -1;
ShowWindow(hWnd,nCmdShow);
draw_text(hWnd,"程序开始,首先按ENTER键载入手机号码!");
UpdateWindow(hWnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
switch(msg) {
case WM_PAINT:
BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
break;
case WM_KEYDOWN:
switch(wParam){
case VK_ESCAPE:
KillTimer(hWnd,1);
DestroyWindow(hWnd);
break;
case VK_RETURN:
LoadData(hWnd);
break;
case VK_SPACE:
if(!fTimer)
{
SetTimer(hWnd, 1, 30, NULL);
fTimer=TRUE;
}
else
{
KillTimer(hWnd, 1);
fTimer=FALSE;
char szTemp[100]={0};
if(fAward)
{
fAward=FALSE;
vAwardSeq.push_back(g_rd);
sprintf(szTemp,"本次抽出的号码为%s,请按SPACE抽取下一个。",vMobileNum[g_rd].c_str());
draw_text(hWnd,szTemp);
}
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
break;
case WM_TIMER:
OnTimer(hWnd);
break;
case WM_DESTROY:
OutputData(hWnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}
void OutputData(HWND hWnd)
{
char filename[50]={0};
SYSTEMTIME st;
GetLocalTime(&st);
sprintf(filename,"award_%d%02d%02d.txt",st.wYear,st.wMonth,st.wDay);
FILE *fp=NULL;
if((fp=fopen(filename,"w"))==NULL)
{
draw_text(hWnd,"打开数据文件错误,请检查数据文件(award.txt)是否存在!");
return;
}
else
{
char szTemp[13]={0};
for(int i=0;i<vAwardSeq.size();i++)
{
memset(szTemp,0,13);
strcpy(szTemp,vMobileNum[vAwardSeq[i]].c_str());
szTemp[11]='\n';
fputs(szTemp,fp);
}
fclose(fp);
}
}
void LoadData(HWND hWnd)
{
FILE *fp=NULL;
if((fp=fopen("mobilenum.txt","r"))==NULL)
{
draw_text(hWnd,"打开数据文件错误,请检查数据文件(mobilenum.txt)是否存在!");
return;
}
else
{
vMobileNum.clear();
vAwardSeq.clear();
char szMobileNum[15];
while(1)
{
if(!(feof(fp)==0))
break;
memset(szMobileNum,0,15);
fread(szMobileNum,1,1,fp);
if((BYTE)szMobileNum[0] < 0x30 || (BYTE)szMobileNum[0] > 0x39)
continue;
else if((BYTE)szMobileNum[0] != 0x31)
continue;
else
{
fread(szMobileNum+sizeof(char),10,1,fp);
//szMobileNum[11]='\0';
if(11==strlen(szMobileNum) && IsNumber(szMobileNum) && 0x31==szMobileNum[0] && 0x33==szMobileNum[1])
{
vMobileNum.push_back((string)szMobileNum);
}
}
}
fclose(fp);
if(vMobileNum.size()>0)
{
char szTemp[1024]={0};
sprintf(szTemp,"载入数据完毕,总数为%d个手机号码,按SPACE键开始抽奖!",vMobileNum.size());
draw_text(hWnd,szTemp);
}
else
{
draw_text(hWnd,"无数据或数据格式错误,请检查数据文件(award.txt)");
}
}
}
void OnTimer(HWND hWnd)
{
int iMobileCount=vMobileNum.size();
int ird=-1;
if(iMobileCount>0)
{
ird=rand()%iMobileCount;
if(ird<0 || ird>=iMobileCount)
return;
for(int j=0;j<vAwardSeq.size();j++)
{
if(vAwardSeq[j] == ird)
return;
}
g_rd=ird;
fAward=TRUE;
draw_mobile(hWnd, g_rd);
}
else
{
KillTimer(hWnd,1);
fTimer=FALSE;
draw_text(hWnd,"无数据,请按ENTER键载入手机号码。");
}
}
void draw_text(HWND hWnd, LPCSTR szStr)
{
if(NULL==szStr)
return;
if(strcmp(szStr,"")==0)
return;
HDC hdc=GetDC(hWnd);
SelectObject(hdc, GetStockObject(BLACK_BRUSH));
Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom);
SetTextColor(hdc,RGB(255,0,0));
SetBkMode(hdc,TRANSPARENT);
DrawText(hdc,szStr,-1,&rc,DT_CENTER|DT_VCENTER);
ReleaseDC(hWnd,hdc);
}
void draw_mobile(HWND hWnd, int ird)
{
if(ird<0 || ird>vMobileNum.size())
return;
HDC hdc,hmemdc,htempdc;
HBITMAP hcurrentbackgrd,hbfont,holdbmpbgr,holdbmpfont_;
hdc=GetDC(hWnd);
hmemdc=CreateCompatibleDC(hdc);
htempdc=CreateCompatibleDC(hdc);
hcurrentbackgrd=CreateCompatibleBitmap(hdc,wnd_w/*Width*/,wnd_h/*Height*/);
holdbmpbgr=(HBITMAP)SelectObject(hmemdc,hcurrentbackgrd);
char szTemp[3]={0};
char szMobileNum[13]={0};
strcpy(szMobileNum,vMobileNum[ird].c_str());
for(int i=0;i<strlen(szMobileNum);i++)
{
memset(szTemp,0,3);
if(3==i || 4==i || 5==i || 6==i || 7==i)
strcpy(szTemp,"10");
else
szTemp[0]=szMobileNum[i];
hbfont=LoadBitmap(hInst,NUMBERBMPS[atoi(szTemp)]);
holdbmpfont_=(HBITMAP)SelectObject(htempdc,hbfont);
BitBlt(hmemdc,wnd_w/4+40*i,wnd_h/2,35+5,60+5,htempdc,0,0,SRCINVERT);
DeleteObject(SelectObject(htempdc,holdbmpfont_));
}
BitBlt(hdc,0,0,wnd_w,wnd_h,hmemdc,0,0,SRCCOPY);
DeleteObject(hcurrentbackgrd);
DeleteObject(hmemdc);
DeleteObject(htempdc);
ReleaseDC(hWnd,hdc);
}
BOOL IsNumber(LPCSTR p_szSource)
{
for(int i=0; i<strlen(p_szSource); i++){
if((BYTE)p_szSource[i]<0x30 || (BYTE)p_szSource[i]>0x39)
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -