纯C++怎么画图?求代码

在纯 C++ 中,绘图通常依赖于操作系统的图形库,因为 C++ 标准库本身不提供图形绘制功能。以下是几种常用的图形库以及相应的示例代码:

使用 Windows API 绘图(Windows 环境)

Windows API 是 Windows 操作系统的底层 API,可以用来进行基本的绘图操作。以下是一个简单的示例,展示如何使用 Windows API 绘制一个简单的窗口,并在窗口中绘制一个矩形:

cpp
#include <windows.h> // 窗口过程函数 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (uMsg) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); // 绘制一个矩形 Rectangle(hdc, 50, 50, 200, 200); EndPaint(hwnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const char CLASS_NAME[] = "Sample Window Class"; WNDCLASS wc = {}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; RegisterClass(&wc); HWND hwnd = CreateWindowEx( 0, CLASS_NAME, "Sample Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }

使用 SFML 绘图(跨平台)

SFML(Simple and Fast Multimedia Library)是一个简单的跨平台图形库,支持绘制图形、处理输入等。以下是使用 SFML 绘制一个矩形的示例:

cpp
#include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Window"); sf::RectangleShape rectangle(sf::Vector2f(120, 50)); rectangle.setFillColor(sf::Color::Green); rectangle.setPosition(50, 50); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); window.draw(rectangle); window.display(); } return 0; }

使用 OpenGL 绘图(跨平台)

OpenGL 是一个强大的跨平台图形 API。以下是使用 OpenGL 绘制一个简单的窗口和矩形的示例:

cpp
#include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1.0, 0.0, 0.0); // 红色 glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); glVertex2f(0.5, 0.5); glVertex2f(-0.5, 0.5); glEnd(); glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL Window"); glClearColor(1.0, 1.0, 1.0, 1.0); // 白色背景 glMatrixMode(GL_PROJECTION); gluOrtho2D(-1, 1, -1, 1); glutDisplayFunc(display); glutMainLoop(); return 0; }

关键点总结

  1. Windows API:用于 Windows 平台,绘制图形操作简单,但限制较多。
  2. SFML:跨平台、功能全面,适合简单图形应用和游戏开发。
  3. OpenGL:功能强大,适合高级图形编程和游戏开发,但学习曲线较陡。

每种方法都有其特定的用途和优势,选择适合的图形库取决于项目需求和开发环境。