トップページ > 記事閲覧
C#でSetUseBackBufferTransColo関数
名前: 日時: 2016/01/16 17:12

お世話になります。 C#でWindows Form + DxLibで3Dプログラムを作成しています。 SetUserWindowでフォームのハンドルを受け渡し、そこに3Dモデルを表示させています。 C++版DxLibでは、SetUseBackBufferTransColorFlag関数を使用することで背景色の部分が透過させることができると思います。 同等のことをC#側でも実施したいのですが、C#版Dxライブラリ+Windows Formsでは実施できないのでしょうか?ご教授ください。
メンテ

Page: 1 |

Re: C#でSetUseBackBufferTransColo関数 ( No.1 )
名前:管理人 日時:2016/01/17 15:57

C#+Windows Formsを全く使ったことがないので推測になってしまいますが、 恐らくC#版Dxライブラリ+Windows FormsでもC++版と同じ方法で透過させることができると思います 『C++版と同じようなコードで透過するか試してみたが、透過しなかった』 ということでしょうか? もしそうでしたら現状のコードを拝見できれば何かわかるかもしれません
メンテ
Re: C#でSetUseBackBufferTransColo関数 ( No.2 )
名前: 日時:2016/01/17 17:00

お世話になります。 >『C++版と同じようなコードで透過するか試してみたが、透過しなかった』 その通りです。 以下、再現用のミニマムプログラムを用意しました。 お手数ですが、ご協力をお願いいたします。 -------------------------------------------- using DxLibDLL; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Dx_otameshi_alpha { public partial class Form1 : Form { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); using (Form1 f = new Form1()) { f.Show(); while (f.Created) { f.MainLoop(); Application.DoEvents(); } } } public Form1() { // Form初期化 InitializeComponent(); // Windowモードで実行 DX.ChangeWindowMode(DX.TRUE); // 描画以外の箇所を透明化する DX.SetUseBackBufferTransColorFlag(DX.TRUE); // Dxライブラリの描画画面を、.NETのWin Formsに変更 DX.SetUserWindow(this.Handle); // Dxライブラリ初期化 DX.DxLib_Init(); // 裏画面に描画 DX.SetDrawScreen(DX.DX_SCREEN_BACK); } ~Form1() { // Dxライブラリ終了 DX.DxLib_End(); } public void MainLoop() { DX.ClearDrawScreen(); DX.DrawBox(10, 150, 310, 200, DX.GetColor(0, 255, 0), DX.TRUE); // 裏画面の描画情報を画面へ表示 DX.ScreenFlip(); } } } --------------------------------------------
メンテ
Re: C#でSetUseBackBufferTransColo関数 ( No.3 )
名前:管理人 日時:2016/01/17 19:24

了解しました 以前同じようなご質問があった気がして調べてみたところ、ありました <動画再生について> http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=3616 こちらでは最終的に SetUserWindow を使用しないようになっているのですが、 ぱさんの件でも SetUserWindow を使用しない方式で問題ないでしょうか? もし問題がないのでしたら、SetUserWindow を使用しない方式で処理を 行うようにしてみてください( SetUserWindow を使用しない方式のほうが DXライブラリが行う処理に対する制限が少ないので )
メンテ
Re: C#でSetUseBackBufferTransColo関数 ( No.4 )
名前:ぱ(解決) 日時:2016/01/17 21:56

>> もし問題がないのでしたら、SetUserWindow を使用しない方式で処理を行うようにしてみてください(SetUserWindow を使用しない方式のほうが DXライブラリが行う処理に対する制限が少ないので ) 上記、了解しました。 別の方法を検討してみます。
メンテ
Re: C#でSetUseBackBufferTransColo関数 ( No.5 )
名前:ぱ(解決) 日時:2016/01/18 02:44

一応参考までに、自己解決した為、この場で報告させて頂きます。 Windows Formではなく、WPFを使用する場合は上記SetUseBackBufferTransColorFlag関数相当の機能を作成することが出来ました。。。 (自分で実装する必要がありますが) 概要としては 1.D3DImageを継承しDxライブラリのラッパクラス作成 2.MainWindowにImageクラスを定義し@と連携 3.ウィンドウスタイル、背景などを透過に設定 4.Imageクラスの背景色(透明)を透過状態に設定 以上です。 管理人さん、お付き合い頂きありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存