4

フルスクリーン ウィンドウを生成する小さな .NET プログラムがあります。このウィンドウを一番後ろのウィンドウに保ちたいです (つまり、他のウィンドウがその上に開き、クリックしても前面に出ないようにする必要があります)。Windows Presentation Foundation でこれを行う実用的な方法はありますか?

4

1 に答える 1

2

私の知る限り、これを正しく行うには P/Invoke が必要です。ウィンドウのハンドルとフラグを指定して、SetWindowPos関数を呼び出します。HWND_BOTTOM

これにより、ウィンドウが Z オーダーの一番下に移動し、他のウィンドウが隠れるのを防ぎます。

サンプルコード:

Private Const SWP_NOSIZE As Integer = &H1
Private Const SWP_NOMOVE As Integer = &H2
Private Const SWP_NOACTIVATE As Integer = &H10

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function SetWindowPos(hWnd As IntPtr, hWndInsertAfter As IntPtr,
                                     X As Integer, Y As Integer,
                                     cx As Integer, cy As Integer,
                                     uFlags As Integer) As Boolean
End Function


Public Sub SetAsBottomMost(ByVal wnd As Window)
    ' Get the handle to the specified window
    Dim hWnd As IntPtr = New WindowInteropHelper(wnd).Handle

    ' Set the window position to HWND_BOTTOM
    SetWindowPos(hWnd, New IntPtr(1), 0, 0, 0, 0,
                 SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE)
End Sub
于 2011-02-19T07:22:01.287 に答える