GDI绘图,与鼠标互动画直线代码
时间: 2024-09-20 22:10:37 浏览: 26
GDI(Graphics Device Interface)是Windows操作系统中的图形设备接口,它提供了一系列函数来创建、操作和显示图形。在Windows编程中,如果你想要利用GDI进行绘图并实现鼠标交互来绘制直线,你需要使用`CreatePen`创建笔刷,`GetDC`获取设备上下文,然后通过`MoveToEx`和`LineTo`命令控制线条的起点和终点。
以下是一个简单的示例代码片段,展示了如何使用GDI在窗口上绘制一条随着鼠标移动变化的直线:
```cpp
#include <windows.h>
#include <gdi32.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
HDC hdc; // 设备上下文
HPEN pen; // 笔刷
switch (msg) {
case WM_CREATE:
pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); // 创建蓝色实线笔
break;
case WM_MOUSEMOVE: // 鼠标移动事件
hdc = GetDC(hWnd); // 获取窗口的设备上下文
if(hdc != NULL) {
int x = GET_X_LPARAM(lParam);
int y = GET_Y_LPARAM(lParam);
MoveToEx(hdc, x, y, &pen); // 设置线条起点
LineTo(hdc, x, y); // 绘制到当前鼠标位置
ReleaseDC(hWnd, hdc); // 释放设备上下文
// 如果需要实时更新屏幕,可以考虑用InvalidateRect()刷新
InvalidateRect(hWnd, NULL, TRUE);
}
break;
// 其他窗口消息处理...
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // 加载箭头光标
wc.lpszClassName = L"MyGDIApp";
RegisterClass(&wc);
HWND hWnd = CreateWindow(wc.lpszClassName, L"My GDI App", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); // 初始化窗口可见
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return static_cast<int>(msg.wParam);
}
```
这个例子创建了一个窗口,并在窗口内响应鼠标移动事件,每次鼠标移动时都会绘制一条从上一次点击点到当前位置的直线。