我是c ++的新手,我正在尝试制作游戏。 我有一个2d数组的矩形RECT_GRID。 我有一个无符号短的二维数组GRID。 我在WM_CREATE

期间填充矩形数组

WM_PAINT事件为数组中的所有元素绘制矩形。矩形的颜色基于GRID [x] [y]

的值

当按下向下键时,我这样做了,它通过将GRID [1] [XMOVE] =设置为不同的颜色来改变其中一个矩形的颜色 然后它使客户端矩形

无效

基本上发生了什么,它有效地运行了一段时间,但最终它只是停止绘制东西。我在调试期间检查了我的XMOVE变量,我检查了网格值和东西,一切都很好。当我从paint事件中移除for循环并专注于1个特定的矩形时,它永远不会失败,但如果我尝试一次重绘所有这些,大约20次后,它就会停止绘制东西。什么可能导致这个?我是c ++的新手,我打赌我没有正确地绘画,导致溢出或其他什么。

如果有人能够解释出现了什么问题,或者正确的做法,我真的很感激。我在Google上找不到这样的例子。 感谢

编辑:

我正在使用3个全局画笔 HBRUSH A; HBRUSH B; HBRUSH C;

当我修改它们时,我总是说A = MakeBrush(NUM);

我正确地使用刷子吗?

有帮助吗?

解决方案

我的第一个猜测是,如果你是一个完全的GDI / C ++新手,你可能会创造很多钢笔和画笔。这些是Windows中受限制的资源。在开始对资源征税之前,您只能创建这么多个。因此,要么立即制作您的画笔和笔等,并重新使用它们,要么在完成后正确处理它们。我建议你买一本“圣经”的副本。 ( http://www.amazon.com/Programming-Windows%C2%AE-Fifth -Microsoft / dp / 157231995X / ref = sr_1_1?ie = UTF8& s = books& qid = 1252788457& sr = 8-1 )并阅读有关绘图的章节。

编辑:听起来你没有正确修改你的画笔,但由于我看不到MakeBrush的代码,我不知道。你可能在幕后制作了很多画笔,你甚至都不知道。说真的,拿一份Petzold的书,花上一两个小时。你最后会有更多的头发! ; - )

其他提示

你会注意到在所有GDI示例中,'CreatePen'或'CreateSolidBrush'后面都会有一个删除对象。这是因为它们在Windows中是有限的资源,如果你在完成后没有删除它们,你可能会用完它们。

PAINTSTRUCT Ps;
HDC hDC = BeginPaint(hWnd, &Ps);
HBRUSH NewBrush = CreateSolidBrush(RGB(250, 25, 5));

SelectObject(hDC, NewBrush);
Rectangle(hDC, 20, 20, 250, 125);
DeleteObject(NewBrush);
EndPaint(hWnd, &Ps);

如果您忘记包含“DeleteObject”调用,那么在用完所有可用画笔后,您将遇到问题。尝试=)

实际上很有趣
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top