一、先在窗口画一个圆
//定义圆的直径和坐标
#define 直径 100
int g_x = 100;
int g_y = 100;
case WM_PAINT:
绘图(hWnd);
break;
void 绘图(HWND hWnd)
{
PAINTSTRUCT p = { 0 };//创建画笔
HDC hdc = BeginPaint(hWnd, &p);
Ellipse(hdc, g_x, g_y, g_x + 直径, g_y + 直径);
EndPaint(hWnd, &p);
}
二、创建定时器
case WM_CREATE://创建定时器
SetTimer(hWnd, 10001, 10, NULL);
break;
三、设置定时器的操作
int 左往右 = 1;
int 右往左 = 0;
int 上往下 = 1;
int 下往上 = 0;
case WM_TIMER:
定时器窗口处理(hWnd, wParam);
break;
void 定时器窗口处理(HWND hWnd, WPARAM wParam)
{
if (wParam==10001)
{
//获取当前客户区空间,20毫秒获取一次,因为窗口随时变化
RECT rc = {0};
GetClientRect(hWnd, &rc);
//如果移动到下面边缘,就往上走
if (g_y >= rc.bottom - 直径)
{
下往上 = 1;
上往下 = 0;
}
//如果移动到上面边缘,就往下走
if (g_y <= )
{
下往上 = 0;
上往下 = 1;
}
//如果移动到右面边缘,就往左走
if (g_x >= rc.right - 直径)
{
右往左 = 1;
左往右 = 0;
}
//如果移动到左面边缘,就往右走
if (g_x <= rc.left)
{
右往左 = 0;
左往右 = 1;
}
if (左往右)
{
g_x++;
}
if (右往左)
{
g_x--;
}
if (上往下)
{
g_y++;
}
if (下往上)
{
g_y--;
}
InvalidateRect(hWnd, NULL, FALSE);
}
}
运行结果: