imgui floating windowの種類 – FlyWithLua

フローティングウインドウにはいくつか種類があって、それぞれ記述の仕方がある。適当に入れるとエラーになるので注意が必要である。

バージョン2.7.0 NG以降では、2D、ポップアウト、またはVRで表示できるimguiウィンドウがあります。
これらはimguiウィジェットを使用し、Luaで作成できるX-Plane 11 Window APIスタイルのウィンド。

これは、luaでフローティングウィンドウを作成する方法です。

demo_wnd = float_wnd_create(300,200,1,true)
float_wnd_set_title(demo_wnd, "floating window Demo")
float_wnd_set_imgui_builder(demo_wnd, "build_demo")

function build_demo(demo_wnd, x, y)

end

メインウインドウを作成

demo_wnd = float_wnd_create(300,200,1,true)

demo_wnd = float_wnd_create(300,200,1,false)

上の設定で注意が必要なところ:
float_wnd_set_imgui_builder()で上のfalseを使うとウインドウは表示されなくなる。
float_wnd_set_ondraw で上のfalseを使うと以下のような画面に縁無しで表示される。

「demo_wnd」は、作成されるウィンドウのハンドル名です。(好きな名前を付けることができる変数)

最初の2つのパラメーターは、ウィンドウのサイズをボクセルで指定する。
ボクセルはスケーラブルなピクセル。設定でUIスケールが100%に設定されている場合、ボクセルはピクセルに等しくなる。ただし、ユーザーがUIスケールを100%以上に設定すると、ボクセルは複数のピクセルにまたがってスケールされる。

3番目のパラメーターは、ウィンドウ装飾を指定することができる。次の装飾が可能です:

「1」以外にすると周りの装飾がなくなってこのようになる。0、2、3、4はすべてこの形にになる。また「1」以外で「false」にするとウインドウが消えてしまう表示されない状態になる。

0:X-Planeはウィンドウに装飾を描画せず、自動クリックハンドラーを適用しません。ウィンドウはクリックがその境界を通過するのを停止しません。これは、たとえば全画面境界を要求する「ウィンドウ」に適しています。 利用可能な領域のごく一部を描画します。

1:マップなどの「ネイティブ」ウィンドウのデフォルト装飾。ウィンドウのサイズ変更とドラッグのためのクリックハンドラーと同様に、強固な背景を提供します。

2:X-Planeはウィンドウに装飾を描画せず、ウィンドウの端にサイズ変更ハンドラーを提供しませんが、クリックがウィンドウを通過するのを防ぎます。ダウズバウンド。

3:2と同様、ただしサイズ変更あり。X-Planeはウィンドウに装飾を描画しませんが、クリックがウィンドウの境界を通過するのを防ぎ、サイズ変更のための自動マウスハンドラーを提供します。

最後のパラメーターは、フローティングウィンドウにimgui(VR)を使用するかどうかを構成します。戻り値は、追加の設定に使用できるウィンドウへのハンドルです。

ウインドウを半透明にする

demo_wnd = float_wnd_create(300,200, 0, true)
imgui.PushStyleColor(imgui.constant.Col.WindowBg, 0x4D000000) –ウインドウを黒の70%透明

ちなみに枠を装飾すると半透明には設定できない。

ウインドウのタイトル作成

float_wnd_set_title(demo_wnd, “floating window Demo”)

この関数は、ウィンドウに装飾がある場合にウィンドウのタイトルを設定します。 最初のパラメーター(demo_wnd)は、float_wind_createで以前に作成されたウィンドウへのハンドルでなければなりません。
2番目のパラメーターは、ウィンドウのタイトル。日本語が使える。

ウインドウのポジション(初期位置)を設定

float_wnd_set_position(demo_wnd, 775, 650)

この関数は、ウィンドウの初期位置を設定します。 最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。
2番目と3番目のパラメーターは、ウィンドウの初期位置を設定します。

実際のimgui_builderウインドウを作成するところ

float_wnd_set_imgui_builder(demo_wnd, “build_demo”)

テキストや図形等を記述するためのところで、これは英語しか使えないウインドウになる。
imgui GUIはフレームごとに構築されます。 フレームごとに呼び出される関数を提供する必要があります。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。
2番目のパラメーターは、関数の名前でなければなりません。 Fly-WithLuaの他の関数とは異なり、ここでは関数名のみを渡すことができ、任意のlua文字列は渡せないことに注意してください。
この関数は、ウィンドウが表示されている間、すべてのフレームに対して呼び出されるため、ウィンドウが閉じている間に何かを行う必要がない限り、追加のdo_every_frameは必要ありません。

実際のondrawウインドウを作成するところ

float_wnd_set_ondraw(demo_wnd, “on_draw_floating_window”)

テキストや図形等を記述するためのところで、これは日本語が使えるウインドウになる。
この関数は、ondraw関数の名前を設定します。
最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 2番目のパラメーターは、ondraw関数の名前を設定します。

実際に色んなアイテムを入れてウインドウ内に表示する関数

function build_demo(demo_wnd, x, y)

この関数は、フレームごとに呼び出されます。 この関数を使用してGUIを作成します。
最初のパラメーター(demo_wnd)は、ウィンドウのハンドルです。 float_wnd_createによって返されるものと同じハンドルです。
同じビルダー機能を使用する複数のウィンドウがある場合、これらのウィンドウのどれが現在作成されているかを知る必要があります。
xおよびyパラメーターは、OpenGL座標でのウィンドウの現在の位置、つまりグローバル画面座標での左下隅の位置です。
これらの座標は、imgui GUI上でグラフィックモジュールを使用する場合にのみ必要です。
imguiのみを使用する場合、imguiにはウィンドウ内に独自の座標系があるため、これらの座標は必要ありません。

ウインドウ内をクリックしたときの処理

float_wnd_set_onclick(demo_wnd, “on_click_floating_window”)

ウインドウ内をクリックしたときの処理、この関数を使う(この中にクリックしたときの動作を記述する)
この関数は、onclick関数の名前を設定します。
最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 2番目のパラメーターは、onclick関数の名前を設定します。

ウインドウをクローズしたときの処理

float_wnd_set_onclose(demo_wnd, “on_close_floating_window”)

ウインドウをクローズしたときの処理関数。ウインドウを閉じた後にどのようにするかを設定。
この関数は、onclose関数の名前を設定します。
最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 2番目のパラメーターは、onclose関数の名前を設定します。

この関数は、ユーザーがウィンドウを閉じるときに呼び出されます。 ウィンドウはすでに破棄されているため、この関数でimgui関数を描画または呼び出すことはできません。

ウィンドウに閉じるボタンのある装飾(装飾1など)がある場合、ユーザーがウィンドウを閉じたときを知る方法が必要になる場合があります。
この関数は、ユーザーがウィンドウを閉じたときに呼び出される関数をセットアップするために使用できます。
最初のパラメーターは、float_wnd_createで以前に作成されたウィンドウのハンドルでなければならず、2番目のパラメーターは関数の名前でなければなりません。
FlyWithLuaの他の関数とは異なり、ここでは関数名のみを渡すことができ、任意のlua文字列を渡すことはできません。 この関数は、ユーザーがウィンドウを閉じると呼び出されます。
ウィンドウが閉じられた後、そのビルダー関数は再度呼び出されず、float_wnd_createによって返されたウィンドウハンドル変数を使用することは違法です。 ウィンドウのタイトルを閉じた後に設定することは違法です。

xplm_wnd = float_wnd_get_xplm_handle(demo_wnd)

この関数は、上記で作成されたウィンドウのxplmハンドルを取得して、ffiで使用します。
「xplm_wnd」は、作成されたウィンドウのxplmハンドルの名前です。 最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

function on_draw_floating_window(demo_wnd, x3, y3)

最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 xとyはウィンドウの原点です。つまり、左下xは右に増加し、yは上に増加します。

function on_click_floating_window(demo_wnd, x3, y3)

最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 xとyは、ウィンドウの原点、つまり左下からの相対値です。

function on_close_floating_window(demo_wnd)

on_closeが呼び出されたとき、wnd変数を使用して何かを行うことは不正です。 また、on_closeで新しいウィンドウを作成することもできません!
最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

is_popped = float_wnd_is_popped(demo_wnd)

「is_popped」は、作成されたウィンドウがポップアウトされたかどうかを確認するブール値の名前です。
パラメーター

on_closeが呼び出されたとき、wnd変数を使用して何かを行うことは不正です。 また、on_closeで新しいウィンドウを作成することもできません!
最初のパラメーター(demo_wnd)は、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

is_visible = float_wnd_get_visible(demo_wnd)

「is_visable」は、作成されたウィンドウが表示可能かどうかを確認するブール値の名前です。 パラメーター(demo_wnd)は、float_wnd_createで以前に作成されたウィンドウへのハンドルでなければなりません。

