トップページ > 記事閲覧
描画結果が消える
名前:時雨 日時: 2016/05/19 00:26

今回C#でDXライブラリを使用しているのですが、描画対象ウインドウを //メインウインドウ。 DX.SetUserWindow(this.Handle); //メインウインドウ上に用意した描画領域 DX.SetUserChildWindow(this.maindraw.Handle); とした場合、ウインドウが画面外に出たりするとその部分が消えてしまいます。(画像を参照してください) https://cloud.aspcommunication.tk/index.php/s/1bfQ8njMGevhyQH ※画像の水色っぽいところが消えている部分。 回避策はあるのでしょうか?ご回答のほどよろしくお願いします。
メンテ

Page: 1 |

Re: 描画結果が消える ( No.1 )
名前:管理人 日時:2016/05/20 01:23

一度消えるとその後描画処理をしても消えっぱなしなのでしょうか? 普通に考えると再度描画を行えば消えた部分も元に戻りそうですが…
メンテ
Re: 描画結果が消える ( No.2 )
名前:時雨 日時:2016/05/21 09:41

再描画すれば戻ります。 ただ、DXライブラリの生成するウインドウでは消えることがないのでどうにかできないかなと思った次第です。
メンテ
Re: 描画結果が消える ( No.3 )
名前:管理人 日時:2016/05/22 11:02

DXライブラリも「この部分を再描画して」というウインドウメッセージ( WM_PAINT )に 応じて再描画していますので、どうしても再描画は必要になります
メンテ
Re: 描画結果が消える ( No.4 )
名前:時雨 日時:2016/05/22 11:21

やはり再描画するしかないのですね。 DXライブラリの生成するウインドウを使うことします。 そこで追加の質問なのですが、DXライブラリでメニューバーを描画後 DX.SetDisplayMenuFlag(DX.FALSE ); を実行してもメニューバーを消せません。これは仕様なのでしょうか?
メンテ
Re: 描画結果が消える ( No.5 )
名前:管理人 日時:2016/05/23 00:27

> DXライブラリでメニューバーを描画後 こちらについてもう少し詳しく教えていただけないでしょうか? DXライブラリはメニューバーを描画する関数はないので、どのような意味かわからない状態です…
メンテ
Re: 描画結果が消える ( No.6 )
名前:時雨 日時:2016/05/23 15:06

描画という表現は適切ではありませんでしたね。 DX.AddMenuItemでメニューバーを表示させています。 これを動画再生処理中だけ隠そうと思い DX.SetDisplayMenuFlag(DX.FALSE); を実行したのですが、隠せません。 これは、この関数がこのような仕様なのか、それとも私が使い方を間違っているのでしょうか?
メンテ
Re: 描画結果が消える ( No.7 )
名前:管理人 日時:2016/05/25 00:01

すみません、SetDisplayMenuFlag は AddMenuItem 等とは別系統の関数で、AddMenuItem 等で 追加したメニュー項目を表示したり消したりする用途で使用することはできません なので、面倒で申し訳ありませんが、メニューを非表示にしたい場合は DeleteMenuItemAll で 全てのメニュー項目を削除して、再表示する場合は再度 AddMenuItem 等でメニューを 再構成するようにしてください m(_ _;m
メンテ
Re: 描画結果が消える ( No.8 )
名前:時雨 日時:2016/05/27 20:54

いったん削除ですか・・・  この際隠さずにボタン無効化にしたいと思います。(DeleteMenuItemAllを実行するとウインドウ位置が初期位置に戻ってしまうため) そこで、DX.SetMenuItemEnable_ID(ID,DX.FALSE)関数を使用して無効化しているのですが 無効化されている項目をクリックすると画面の描画が止まってしまいます。 これは正常な挙動なのでしょうか。何度も申し訳ないですが回答のほどよろしくお願いします。
メンテ
Re: 描画結果が消える ( No.9 )
名前:時雨(解決) 日時:2016/05/27 22:14

お騒がせしました。 DX.SetMultiThreadFlag(DX.TRUE);を実行し 別スレッドで while (true) { if (DX.ProcessMessage() == -1) { Environment.Exit(0); // エラーが起きたら終了 } } とすることで解決しました。
メンテ
Re: 描画結果が消える ( No.10 )
名前:管理人 日時:2016/05/29 02:21

SetMultiThreadFlag( TRUE ) ; を実行した状態でもDXライブラリは複数のスレッドから DXライブラリの関数を呼ばれることを想定していませんので、別スレッドで ProcessMessage() を 呼んだ場合の動作は保証できません DeleteMenuItemAll を実行するとウインドウの位置が初期位置に戻ってしまうのはライブラリの バグですので DeleteMenuItemAll を実行してもウインドウの位置が移動しないように修正しました なのでお手数で申し訳ありませんが、よろしければこちらの修正バージョンを使用して DeleteMenuItemAll + 再構成 をするようにしてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) 因みに、無効化されている項目をクリックすると動作が停止してしまうのはOSの仕様のようで、 こちらはライブラリの変更では停止しないようにすることはできませんでした…
メンテ
Re: 描画結果が消える ( No.11 )
名前:時雨(解決) 日時:2016/05/29 19:35

初期位置に戻るのはバグだったのですか。 てっきり仕様だったのかと。改善を確認しました。 メニューを再構築 or 削除する 関数を追加して動画再生時は削除するようにしようとおもいます。 ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存