トップページ > 記事閲覧
複数のウィンドウフォームで描画させたい
名前:Kazu 日時: 2015/04/27 08:18

C#で2D図形の描画でグラフ等を表示するのに使わせていただいています m(_._)m 一つのウィンドウフォームであれば下記のコードで描画する準備が出来ます。 public Form1() { InitializeComponent(); // DXライブラリの描画ハンドルを本フォームにする DX.SetUserWindow(this.Handle); // 描画先画面を裏にする DX.SetDrawScreen(DX.DX_SCREEN_BACK); // 描画領域をプライマリの画面サイズにする DX.SetGraphMode(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Screen.PrimaryScreen.BitsPerPixel); // DXライブラリの初期化処理 if (DX.DxLib_Init() == -1) { Application.Exit(); } } しかしForm2などを追加して、そのフォームでDX.SetUserWindow()やDX.DxLib_Init()を行ってもForm2への描画はできませんでした。 おそらくDXライブラリは1つのインスタンスしか想定していないのではないかと思ったのですが、複数のウィンドウへ描画する方法はあるのでしょうか? 自分の用途としては複数(3〜4程度)のウィンドウに、DXライブラリを使ってグラフ表示をしたいと考えています。 GDI+での描画もそこそこ速いのですが、DXライブラリの比では無く、ダブルバッファを用いても複雑なグラフ(株価チャートなどを数千ポイント)になると再描画が見えてしまいますし、操作が重いです。
メンテ

Page: 1 |

Re: 複数のウィンドウフォームで描画させたい ( No.1 )
名前:管理人 日時:2017/04/06 23:42

メインウインドウ以外のウインドウに対して裏画面の内容を出力する方法として SetScreenFlipTargetWindow という関数で出力先のウインドウを変更した後に ScreenFlip を呼び出すという方法があります // ScreenFlip で画像を転送する先のウインドウを設定する( NULL を指定すると設定解除 ) int SetScreenFlipTargetWindow( HWND TargetWindow ) ; こちらのスレッドの No.3 にサンプルがありますので、C# で利用できるか分かりませんが よろしければご覧下さい m(_ _)m https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=3396 あと、SetScreenFlipTargetWindow を使用する場合は DxLib_Init の呼び出しの前に SetWaitVSyncFlag( FALSE ) ; を実行して ScreenFlip 呼び出し時に VSYNC待ちをしないように しておいてください、ScreenFlip は初期設定では呼ぶ度に VSYNC待ちをしてしまって 動作が遅くなってしまうので・・・
メンテ
Re: 複数のウィンドウフォームで描画させたい ( No.2 )
名前:Kazu 日時:2015/04/28 15:01

回答ありがとうございます。 別件の案件が割り込んだので、後日試したいと思います。 直感ですが、これでうまくいきそうな感じがしています。 提示していただいたスレのサンプルも参考にさせていただきます(元々CやC++のプログラマーなので、C#への翻訳は問題ないです)。 試した結果は後日報告させていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存