is_front = float_wnd_is_front(demol_wnd)

「is_front」は、作成されたウィンドウが前面にあるかどうかを確認するブール値の名前です。
パラメーターは、float_wnd_createで以前に作成されたウィンドウへのハンドルでなければなりません。

is_vr = float_wnd_is_vr(demo_wnd)

「is_vr」は、作成されたウィンドウがvrにあるかどうかを確認するブール値の名前です。
パラメーターは、float_wnd_createで以前に作成されたウィンドウへのハンドルでなければなりません。

function float_wnd_bring_to_front(demo_wnd)

この関数は、作成されたウィンドウを前面に表示します。 パラメーターは、float_wnd_createで以前に作成されたウィンドウへのハンドルでなければなりません。

ウインドウの最小最大サイズ制限設定

function float_wnd_set_resizing_limits(demo_wnd, minWidth, minHeight, maxWidth, maxHeight)

この関数は、作成されたウィンドウのサイズ変更制限を設定します。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。
2番目のパラメーターは、作成されたウィンドウの最小幅を設定します。
3番目のパラメーターは、作成されたウィンドウの最小の高さを設定します。
4番目のパラメーターは、作成されるウィンドウの最大幅を設定します。
5番目のパラメーターは、作成されたウィンドウの最大の高さを設定します。

function float_wnd_set_positioning_mode(demo_wnd, 1, -1)

この関数は、作成されたウィンドウの位置決めモードを設定します。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。
2番目のパラメーターは、X-Planeが作成されたウィンドウを配置する方法のポリシーを設定します。

ポリシーの有効な値は次のとおりです。
xplm_WindowPositionFree 0 普通のウインドウ(移動する)
xplm_WindowCenterOnMonitor 1 普通のウインドウ(センターに表示され移動しない)
xplm_WindowFullScreenOnMonitor 2 ウインドウがフルスクリーンになって画面いっぱいになる。
xplm_WindowFullScreenOnAllMonitors 3 ウインドウがフルスクリーンになって画面いっぱいになる。
xplm_WindowPopOut 4 これがおもしろいX-Planeウインドウ以外にも移動できるようになる(タイトルが付かない)
xplm_WindowPopOut 4 xplm_WindowVR 5

3番目のパラメーターはモニターのインデックスです。

X-Planeウインドウの変化でどのようにフローティングウインドウを変化させるかを設定

function float_wnd_set_gravity(demo_wnd, gLeft, gTop, gRight, gBottom)

※「gravity:重力、引力?とはX-Planeウインドウのサイズが変化したときimguiのウインドウがどのように移動するかを制御する。
ウィンドウの「gravity:重力、引力?」は、X-Planeウィンドウ全体のサイズ変更時にウィンドウがどのように移動するかを制御します。重力が1の場合、ウィンドウは右端または上端に対する位置を維持し、0は左/下端に、0.5は中央に保持します。
デフォルトの重力(引力?)は(0、1、0、1)です。これは、ウィンドウが左上を基準にしてその位置を維持し、ウィンドウが拡大してもサイズが変わらないことを意味します。
たとえば、画面の最上部に固定されたウィンドウ(一定の高さ)が必要で、ウィンドウの幅全体に拡大する場合は、(0、1、1、1)を渡します。左端と右端は画面のそれぞれの端に対して相対的な位置を維持するため、ウィンドウ全体の幅はX-Planeウィンドウによって変わります。
最新のウィンドウにのみ適用されます。 (非推奨のXPLMCreateWindow()を使用して作成されたウィンドウ、またはXPLM300より前のバージョンのSDKに対してコンパイルされたウィンドウは、単にデフォルトの重力を取得します。)
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。残りのパラメーターは上記の説明に従います。

通常の2Dウィンドウの位置とサイズを設定

function float_wnd_set_geometry(demo_wnd, nLeft, nTop, nRight, nBottom)

最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 残りのパラメーターは、作成されたウィンドウの位置とサイズを設定します。

