3

質問する前に、ここや他のフォーラムで約 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 を使用すると、ポーカー アプリがフリーズします。

絵。私のアプリは一番下のウィンドウで、ポーカー アプリ ウィンドウの左上隅に小さなフォームを作成します。

サンプル

4

1 に答える 1

-1

hud フォームの親を table フォームに設定することで、目的を達成できると思います。何かのようなもの

[STAThread]
static void Main()
{
    const int numWindows = 3;
    for (int i = 0; i < numWindows; i++)
    {
        var tableForm = new Form { Text = @"Table " + i, Size = new Size(400, 400) };
        tableForm.Show();

        var hudForm = new Form { Text = @"Hud " + i, Size = new Size(100,100) };
        hudForm.Show(tableForm);
    }

    var rootForm = new Form();
    Application.Run(rootForm);
}
于 2012-11-15T12:19:45.967 に答える