win32强化练习3.3_定时器与弹球

已经简单练习了键盘和鼠标,接下来是定时器消息:

所谓定时器就是在某一个窗口设置一个或多个闹钟,在闹钟响的时候做指定的事情。

启动定时器:(如果第四项是NULL,则找WM_TIMER消息处理)

定时器句柄定时器ID时间间隔定时器处理函数指针

关闭定时器:

定时器句柄定时器ID


这节来做一个会在窗口中来回弹的球:

1. 球的位置:定义全局变量gx,gy;

2. 球的方向和速度:定义全局变量vx, vy;符号代表正向和负向,数值代表每次移动量即速度;

3. 处理WM_PAINT消息,绘制一个圆;

4. 在WM_CREATE中开启定时器,10ms间隔;

5. 在WM_TIMER中,首先获取当前客户区的矩形,判断是否撞到边框;

5. 球的位置+方向和速度,刷新绘图

int gx = 50,gy = 50;
int vx = 1,vy = 1; //x和y方向上的速度(可正可负)
   	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hwnd, &ps);
			Ellipse(hdc, gx, gy, gx+50, gy+50);
			EndPaint(hwnd, &ps);
		}
		case WM_CREATE:
		{
			SetTimer(hwnd, 10, 10, NULL);
		}
		break;
		case WM_TIMER:
		{
			RECT rt;
			GetClientRect(hwnd, &rt);
			if (gx <= 0 || gx>= rt.right - 50) vx *= -1; //转向 
			if (gy <= 0 || gy>= rt.bottom - 50) vy *= -1;
			gx += vx;
			gy += vy;
			InvalidateRect(hwnd, NULL, TRUE);
		}
		break;
这个练习在判断方向和速度上如果没有清晰的概念很容易陷入混乱中,但如果把它和物理量的速度相结合就方便很多!










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值