2017-01-21 3 views
1

私は、Win32アプリケーション上で動作するC++の小さな2Dレンダリングライブラリを持っており、Direct2Dを使ってそれを描画しています。私はBeginDraw()を呼び出し、描画の負荷を行ってからDrawText()を呼び出しました。これはもちろんEndDraw()の前です。D2D1 :: RenderTarget :: DrawText()を呼び出すと、WM_PAINTが繰り返し送信されるのはなぜですか?

レンダリング関数の呼び出しを続けることができるように、代わりにWM_PAINT(おそらく待たずに)を送信したために停止します(ウインドウが有効になるまでメッセージを送信し続けますか? t know)

私はその時点で描画しているかどうか試してみましたが、その場合はメッセージを正しく処理したようですが(手動で実際にクライアント領域を検証する必要はありませんが)それを送信し、DrawText()は返されません。

これは正常な動作ですか、それについてどう対処しますか?

(私もビジュアルスタジオコミュニティ2013を使用しています)

+1

ウィンドウをペイントまたは検証するまで、WM_PAINTは引き続き保持されます。気にしない場合(GDIを使用していないため)、BeginPaintとそれに続くEndPaintを呼び出してください。 –

+0

ありがとうRaymond。 DrawLineやDrawRectのような関数を使用しているときに、ID2D1 :: RenderTargetのDrawText内になぜそれが送信されないのか理解できません。何か案は? –

+0

あなたが描いていることは、私には奇妙に聞こえます。私は、私は単純にValidateRect(hwnd、NULL)で検証し、正常に動作するEndDraw()の後に、私はDrawPrintのハンドラでDrawTextLayout()を行うテストアプリケーションを自分で持っています。多分あなたのコードのいくつかを表示できますか?それはおそらくHwndRenderTargetでしょうか?どのWindows版ですか? – bunglehead

答えて

0

最終的にエラーが見つかりました。

DIrect2D関数に渡されたパラメータの1つが無効なオブジェクトポインタです。すでにメモリを解放したことがわからず、オブジェクトを描画するためにオブジェクトを使用しようとしていました。リリースされたDirect2Dポインタのデフォルトのメモリパターンが0xcdcdcdcd(またはそのようなもの)であることがわかっていれば、私はそれをもっと早く見てきたでしょう。

人に知られていない何らかの理由で、WM_PAINT ...恐ろしいバグが発生しました。

ありがとうございます!

関連する問題