このルーチンを使用すると、通常の2Dウィンドウの位置とサイズを設定できます。
フローティングウィンドウの場合、-void XPLMSetWindowGeometry(XPLMWindowID inWindowID、int inLeft、int inTop、int inRight、int inBottom))と同等
単位と座標系はXPLMGetWindowGeometry()のものと一致します。 つまり、最新のウィンドウはグローバルデスクトップボクセル座標を使用しますが、レガシーウィンドウはメインのX-Plane表示に対してピクセルを使用します。
これは、「フローティング」ウィンドウ(つまり、独自のファーストクラスのオペレーティングシステムウィンドウに「ポップアウト」されるのではなく、Xプレーンシミュレーションウィンドウ内に描画されるウィンドウ)にのみ適用されることに注意してください。 位置決めモードがxplm_WindowPopOutであるウィンドウの位置を設定するには、代わりにXPLMSetWindowGeometryOS()を使用する必要があります。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 残りのパラメーターは、作成されたウィンドウの位置とサイズを設定します。

ポップアップまたはOS 2dウィンドウの位置とサイズを設定

function float_wnd_set_geometry(demo_wnd, pLeft, pTop, pRight, pBottom)

このルーチンを使用すると、ポップアップまたはOS 2dウィンドウの位置とサイズを設定できます。
OSウィンドウの場合は-void XPLMSetWindowGeometryOS(XPLMWindowID inWindowID、int inLeft、int inTop、int inRight、int inBottom)と同等
このルーチンを使用すると、オペレーティングシステムのピクセル座標で、ポップアウトされたウィンドウ(つまり、X-Planeシミュレーションウィンドウの外部に存在するxplm_WindowPopOutであるウィンドウの独自のファーストクラスの位置とサイズを設定できます。 オペレーティングシステムウィンドウ)。
ウィンドウがポップアウトされること(XPLMWindowIsPoppedOut()を使用)と、モニターが実際に提供するOS座標に存在すること(XPLMGetAllMonitorBoundsOS()を使用)の両方を保証する責任があることに注意してください。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。 残りのパラメーターは、作成されたウィンドウの位置とサイズを設定します。

VRウィンドウのサイズを設定

function float_wnd_set_geometry(demo_wnd, vrWidth, vrHeight)

このルーチンを使用すると、VRウィンドウのサイズを設定できます。
VRウィンドウの場合、-void XPLMSetWindowGeometryVR(XPLMWindowID inWindowID、int widthBoxels、int heightBoxels)と同等
このルーチンを使用すると、VRのウィンドウ(位置決めモードがxplm_WindowVRのウィンドウ)のサイズをボクセル単位で設定できます。
ウィンドウがVRにあることを確認する責任があることに注意してください(XPLMWindowIs-InVR()を使用)。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。
残りのパラメーターは、作成されたウィンドウのサイズを中心位置から増減するように設定します。

通常の2Dウィンドウの位置とサイズを返します

nwinLeft, nwinTop, nwinRight, nwinBottom = float_wnd_get_geometry(demo_wnd)

このルーチンは、通常の2Dウィンドウの位置とサイズを返します。単位と座標系は、使用しているウィンドウのタイプによって異なります。
-void XPLMGetWindowGeometry(XPLMWindowID inWindowID、int * outLeft、int * outTop、int * outRight、int * outBottom)と同等のフローティングウィンドウ用
これがレガシーウィンドウ(SDKのXPLM300以前のバージョンに対してコンパイルされたウィンドウ、またはXPLMCreateWindowEx()を使用して作成されなかったXPLM300ウィンドウ)である場合、単位はメインXプレーン表示に対するピクセルです。
一方、これが新しいX-Plane 11スタイルのウィンドウ(XPLM300 SDKに対してコンパイルされ、XPLMCreateWindowEx()を使用して作成された)である場合、ユニットはグローバルデスクトップボクセルです。
パラメータを受け取らない場合はNULLを渡します。
“nwinLeft”作成されたウィンドウの左側の変数の名前。
“nwinTop”作成されたウィンドウの上部の変数の名前。
“nwinRight”作成されたウィンドウの右側の変数の名前。
“nwinBottom”作成されたウィンドウの下部の変数の名前。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

ポップアウトされたウィンドウまたはOSウィンドウの位置とサイズを返します

pwinLeft, pwinTop, pwinRight, pwinBottom = float_wnd_get_geometry(fwl_wnd)

