一、先在窗口画一个圆
//定义圆的直径和坐标 #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 <= rc.top) { 下往上 = 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); } }
运行结果: