📅  最后修改于: 2023-12-03 15:36:26.869000             🧑  作者: Mango
如果你想用 C++ 中的计算机图形编程来绘制一个移动循环,你可以使用基于图形设备接口 (GDI) 的 WinAPI 来实现。下面是一个简单的代码示例来演示如何使用 GDI 绘制一个移动循环。
#include <Windows.h>
#include <cmath>
#define Pi 3.1415926
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wcex;
HWND hWnd;
MSG msg;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "Win32Project1";
wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
if (!RegisterClassEx(&wcex))
return 0;
hWnd = CreateWindowEx(0, "Win32Project1", "Moving Loop",
WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
800, 600,
NULL, NULL,
hInstance,
NULL);
if (!hWnd)
return 0;
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
static int x = 0, y = 300, r = 60;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// 绘制移动循环
Ellipse(hdc, x - r, y - r, x + r, y + r);
EndPaint(hWnd, &ps);
break;
case WM_TIMER:
x += 10 * cos(Pi / 4);
y -= 10 * sin(Pi / 4);
InvalidateRect(hWnd, NULL, TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
这个代码示例使用一个窗口来绘制移动循环。在窗口的 WM_PAINT 消息处理中,它通过 GDI 绘制 Ellipse 来绘制一个圆。
在 WM_TIMER 消息处理中,代码对圆的 x 和 y 坐标进行了更改,并且使用 InvalidateRect 函数来通知系统重绘窗口。由于 WM_TIMER 消息被设置为每隔一定时间就发送给窗口,因此在此消息处理函数中对圆的坐标进行更改,就会让圆像在屏幕上移动。
最后,当窗口被销毁时,我们通过 WM_DESTROY 消息发送一个退出应用程序的消息。
这个代码示例只是一个简单的演示,当然你可以根据实际需求来扩展它。如果你想了解更多关于 GDI 和 WinAPI 的知识,可以参考 Microsoft 的官方文档。