java扫雷box计时器_《windows程序设计》学习_4.1:计时器(可用于扫雷)

#include #include"resource.h"

#define ID_TIMER_1 1

//自定义消息

#define WM_MYMSG (WM_USER + 100) LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance, //当前实例句柄

HINSTANCE hPrevInstance, //先前实例句柄

LPSTR lpCmdLine, //命令行

int nCmdShow) //显示状态,全屏,最小化或一般

{static TCHAR szAppName[] = TEXT("计时器");//窗口句柄

HWND hwnd;//消息

MSG msg;//窗口类

WNDCLASS wndclass;//窗口风格:当移动窗口或者改变大小时重绘窗口

wndclass.style = CS_HREDRAW |CS_VREDRAW;//指明回调函数

wndclass.lpfnWndProc =WndProc;//额外的比特用来确认下一个窗口类的位置,暂时不用

wndclass.cbClsExtra = 0;//额外的比特用来确认下一个窗口实例的位置,暂时不用

wndclass.cbWndExtra = 0;//实例句柄

wndclass.hInstance =hInstance;//装载图标

wndclass.hIcon =LoadIcon(NULL, IDI_APPLICATION);//装载光标

wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);

wndclass.hbrBackground=(HBRUSH) GetStockObject (WHITE_BRUSH);//菜单:暂时无

wndclass.lpszMenuName =NULL;//窗口类名

wndclass.lpszClassName =szAppName;//注册窗口

if(!RegisterClass(&wndclass))

{return -1;

}//创建窗口

hwnd =CreateWindow(szAppName,

TEXT("计时器"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

CW_USEDEFAULT,

NULL,

NULL,

hInstance,

NULL);//显示窗口

ShowWindow(hwnd,SW_SHOWNA);//更新窗口

UpdateWindow(hwnd);//消息循环

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg);//将消息给窗口

DispatchMessage(&msg);

}returnmsg.wParam;

}//回调函数:本程序的主要功能是设计一个计时器

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{//位图句柄

staticHBITMAP hBitmap_clc;//客户区大小

static intcxClient,cyClient;//资源大小

static intcxSource_clc,cySource_clc;//位图结构信息

BITMAP bitmap_clc;//设备描述表句柄

HDC hdc,hdcMem;//实例句柄

HINSTANCE hInstance;//绘图结构信息

PAINTSTRUCT ps;//计时用的变量

static int sec = 0;switch(message)

{//创建消息:装载位图,获取位图信息

caseWM_CREATE://获得实例句柄

hInstance = ((LPCREATESTRUCT)lParam)->hInstance;//装载位图

hBitmap_clc =LoadBitmap(hInstance, MAKEINTRESOURCE (IDB_BITMAP1));//获取位图的信息,放到bitmap_clc里

GetObject(hBitmap_clc,sizeof(BITMAP),&bitmap_clc);//每个数字的长和宽

cxSource_clc =bitmap_clc.bmWidth;

cySource_clc= bitmap_clc.bmHeight/12;return 0;//当前客户区大小

caseWM_SIZE:

cxClient=LOWORD(lParam);

cyClient=HIWORD(lParam);return 0;//绘图消息:设置默认的贴图

caseWM_PAINT:

hdc= BeginPaint (hwnd, &ps);//给指定的设备创建兼容的内存设备内容

hdcMem =CreateCompatibleDC(hdc);//把对象选到设备内容中:参数为设备内容句柄,对象句柄

SelectObject(hdcMem,hBitmap_clc);//开始画图//贴图位置:最右边是1秒,中间10秒,左边100秒

BitBlt(hdc, cxClient-cxSource_clc, 0, cxSource_clc, cySource_clc,hdcMem, 0, cySource_clc*11, SRCCOPY);

BitBlt(hdc, cxClient-cxSource_clc*2, 0, cxSource_clc, cySource_clc,hdcMem, 0, cySource_clc*11, SRCCOPY);

BitBlt(hdc, cxClient-cxSource_clc*3, 0, cxSource_clc, cySource_clc,hdcMem, 0, cySource_clc*11, SRCCOPY);

DeleteDC(hdcMem);

EndPaint (hwnd,&ps);return 0;//鼠标左键点击:开始计时

caseWM_LBUTTONDOWN:

SetTimer(hwnd,ID_TIMER_1,1000,NULL);return 0;//时钟到来:发出声音,发送自定义消息

caseWM_TIMER://MessageBeep(MB_ICONASTERISK);

PlaySound(TEXT("123.wav"), NULL, SND_FILENAME | SND_ASYNC); //自定义声音

sec++;//发送自定义消息

SendMessage(hwnd,WM_MYMSG,wParam,lParam);return 0;//自定义消息,开始画图改变时钟的值

caseWM_MYMSG:

hdc=GetDC(hwnd);

hdcMem=CreateCompatibleDC(hdc);

SelectObject(hdcMem,hBitmap_clc);//开始画图//数字的位置:0是第12个,位置为cySource_clc*11,1?是第11个,位置为cySource_clc*10,依次类推

BitBlt(hdc, cxClient-cxSource_clc, 0, cxSource_clc, cySource_clc, hdcMem, 0, cySource_clc*(11-sec%10), SRCCOPY);

BitBlt(hdc, cxClient-cxSource_clc*2, 0, cxSource_clc, cySource_clc, hdcMem, 0, cySource_clc*(11-(sec%100)/10), SRCCOPY);

BitBlt(hdc, cxClient-cxSource_clc*3, 0, cxSource_clc, cySource_clc, hdcMem, 0, cySource_clc*(11-sec/100), SRCCOPY);

DeleteDC(hdcMem);

ReleaseDC(hwnd,hdc);return 0;caseWM_DESTROY:

PostQuitMessage(0);

KillTimer(hwnd,ID_TIMER_1);return 0;

}//缺省处理

returnDefWindowProc (hwnd, message, wParam, lParam);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值