【发布时间】:2017-10-11 09:26:28
【问题描述】:
我创建了一个父窗口,它有许多子窗口,如按钮、静态文本除外。它们都是可见的并且可以正常工作,但是当我将一段代码添加到我的窗口回调时,它们都会消失+我看不到我刚刚尝试从函数中绘制的线。
我该如何解决这个问题?
case WM_PAINT:
{
HDC hdc = GetDC(hwnd);
HGDIOBJ hp = CreatePen(0 ,5,RGB(0,100,0));
SelectObject(hdc,hp);
MoveToEx(hdc, 825, 0, 0);
LineTo(hdc, 825, 1000);
ReleaseDC(hwnd, hdc);
}
break;
【问题讨论】:
-
如果没有好的minimal reproducible example,没有人可以做出明确的评论。但这里明显的问题是您不使用
BeginPaint和EndPaint。这样做的各种原因。首先更改您的代码以使用这些方法来获取 DC。然后,如果您仍有问题,请回复minimal reproducible example。 -
或者,向我们这些曾经担任过您职位的人提供一些建议。认识到你有很多东西要学,并尝试去学习它。获取 Petzold 经典作品的副本。请仔细阅读。
-
代码有一个非常糟糕的句柄泄漏。这不会永远持续下去,在 10,000 次绘制之后,操作系统停止允许程序泄漏更多。这不会花费很长时间,它会生成绘画,哦,每秒数千次,因为它从不验证绘画区域。现在,每个控件在无法再创建绘图对象时都会出现异常。