フォームアプリケーションのパネルをDXライブラリの描画先にするには?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Mokutsuno
記事: 26
登録日時: 8年前

フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#1

投稿記事 by Mokutsuno » 8年前

visualstudo2015とC#を使ってフォームアプリケーションを作っているのですが、
PanelやPictureBox上をDXライブラリの描画先にしたいと思っているのですが、どうすればできますか?
現在は、
DX.SetUserWindow(this.Handle);
を用いてフォームのウィンドウを描画先にしています。そこで、
DX.SetUserWindow(panel1.Handle);

DX.SetUserWindow(pictureBox1.Handle);
でPanel,PictureBoxを描画先にできるかと思ったのですが、デバッグを開始すると、ウィンドウも表示されずに、
すぐに終了してしまいます。尚、エラーは出ていません。
どうすればよいのでしょうか?
C#は学び始めたばかりです。

Form1.cs

コード:

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;
using DxLibDLL;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        //public Point btnClientCurPos;
        IK ik = new IK();
        public Form1()
        {
            IK ik = new IK();
            InitializeComponent();
            DX.SetUserWindow(pictureBox2.Handle); //DxLibの親ウインドウをこのフォームウインドウにセット
            DX.DxLib_Init();
            DX.SetDrawScreen(DX.DX_SCREEN_BACK);
            
        }
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            DX.DxLib_End();
        }


        public void MainLoop()
        {
            DX.ClearDrawScreen();
            ik.Draw();
            DX.ScreenFlip();
            ik.btnClientCurPos = this.PointToClient(Cursor.Position);
            label1.Text = ik.btnClientCurPos.ToString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

    }
}


Program.cs

コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form = new Form1();
            form.Show();
            


            while (form.Created) //Application.Runしないで自分でループを作る
            {
                form.MainLoop();
                Application.DoEvents(); //←必要
            }
        }
    }
}

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#2

投稿記事 by あんどーなつ » 8年前

DirectXには詳しくないけど、.netはやっているので、なんとなく想像です。

void pictureBox_Clicked(... sender, ... e) {
pictureBox->Invalidate();
}
をつくって、ピクチャーボックスをクリックすると描画されるんじゃないかと思います。

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#3

投稿記事 by あんどーなつ » 8年前

ごめんなさい。ウィンドウが表示されずに終了したんですよね。自分の考えは間違いでした。

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#4

投稿記事 by あんどーなつ » 8年前

うーん、ソースコードの中のDxLibDLLって、たぶんMicrosoftのライブラリじゃないですよね。
DxLibで検索しても、DxLib_Init関数とかはあったけど、SetUserWindowはないみたいですし・・・

ライブラリの提供元を教えていただけますか?

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#5

投稿記事 by あんどーなつ » 8年前

DXライブラリのC#用パッケージ内、DxDLL.defの中に

dx_SetUserWindow
dx_SetUserChildWindow

という行を見つけました。PictureBox等のコントロールでは、SetUserWindowのかわりにSetUserChildWindowを
使うのではないでしょうか?

C6b14

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#6

投稿記事 by C6b14 » 8年前

突然お邪魔します。C# なので DxLibDotNet.dll の参照設定を削除して ソースファイル DxDLL.cs を 加えて Debugしてみるとポインターで64ビット判定のあとdx_SetUserWindow関数に入り5~8回同じところをループして落ちます。普通に考えてPictureBoxのイベント、プロパティ、メソッドの(数百個はあるはず)どれかと衝突するでしょう。ここは 素直にForm2をつくってDxLibにハンドルをわたしPictureBoxのようなFormにすれば 簡単にできました。

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#7

投稿記事 by あんどーなつ » 8年前

C6b14さん

ご回答どうもありがとうございます。
もしよろしければでいいのですが、DXライブラリをC#でプログラムするときのソース(書籍、URL...)を
紹介していただけるとうれしいです。よろしくお願いいたします。

C6b14

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#8

投稿記事 by C6b14 » 8年前

ないと思います。C/C++ Win32 コンソール で ここのホームページで 勉強して C# に読み替えるのが 回り道でも 結局一番早く理解できました。C# でも コンソールがいいとおもいます。http://csi.nisinippon.com/VS2015IDE/v01.html

C6b14

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#9

投稿記事 by C6b14 » 8年前

あ! 失礼しました。間違えました Siv3D と勘違い ここは Win32 Windows プログラムでhttp://cswin10.nisinippon.com/cs/cs1/vs ... b/d01.htmlした。
設定が違います。

あんどーなつ

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#10

投稿記事 by あんどーなつ » 8年前

おっ、ありがとうございます。
言ってみるものです (^o^)¥

C6b14

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#11

投稿記事 by C6b14 » 8年前

自分がここで勉強してた頃のメモがありました。自分でもよめないようなメモですが。http://powershell-vb-memo.nisinippon.com/DxLiv.html一応C# のことも書いてあるようなので。そのころはVS2008です。DxLib のことをDxLivと間違えています。(^^

Mokutsuno
記事: 26
登録日時: 8年前

Re: フォームアプリケーションのパネルをDXライブラリの描画先にするには?

#12

投稿記事 by Mokutsuno » 8年前

皆様回答ありがとうございます。
とりあえず、回答いただいたdx_SetUserChildWindowで調べたところ、
SetUserWindowでthis.Handleを引数に与え、SetUserChildWindowの引数にPictureBox1.Handleを与えることにより、
ピクチャボックスを描画先にできました。
この方法が一番楽なようなので、これで書かせていただきます。
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る