• 締切済み

VC++2010(MFC)での描画

とあるグラフを描こうとしています。…View.cppのOnDraw()内に描画の為のコードを記述するのが一般的だと思いますが、そのグラフを描く為の元データを得るまでに、かなり長い計算の為のコードを書く必要があります。又、途中で計算の為のコードが正しく書けているか検証する為に、描画(グラフの描画)をこまめにする必要があります。 例えば、基本的に描画とは関係のない計算の為の関数AAA(xx)、BBB(yy)、CCC(zz)…等を準備して、OnDrawing()からそれらの関数を呼ぶ場合で、関数AAAの中でも(即ちOnDrawの外でも)検証用に描画する(グラフを描く)ようなケースでは(即ち、関数AAA内でもpDCを使えるようにするには)、関数AAA内でどのようなコードを準備すればよいのでしょうか? それとも根本的にもっとスマートなやり方があるのでしょうか? 教えて下さい。

みんなの回答

  • haniriito
  • ベストアンサー率57% (12/21)
回答No.2

こんにちは。 基本的にはOnDraw()で描画するということになっていますが、他のイベントハンドラで描いてもかまいません。 MFCならCClientDCクラスなどのCDC関連クラスを使えば、いつでもデバイスコンテキストを取得することができます。 適当な例を挙げると、 void CHogeView::OnLButtonDown(CPoint pt) { CClientDC dc(this); 以下、dcを使って描画する } など。 しかし、そのウィンドウがいったん隠れたあと、再度表示する必要が出てきたときはOnDraw()が呼ばれるだけなので、その時に上のOnLButtonDown()で描いたものを再表示すべきかどうかは実装する側がOnDraw()関数内で面倒をみなければなりません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

そもそもWindowsアプリは応答性を保つために長い時間処理をしてはいけない事になっています。なので、OnDraw()で長い処理をするのは禁止といって良いと思います。 通常、このような長い時間の計算の場合はスレッドを使いスレッド側で計算します。それを適時表示してもらうためには、スレッド側からViewに描画メッセージを送れば解決すると思います。

関連するQ&A