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

📄 awardfortvs.cpp

📁 手机号码抽奖程序源代码
💻 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 + -