ボタンからimguiウインドウを開く – FlyWithLua

2023年2月19日

単純にボタンからメインウインドウを開く、閉じるを繰り返すアクションを作成。

ベースになるウインドウを作成

まず、ベースになるウインドウを作成。黒の半透明のウインドウを作成。

-- 最初に表示される小さいボタンを入れるウインドウ。場合に寄っては必要ないウインドウかも。
GUIWINDOW = float_wnd_create(10, 10, 2, true)
float_wnd_set_imgui_builder(GUIWINDOW, "SCREENONE")	--これは3つボタンを表示するのに必要
float_wnd_set_geometry(GUIWINDOW, 100, 50, 300, 10)	--下の3ボタンの黒のバック 左からの位置、下からの高さ
-- 上のパラメーター:ウインドウのハンドル、1番目黒の四角の左側からの位置と高さ、3番目以降は四角の右側の位置と高さ。
imgui.PushStyleColor(imgui.constant.Col.WindowBg, 0x7F000000) --ウインドウを黒の50%透明バックにする

「float_wnd_create(10, 10, 2, true)」2を1にしてみると枠が表示されるので、これがウインドウであることが分かる。このボタンには枠は必要ないので1を2に戻す。

元に戻し、ボタンを追加する。

ベースの透明ウインドウの中に、ボタンを作成

--- OpenWindow_from_Button.lua
-- 単純にボタンからメインウインドウを開く、閉じるを繰り返す。
----------------------------------------------------------------------------------------------------------
-- 最初に表示される小さいボタンを入れるウインドウ。場合に寄っては必要ないウインドウかも。
GUIWINDOW = float_wnd_create(10, 10, 2, true)
float_wnd_set_imgui_builder(GUIWINDOW, "SCREENONE")	--これは3つボタンを表示するのに必要
float_wnd_set_geometry(GUIWINDOW, 100, 50, 300, 10)	--下の3ボタンの黒のバック 左からの位置、下からの高さ
-- 上のパラメーター:ウインドウのハンドル、1番目黒の四角の左側からの位置と高さ、3番目以降は四角の右側の位置と高さ。
imgui.PushStyleColor(imgui.constant.Col.WindowBg, 0x7F000000) --ウインドウを黒の50%透明バックにする
----------------------------------------------------------------------------------------------------------
--最初に作成した小さななウインドウの表中に入れるボタンを作成
--下の3つのボタンを表示(バックの黒枠は表示される)(チャイルドウインドウ)
function SCREENONE(GUIWINDOW, x, y)
	imgui.BeginChild("FirstScreenChild", 150, 24)	--1番目の黒のウインドウの中に表示される子供ウインドウ
	-- ボタンの作成
	imgui.SetWindowFontScale(1.2)
	if imgui.Button("Radios",100,24) then	--クローズボタンで閉じたときに表示される黒のウインドウ
		float_wnd_set_geometry(GUIWINDOW, 100, 500, 400, 50)	--クリックで表示されるウインドウ
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENTWO")
	end
--
	imgui.EndChild()
end

ボタンをもう一つ追加して2つにする

--- OpenWindow_from_Button.lua
-- 単純にボタンからメインウインドウを開く、閉じるを繰り返す。
----------------------------------------------------------------------------------------------------------
-- 最初に表示される小さいボタンウインドウ
GUIWINDOW = float_wnd_create(10, 10, 2, true)
float_wnd_set_imgui_builder(GUIWINDOW, "SCREENONE")	--これは3つボタンを表示するのに必要
float_wnd_set_geometry(GUIWINDOW, 100, 50, 325, 10)	--下の3ボタンの黒のバック 左からの位置、下からの高さ
-- 上のパラメーター:ウインドウのハンドル、1番目黒の四角の左側からの位置と高さ、3番目以降は四角の右側の位置と高さ。
imgui.PushStyleColor(imgui.constant.Col.WindowBg, 0x7F000000) --ウインドウを黒の50%透明バックにする
----------------------------------------------------------------------------------------------------------
--2番目のメインになる大きなウインドウの表示(チャイルドウインドウ)
--下の3つのボタンを表示(バックの黒枠は表示される)(チャイルドウインドウ)
function SCREENONE(GUIWINDOW, x, y)
	imgui.BeginChild("FirstScreenChild", 300, 24)	--1番目の黒のウインドウの中に表示される子供ウインドウ
	-- ボタンの作成
	imgui.SetWindowFontScale(1.2)
	
        if imgui.Button("Radios",100,24) then	--クローズボタンで閉じたときに表示される黒のウインドウ
		float_wnd_set_geometry(GUIWINDOW, 100, 500, 400, 50)	--クリックで表示されるウインドウ
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENTWO")
	end

        imgui.SameLine()        -- 横に並べる

        if imgui.Button("Com1",100,24) then	--クローズボタンで閉じたときに表示される黒のウインドウ
		float_wnd_set_geometry(GUIWINDOW, 405, 500, 705, 50)	--クリックで表示されるウインドウ
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENTWO")
	end
