8跳动的小球
任务:在新建的窗口上画出一个小球,随着时间,小球不断在窗口内跳动,碰到边界反弹,每反弹一次,
改变一种颜色,当窗口改变大小,效果依然。
步骤:1.建立WIN32项目(不用自己写窗口,直接用)
2.将消息处理函数修改如下:
#define IDT_BALL 100
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HGDIOBJ hOldPen,hOldBrush;
static RECT rect;
static SIZE size;
static int nX,nY,nRad=20; //圆心和半径
int dx=10,dy=10; //步长
static int _nX,_nY; //预判圆心
static COLORREF color=RGB(255,0,0); //初始小球颜色
switch (message)
{
case WM_CREATE:
GetClientRect(hWnd,&rect);
size.cx=rect.right;
size.cy=rect.bottom;
nX=_nX=rect.right/2;
nY=_nY=rect.bottom/2;
break;
case WM_SIZE:
GetClientRect(hWnd,&rect);
size.cx=rect.right;
size.cy=rect.bottom;
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_TIMER:
//只接收标识为IDT_BALL的定时器消息
if(wParam==IDT_BALL)
{
_nX=nX+dx;
_nY=nY+dy;
//
if(_nX>nRad&&_nX<size.cx-nRad)
{
nX=_nX;
}
else
{
dx*=-1;
color=RGB(rand()%256,rand()%256,rand()%256);
}
if(_nY>nRad&&_nY<size.cy-nRad)
{
nY=_nY;
}
else
{
dy*=-1;
color=RGB(rand()%256,rand()%256,rand()%256);
}
}
InvalidateRect(hWnd,0,TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
//创建画笔和画刷
hOldPen=SelectObject(hdc,CreatePen(PS_SOLID,5,color));
hOldBrush=SelectObject(hdc,CreateSolidBrush(color));
//画圆
Ellipse(hdc,nX-nRad,nY-nRad,nX+nRad,nY+nRad);
//还原DC
SelectObject(hdc,hOldPen);
SelectObject(hdc,hOldBrush);
//释放设备
DeleteObject(CreatePen(PS_SOLID,5,color));
DeleteObject(CreateSolidBrush(color));
ReleaseDC(hWnd,hdc);
EndPaint(hWnd, &ps);
//启动定时器 //第二参数为定时器的标识(可自定义),第三次为间隔时间
SetTimer(hWnd,IDT_BALL,30,0);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
相关文章
- 为什么字节跳动的年薪50万的软件测试工程师遍地都是?
- 字节跳动软件测试岗,前两面过了,第三面被面试官吊打,结局我哭了
- 我准备了两个月,怒刷面试题,4面字节跳动测试岗,顺利拿到 offer
- 字节跳动五面都过了,结果被刷了,问了hr原因竟说是...
- 年仅28岁的程序员宣布从字节跳动退休,他是如何实现财务自由的?
- 疯狂跳动的测量结果
- 字节跳动面试——算法岗
- 字节跳动携火山引擎云躬身入局 这朵云究竟要做成什么样子?
- 聊一聊在字节跳动做项目质量改进的经验
- 字节跳动后端技术四面真题
- 2022年了春招要来了,字节跳动HR:给大家说点面试字节的技巧
- 2019字节跳动实习面试
- 音乐播放时跳动的音符
- 最近很火的电视剧《点燃我,温暖你》男主角学神和女主角课代表计算机考试实现的跳动的爱心,全程用代码复原真实的实现