Как я могу сохранить окно в WPF? - PullRequest
4 голосов
/ 19 февраля 2011

У меня есть небольшая программа .NET, которая выдает полноэкранное окно.Я хотел бы сохранить это окно самым задним окном (т.е. другие окна должны открываться поверх него, и оно не должно выходить вперед при нажатии).Есть ли практический способ сделать это в Windows Presentation Foundation?

1 Ответ

2 голосов
/ 19 февраля 2011

Насколько я знаю, вам придется 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
...