我是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);
我正确地使用刷子吗?答案 0 :(得分:5)
我的第一个猜测是,如果你是一个完全的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的书,花上一两个小时。你最后会有更多的头发! ; - )
答案 1 :(得分:2)
你会注意到在所有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”调用,那么在用完所有可用画笔后,您将遇到问题。尝试=)
实际上很有趣