抢红包啦,全球狂欢节。
C语言抢红包源码+注释
//抢红包 用了windows API
#include
#include
#include
#include
#include
//api 现成的函数 数据结构 + 算法
//rand srand随机数
char text[800];
//抢红包 把文本信息写到数组里面
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口处理器函数
void money(char * text)
{
int count = 0;
double a[10];
double total = 100.0;
int num = 10;
int i; //循环
double min = 0.01;
double avg;//平均值
double s_total; //范围值
srand(time(NULL));//随机种子
for(i = 0;i < num - 1;i++)
{
avg = total / (10 - i + 1);
s_total = 2 * avg;//波动
a[i] = (rand() % (int)(s_total * 100) + (int)min *100)/100.0 + min;
total -= a[i];
snprintf(text + count,800,"%d -> %0.2f\n",i+1,a[i]);
count = strlen(text);
}
a[i] = total;
snprintf(text + count,800,"%d -> %0.2f\n",i+1,a[i]);
}
//程序当前实例的句柄 先前 命令行参数 模式
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstace,
PSTR szCmdLine,int iCmdShow)
{
money(text);
TCHAR name[] = TEXT("window");
HWND hwnd; //句柄
MSG msg; //消息
//typedef struct {...} WNDCLASS;
WNDCLASS wndclass; //窗口类 结构体
wndclass.lpfnWndProc = WndProc; //窗口处理函数 Linux 处理器
wndclass.lpszClassName = name; //类名
wndclass.style = CS_VREDRAW | CS_HREDRAW;
wndclass.hInstance = hInstance; //当前实例句柄
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);//图标
wndclass.cbClsExtra = 0;//实例扩展
wndclass.cbWndExtra = 0;//窗口扩展
wndclass.lpszMenuName = NULL; //菜单
//Brush int int int
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
//注册类
RegisterClass(&wndclass);
//创建窗口
//类名 ,标题,风格,坐标,大小,父窗口句柄,菜单句柄
hwnd = CreateWindow(name,TEXT("抢红包程序"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,800,600,NULL,
NULL,hInstance,NULL);
//本窗口相关信息句柄 传递给窗口wm_creat的值
ShowWindow(hwnd,iCmdShow);//显示出来
UpdateWindow(hwnd);//刷新
//接受消息 写进msg 消息窗口句柄 数据 wm_quit
while(GetMessage(&msg,NULL,0,0)) //系统维护 队列
{
//翻译
TranslateMessage(&msg);
//分发
DispatchMessage(&msg);
}
return msg.wParam; //退出值
}
//回调函数 窗口句柄 消息id 消息参数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static HWND btnHwnd;//子窗口句柄
HDC hdc;//显示设备句柄
hdc = GetDC(hwnd);
RECT rect;
GetClientRect(hwnd,&rect);//写到窗口的客户区域
switch(message)
{
case WM_CREATE://常见一个按钮
btnHwnd = CreateWindow(TEXT("BUTTON"),TEXT("抢红包"),WS_CHILD
| WS_VISIBLE | BS_PUSHBUTTON,600,400,
100,30,hwnd/*父窗口句柄*/,(HMENU)1/*id*/,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE)
,NULL);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)) //子窗口的id
{
case 1:
switch(HIWORD(wParam))//判断消息类型
{
case BN_CLICKED:
DrawText(hdc,text,-1,&rect,DT_CENTER|DT_VCENTER
|DT_WORDBREAK);
break;
}
break;
}
return 0;
case WM_DESTROY: //摧毁
PostQuitMessage(0);//终止消息
return 0;
}
//缺省处理 为了确保每个消息都得到出力
return DefWindowProc(hwnd,message,wParam,lParam);