質問

私はc ++の初心者で、ゲームを作成しようとしています。 長方形の2D配列RECT_GRIDがあります。 符号なしショートの2D配列GRIDがあります。 WM_CREATE

中に四角形の配列を埋めます

WM_PAINTイベントは、配列内のすべての要素の四角形を描画します。長方形の色は、GRID [x] [y]

の値に基づいています

下キーが押されたときに、GRID [1] [XMOVE] =を別の色に設定することにより、長方形の1つの色を変更するようにしました その後、クライアント長方形を無効にします

基本的に何が起こるかはしばらくはうまくいきますが、最終的には描画を停止します。デバッグ中にXMOVE変数をチェックし、グリッド値などでチェックしましたが、すべて問題ありません。ペイントイベントからforループを削除し、特定の1つの四角形にフォーカスすると、失敗することはありませんが、一度にすべてを再描画しようとすると、約20回後にペイントが停止します。何がこれを引き起こす可能性がありますか?私はc ++を初めて使用しますが、適切にペイントせず、オーバーフローなどを引き起こしているに違いありません。

誰かが何が間違っているのか、またはこれを行う適切な方法を説明できれば、本当に感謝しています。 Googleでこの例のようなものを見つけることができませんでした。 ありがとう

編集:

3つのグローバルブラシを使用しています HBRUSH A; HBRUSH B; HBRUSH C;

そしてそれらを変更するとき、私は常にA = MakeBrush(NUM);と言います

amiブラシを適切に使用していますか

役に立ちましたか?

解決

あなたが完全な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」の後に削除オブジェクトが続くことがわかります。これは、ウィンドウ内のリソースが限られているためです。終了時に削除しないと、不足する可能性があります。

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