纯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;
}
关键点总结
- Windows API:用于 Windows 平台,绘制图形操作简单,但限制较多。
- SFML:跨平台、功能全面,适合简单图形应用和游戏开发。
- OpenGL:功能强大,适合高级图形编程和游戏开发,但学习曲线较陡。
每种方法都有其特定的用途和优势,选择适合的图形库取决于项目需求和开发环境。