--
	imgui.EndChild()
end

ボタンをクリックして別ウインドウを開く

下に表示されていた「Radios」ボタンをクリックすると、下のウインドウが表示される。「Radios」ボタンは表示されなくなる。
「CLOSE」ボタンをクリックすると、ウインドウが閉じられ、元の「Radios」ボタンが表示される。この動きの繰り返しになる。2つ目の「Com1」ボタンも同じ動きになる。

--- OpenWindow_from_Button.lua
-- 単純にボタンからメインウインドウを開く、閉じるを繰り返す。
----------------------------------------------------------------------------------------------------------
-- 最初に表示される小さいボタンウインドウ
GUIWINDOW = float_wnd_create(10, 10, 2, true)
float_wnd_set_imgui_builder(GUIWINDOW, "SCREENONE")	--これは3つボタンを表示するのに必要
float_wnd_set_geometry(GUIWINDOW, 100, 50, 325, 10)	--下の3ボタンの黒のバック 左からの位置、下からの高さ
-- 上のパラメーター:ウインドウのハンドル、1番目黒の四角の左側からの位置と高さ、3番目以降は四角の右側の位置と高さ。
imgui.PushStyleColor(imgui.constant.Col.WindowBg, 0x7F000000) --ウインドウを黒の50%透明バックにする
----------------------------------------------------------------------------------------------------------
--2番目のメインになる大きなウインドウの表示(チャイルドウインドウ)
--下の3つのボタンを表示(バックの黒枠は表示される)(チャイルドウインドウ)
function SCREENONE(GUIWINDOW, x, y)
	imgui.BeginChild("FirstScreenChild", 300, 24)	--1番目の黒のウインドウの中に表示される子供ウインドウ
	-- ボタンの作成
	imgui.SetWindowFontScale(1.2)
	
        if imgui.Button("Radios",100,24) then	--クローズボタンで閉じたときに表示される黒のウインドウ
		float_wnd_set_geometry(GUIWINDOW, 100, 500, 400, 50)	--クリックで表示されるウインドウ
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENTWO")
	end
  
        imgui.SameLine()        -- 横に並べる

        if imgui.Button("Com1",100,24) then	--クローズボタンで閉じたときに表示される黒のウインドウ
		float_wnd_set_geometry(GUIWINDOW, 400, 500, 700, 50)	--クリックで表示されるウインドウ
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENTWO")
	end
--
	imgui.EndChild()
end

-- 開いたウインドウのクローズボタンの作成
function SCREENTWO(GUIWINDOW, x, y)
	imgui.BeginChild("SecondScreenChild", 200, 400)	--ウインドウの中で描画する範囲?これを消すとボタンが表示されない。
	imgui.SetWindowFontScale(1.2)	--下のボタンのフォントの大きさを指定
	if imgui.Button("CLOSE",60,30) then	--ボタンの大きさ
		float_wnd_set_geometry(GUIWINDOW, 100, 50, 325, 10)	--最初のボタンに戻る(最初のボタンと同じ設定にする必要がある)
		float_wnd_set_imgui_builder(GUIWINDOW, "SCREENONE")
	end
	imgui.EndChild()
end

これは単純なボタンからウインドウを開き、閉じるというだけのスクリプトになる。