質問する前に、ここや他のフォーラムで約 30 のスレッドを読みましたが、どの解決策もうまくいきませんでした:(
それで、これが問題です。オンライン ポーカー ルームの Hud をやっています。したがって、私のプログラムでは、ポーカー ルームが作成するすべてのウィンドウの上にフォームを表示する必要があります。
問題は、複数の「テーブル ウィンドウ」(ポーカー アプリが作成するもの) をスタックしたい場合です。私の hud が一番上に設定されている場合、すべてのテーブルの上にすべての hud がありますが、私が望むのはz オーダーは Hud-Table-Hud-Table-Hu... などです。
Windowsフォーム機能とWindows APIの両方を使用して、いくつかの方法を試しました:
this.SetDesktopLocation(rct.Left + p.X, rct.Top + p.Y);
//Or
Win32Utils.SetParent(this.Handle, this.Table.Handle);
//Or
Win32Utils.SetWindowPos(this.Handle, (int)this.Table.Handle, rct.Left + p.X, rct.Top + p.Y, this.Width, this.Height, (int)1);
//Or
Win32Utils.SetZOrder(this.Handle, this.Table.Handle);
SetZOrder の場合、コードは次のとおりです。
public static void SetZOrder(IntPtr targetHwnd, IntPtr insertAfter)
{
IntPtr nextHwnd = IntPtr.Zero;
SetWindowPos(targetHwnd, insertAfter, 0, 0, 0, 0, SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOSIZE | SetWindowPosFlags.SWP_NOACTIVATE);
}
だから、他に何を試せばいいのかわからない。
注: SetParent を使用すると、ポーカー アプリがフリーズします。
絵。私のアプリは一番下のウィンドウで、ポーカー アプリ ウィンドウの左上隅に小さなフォームを作成します。