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クラスの背景色(透明)を透過状態に設定
以上です。
管理人さん、お付き合い頂きありがとうございました。
|