none
DirectXを使ったPictureBoxのPaintイベントでの描画が消えてしまいます。 RRS feed

  • 質問

  • Visual Studio 2008のC#でWindowsフォームアプリケーションを開発しており、その中でDirectXを使ってPictureBoxのPaintイベントを捉えて3次元グラフィックスを描画しています。(静止画としての3次元表示を行いたいのです。)

    Paintイベントで描画した場合、一旦画面に描画されるもののPaintイベントを抜けた途端に真っ白にクリアされてしまいます。

    ただし、PictureBoxを貼り付けてあるFormのResizeでFormが大きくなるイベント経由で呼び出された場合には例外的に正しく描画され、消えることはありません。小さくなるResizeイベントの場合には、再描画されず部分が残ります。その他のPaintイベントでは、上記のように一旦描画され、その後、消えてしまいます。

    本来、ループで描画をし続けるための機能だというマイクロソフトの説明は読みました。上記のようにイベントを捉えてPictureBoxに描画することは出来ないのでしょうか。

    実は別のプログラム(Visual Studio 2008のBasic)で、たまたま描画がうまくいっている例があるのですが、これも描きたいものとは別のPictureBoxのイベントを捉えて描くと何故かうまくいき、まともにやるとやはり消えてしまいます。とりあえず動いているのでそれ以上追求しないようにしているのですが、これも不思議な現象です。これをC#の方で再現できればまだよいのですが、同じようにやっているつもりでも再現できません。

    どなたか静止画としての3次元画像をPaintイベントに対応してPictureBoxに描く方法が分かる方がいらっしゃったらご教授いただけないでしょうか。
    2009年3月13日 10:30

回答

  •  こんにちは!(^^)!ふ~です。

    以前、こんな話題があったのですがご存じでしょうか?

    Managed Direct X での画面サイズの変更

    私は、今のところ、Windowsフォームアプリケーションで、Managaged DirectXを使用しPictureBoxに描画するにはこの様な方法を使用しております。 最近の情報を見ますと、3次元グラフィックは、WPF、Silverlightが得意そうですね!
    • 回答としてマーク birdtaka 2009年3月15日 7:00
    2009年3月14日 4:21
  • なかなかそのまま参考にするわけには行きませんでしたが(サーフェイスをうまく取り入れられなかったのと、動画を表示するワケではないので取り入れる必要もなかった)、結果としてタイマーで Render を呼び出すという考え方のみ取り入れることによって、表示は消えないようになりました。

    その代わりCPUが常に忙しくなってしまいましたが...
    とりあえず表示は出来ますので、これでしのいで(?)、またいい方法を探してみます。
    • 回答としてマーク birdtaka 2009年3月16日 10:08
    2009年3月16日 10:08

すべての返信

  •  こんにちは!(^^)!ふ~です。

    以前、こんな話題があったのですがご存じでしょうか?

    Managed Direct X での画面サイズの変更

    私は、今のところ、Windowsフォームアプリケーションで、Managaged DirectXを使用しPictureBoxに描画するにはこの様な方法を使用しております。 最近の情報を見ますと、3次元グラフィックは、WPF、Silverlightが得意そうですね!
    • 回答としてマーク birdtaka 2009年3月15日 7:00
    2009年3月14日 4:21
  • 貴重な情報ありがとうございます。
    早速、明日にでも詳しく読んで試してみます。
    WPFもよさそうですね、DirectXを使っているようなのでとりあえず当面はDirectXを使いこなせればと思っています。
    2009年3月15日 6:59
  • なかなかそのまま参考にするわけには行きませんでしたが(サーフェイスをうまく取り入れられなかったのと、動画を表示するワケではないので取り入れる必要もなかった)、結果としてタイマーで Render を呼び出すという考え方のみ取り入れることによって、表示は消えないようになりました。

    その代わりCPUが常に忙しくなってしまいましたが...
    とりあえず表示は出来ますので、これでしのいで(?)、またいい方法を探してみます。
    • 回答としてマーク birdtaka 2009年3月16日 10:08
    2009年3月16日 10:08
  • Paintイベントの引数のe.Graphicsを使わずに、PictureBoxからCreateGraphics()をしていませんでしょうか?

    2017年8月24日 12:01