gpt4 book ai didi

c++ - 画线不起作用,可能是什么问题?

转载 作者:行者123 更新时间:2023-11-30 01:34:53 25 4
gpt4 key购买 nike

我想通过在线条开始的第一个坐标和线条结束的第二个坐标上单击鼠标来绘制线条。当我运行我的项目时,什么也没有发生。我找不到我的代码缺少什么。

LONG WINAPI WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{

HDC hdc;
BOOL fDraw = FALSE;
POINT ptPrevious = { 0 };
HPEN Pen = CreatePen(PS_SOLID, 3, RGB(0, 0, 255));


switch (Message) {
case WM_LBUTTONDOWN: {
fDraw = TRUE;
ptPrevious.x = LOWORD(lParam);
ptPrevious.y = HIWORD(lParam);
break;
}

case WM_LBUTTONUP: {
if (fDraw)
{
hdc = GetDC(hWnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, LOWORD(lParam), HIWORD(lParam));
ReleaseDC(hWnd, hdc);
}
fDraw = FALSE;
break;
}


case WM_MOUSEMOVE: {
if (fDraw)
{
hdc = GetDC(hWnd);
MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL);
LineTo(hdc, ptPrevious.x = LOWORD(lParam),
ptPrevious.y = HIWORD(lParam));
ReleaseDC(hWnd, hdc);
}
break;
}


case WM_DESTROY:
PostQuitMessage(0);
break;

default:
return DefWindowProc(hWnd, Message, wParam, lParam);
}
return 0;
}

最佳答案

从根本上说,问题是因为您的数据都不是持久的。由于它们都是局部变量,当 WndProc 返回时,它们的内容就消失了。 fDraw 在每条消息上都设置为 FALSE,对于 WM_LBUTTONDOWN 或 WM_MOUSEMOVE 消息永远不会为真。因此什么也没有发生。

您需要创建某种类型的类来保存 fDrawptPrevious 和一个结构来保存要绘制的线条的坐标。在 WM_MOUSEMOVE 和 WM_LBUTTONUP 消息中使用 InvalidateRect。然后仅在响应 WM_PAINT 消息时绘制它们(使用绘制消息中提供的 DC)。

使用 CWnd MFC 类可以大大简化这些任务。

关于c++ - 画线不起作用,可能是什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55322969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com