このルーチンは、ポップアウトされたウィンドウまたはOSウィンドウの位置とサイズを返します。単位と座標系は、使用しているウィンドウのタイプによって異なります。
OSウィンドウの場合、-void XPLMGetWindowGeometryOS(XPLMWindowID inWindowID、int * outLeft、int * outTop、int * outRight、int * outBottom)と同等
このルーチンを使用すると、オペレーティングシステムのピクセル座標で、ポップアウトされたウィンドウ(つまり、X-Planeシミュレーションウィンドウの外部に存在するxplm_WindowPopOutであるウィンドウの独自のファーストクラスの位置とサイズを設定できます。オペレーティングシステムウィンドウ)。
ウィンドウがポップアウトされること(XPLMWindowIsPoppedOut()を使用)と、モニターが実際に提供するOS座標に存在すること(XPLMGetAllMonitorBoundsOS()を使用)の両方を保証する責任があることに注意してください。

“pwinLeft”作成されたウィンドウの左側の変数の名前。
“pwinTop”作成されたウィンドウの上部の変数の名前。
“pwinRight”作成されたウィンドウの右側の変数の名前。
“pwinBottom”作成されたウィンドウの下部の変数の名前。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

VRウィンドウのサイズを返します

vrwinWidth, vrwinHeight = float_wnd_get_geometry(demo_wnd)

このルーチンは、VRウィンドウのサイズを返します。
VRウィンドウの場合、-void XPLMGetWindowGeometryVR(XPLMWindowID inWindowID、int * outWidthBoxels、int * outHeightBoxels)と同等
VRのウィンドウの幅と高さをボクセル単位で返します。 ウィンドウがVRにあることを確認する責任があることに注意してください(XPLMWindowIsInVR()を使用)。

“vrWidth”作成されたウィンドウのvr幅を設定する変数の名前。
“vrHeight”作成されたウィンドウのvr高さを設定する変数の名前。
最初のパラメーターは、以前にfloat_wnd_createで作成されたウィンドウのハンドルでなければなりません。

グローバルデスクトップボクセルの現在のマウス位置を返します

msgx, msgy = XPLMGetMouseLocationGlobal()

グローバルデスクトップボクセルの現在のマウス位置を返します。 XPLMGetMouseLocation()とは異なり、メインX-Planeウィンドウの左下は(0、0)であるとは限りません。代わりに、原点はグローバルデスクトップスペース全体の左下です。 さらに、このルーチンは、マウスがプライマリディスプレイ以外のX-Planeウィンドウに移動したときの実際のマウス位置を提供します。 したがって、ポップアップウィンドウとセカンダリモニターの両方で使用できます。
これは、最新のウィンドウ(つまり、XPLM-CreateWindowEx()で作成されたウィンドウ)で使用するマウス位置関数です。
NULLを渡すと、どちらのパラメーターに関する情報も受信しません。 “msgx”作成されたウィンドウのグローバルxマウス位置を取得する変数の名前。 「msgy」作成されたウィンドウのグローバルyマウス位置を取得する変数の名前。

メインX-Plane OpenGLウィンドウのサイズをピクセル単位で返す

ssWidth, ssHeight = XPLMGetScreenSize()

このルーチンは、メインX-Plane OpenGLウィンドウのサイズをピクセル単位で返します。 この数値を使用して、3次元で描画するときにユーザーが見ることができる詳細な量の大まかなアイデアを得ることができます。
“ssWidth”画面サイズの幅を取得する変数の名前。 “ssHeight”画面サイズの高さを取得する変数の名前。

bLeft, bTop, bRight, bBottom = XPLMGetScreenBoundsGlobal()

このルーチンは、「グローバル」X-Planeデスクトップの境界をボクセルで返します。非グローバルバージョンXPLMGetScreenSize()とは異なり、これはマルチモニター対応です。マルチモニターの認識には、3つの主要な結果があります。
まず、ユーザーが2台以上のモニターでフルスクリーンでX-Planeを実行している場合(通常、モニターごとに1つのフルスクリーンウィンドウを使用して構成されます)、グローバルデスクトップはすべてのX-Planeウィンドウを含むサイズになります。
第二に、画面座標の原点は(0、0)であるとは限りません。ユーザーが2台のディスプレイを並べて、両方とも1080pで実行しているとします。さらに、左側に「プライマリ」モニターを表示するようにOSを設定し、X-Planeは右側のモニターのみでフルスクリーンで実行されているとします。この場合、グローバルデスクトップの境界は(1920、0)から(3840、1080)までの長方形になります。ユーザーが後でX-Planeにプライマリモニターでも描画するように要求した場合、境界は(0、0)から(3840、1080)に変わります。
最後に、仮想デスクトップの使用可能な領域が完全な長方形でない場合(たとえば、モニターの解像度が異なる場合や、オペレーティングシステムでモニターの上下が左右に構成されているため)、グローバルデスクトップ無駄なスペースが含まれます。したがって、2つの1080pモニターがあり、モニター2の左下がモニター1の右上になるように構成されている場合、グローバルデスクトップ領域は(0、0)から(3840、2160)までの長方形になります。
ポップアウトされたウィンドウ(X-Plane内で「フローティング」ではなく、独自のオペレーティングシステムウィンドウで描画されたウィンドウ)は、これらの境界には含まれないことに注意してください。

