wrongwrongな開発日記

しんまいさんの忘備録

【DxLib】DxLib由来のウィンドウを表示しない【.Net】

DxLibはWIndowsフォームアプリと組み合わせ、フォームやピクチャボックスに対して描画することが可能です。
一方、何もしなければDxLib由来の描画領域ができてしまい邪魔になるので、それを生成しないようにします。
この記事の内容は以下の質問掲示板においてgdrop様にご教示頂いた内容をまとめたものです。
描画スクリーン無しでの起動

プログラム

DX.DxLib_Init()を呼ぶ前にDX.SetUserWindowにハンドルを設定することで、DxLib由来の描画領域の生成が起こらないようになります。
下記のサンプルはフォームロード時に、フォームに対してimage.pngを描画しています。

Imports DxLibDLL

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DX.SetMovieColorA8R8G8B8Flag(DX.TRUE)
        DX.SetUserWindow(Me.Handle)
        DX.DxLib_Init()

        DX.LoadGraphScreen(0, 0, "image.png", DX.TRUE)
    End Sub
End Class

感想

アプリケーションによってはフォームに描画領域を設定したほうがウィンドウの位置やサイズの変更について自由になるので良いかもしれません。
また通常のフォームと同様ボタンなどが配置可能であるため、UIを一々作る手間は省けるかもしれませんね。……と思ったけれど、ボタンが背景を透過する設定が分からないな。。。
一応以下のように*1ボタンのハンドルを指定することで当たり判定を維持しながら画像を表示することができるようなので、もう少し時間が取れそうなら色々試してみたいと思います。

DX.DrawGraph(0, 0, ghandle, DX.TRUE)
DX.SetScreenFlipTargetWindow(Button1.Handle)
DX.ScreenFlip()

*1:このコードは上記サンプルとは違い、ダブルバッファリングが有効になっています