2009-09-12 82 views
-1

我對C++很感興趣,我試圖創建一個遊戲。 我有一個矩形的2d數組RECT_GRID。 我有一個2d數組無格式短的網格。 我在WM_CREATE期間填充矩形陣列C++的繪圖問題

WM_PAINT事件繪製數組中所有元素的矩形。矩形的顏色是基於GRID [x] [y]的值的。我是這樣做的,當按下向下鍵時,它通過設置GRID [1] [XMOVE]改變其中一個矩形的顏色] =不同的顏色 然後它無效客戶矩形

基本上會發生什麼,它運行良好一段時間,但最終它只是停止繪製的東西。我在調試過程中檢查了我的XMOVE變量,我檢查了網格值和東西,一切都很好。當我從繪畫事件中移除for循環並專注於1個特定的矩形時,它永遠不會失敗,但如果我嘗試一次重繪所有這些矩形,大約20次後,它會停止繪畫。什麼會造成這種情況?我是新來的C + +,我敢打賭,我沒有正確繪畫,導致溢出或什麼。

如果有人可以解釋發生了什麼錯誤,或者要做到這一點適當的方式,我會很感激。我在Google上找不到這個例子。 感謝

編輯:

我使用3個全球刷 HBRUSH一個我; HBRUSH B; HBRUSH C;

,當我修改它們,我總是說A = MakeBrush(NUM);用刷子

AMI我正常嗎?

+1

發佈一些代碼,然後人可以幫助您! – xian 2009-09-12 20:41:14

+0

請輸入代碼片段。 – Partial 2009-09-12 22:06:26

回答

5

我的第一個猜想,如果你是一個總GDI/C++新手,是你很可能創造了許多畫筆和畫刷的。這些是Windows中的受限資源。在開始對資源徵稅之前,您只能創建其中的很多項目。因此,要麼一次製作畫筆,筆和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的書,花一兩個小時。以後你會頭髮更多的頭髮! ;-)

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'調用,那麼在用完所有可用的畫筆後,您將遇到問題。它實際上是有趣的嘗試=)

+1

你應該在刪除它之前取消選擇畫筆嗎? HBRUSH oldBrush = SelectObject(hDC,NewBrush); /*....drawings .. */DeleteObject(SelectObject(hDC,oldBrush)); – 2010-01-30 00:26:08