bLeft” “global” X-Planeデスクトップの左境界の変数の名前(ボクセル単位)。
bTop” 「グローバル」X-Plane デスクトップの上部境界の変数名 (ボクセル単位)。
bRight“「グローバル」X-Plane デスクトップの右境界の変数名 (ボクセル単位)。
bBottom” 「グローバル」X-Plane デスクトップの下限の変数名 (ボクセル単位)。

tOS = XPLMGetAllMonitorBoundsOS()

このルーチンは、オペレーティングシステムのグローバルデスクトップ領域内の各モニターの境界(ピクセル単位)ですぐに呼び出します。 XPLMGetAllMonitorBounds- Global()とは異なり、これにはX-Planeウィンドウのないモニターが含まれることがあります。
この関数のモニターインデックスはXPLMGetAllMonitorBound- sGlobal()によって提供されるものと一致しますが、座標は異なります(X-Planeグローバルデスクトップがオペレーティングシステムのグローバルデスクトップと一致しない場合があり、1つのX-Planeボクセルが1ピクセルより大きい場合があることに注意してください) )。
この関数は、lua多次元テーブル(各モニターの要素)に次の値を返します。
int MonitorIndex; int inLeft; int inTop; int inRight; int inBottom;
FWLの値にアクセスするには、次の形式を使用します。tOS[x] .yyyy、x =モニター番号、yyyyはテーブルメンバーです。
モニター1の例:tOS [1] .inLeft; tOS [1] .inBottom; モニター2:tOS [2] .inLeft; tOS [2] .inBottom

tGB = XPLMGetAllMonitorBoundsGlobal()

このルーチンは、X-Planeグローバルデスクトップスペース内の各フルスクリーンX-Planeウィンドウの境界(ボクセル単位)ですぐに呼び出します。モニターがX-Planeウィンドウで覆われていない場合、この方法では境界を取得できないことに注意してください。同様に、X-Planeウィンドウのみを持つモニター(フルスクリーンモードではない)は含まれません。
X-Planeがフルスクリーンで実行されており、モニターが同じサイズであり、OSで連続して構成されている場合、すべてのフルスクリーンモニターの結合されたグローバル境界は、XPLMGetScreenBoundsGlobal()によって返されるグローバルデスクトップ境界の合計と一致します。 (もちろん、X-Planeがウィンドウモードで実行されている場合、これは当てはまりません。同様に、異なるサイズのモニターがある場合、グローバルデスクトップスペースには無駄なスペースが含まれます。)
この関数のモニターインデックスはXPLMGetAllMonitorBound- sOS()によって提供されるものと一致しますが、座標が異なることに注意してください(X-Planeグローバルデスクトップはオペレーティングシステムのグローバルデスクトップと一致しない場合があり、1つのX-Planeボクセルは1ピクセルより大きい場合があるため) 150%または200%のスケーリングによる)。
この関数は、lua多次元テーブル(各モニターの要素)に次の値を返します。
int MonitorIndex; int inLeft; int inTop; int inRight; int inBottom;
FWLの値にアクセスするには、次の形式を使用します。tOS[x] .yyyy、x =モニター番号、yyyyはテーブルメンバーです。
モニター1の例:tOS [1] .inLeft; tOS [1] .inBottom;モニター2:tOS [2] .inLeft; tOS [2] .inBottom

イメージを読み込む

ここからはウインドウと直接関係ないかもしれないが….

image_id = float_wnd_load_image(SCRIPT_DIRECTORY .. “/imgui_demo.jpg”)

imguiは画像の描画をサポートしているので、読み込みましょう。 スクリプトごとに一度だけロードされるように、イメージは常にグローバルにロードする必要があります!
imguiウィジェットには状態がありません。つまり、チェックボックス、ラジオボタンなどの状態をグローバルに保存する必要があります。

ウインドウに関する特別の動作を色々設定してある。普段は使わないかもしれないが、何かのときにヒントになる項目が色々設定してあるので参考になると思う。 -- -- …
polo-web.com