SetWindowPos

C# Signature:

/// <summary>
    ///     Changes the size, position, and Z order of a child, pop-up, or top-level window. These windows are ordered
    ///     according to their appearance on the screen. The topmost window receives the highest rank and is the first window
    ///     in the Z order.
    ///     <para>See https://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx for more information.</para>
    /// </summary>
    /// <param name="hWnd">C++ ( hWnd [in]. Type: HWND )<br />A handle to the window.</param>
    /// <param name="hWndInsertAfter">
    ///     C++ ( hWndInsertAfter [in, optional]. Type: HWND )<br />A handle to the window to precede the positioned window in
    ///     the Z order. This parameter must be a window handle or one of the following values.
    ///     <list type="table">
    ///     <itemheader>
    ///         <term>HWND placement</term><description>Window to precede placement</description>
    ///     </itemheader>
    ///     <item>
    ///         <term>HWND_BOTTOM ((HWND)1)</term>
    ///         <description>
    ///         Places the window at the bottom of the Z order. If the hWnd parameter identifies a topmost
    ///         window, the window loses its topmost status and is placed at the bottom of all other windows.
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>HWND_NOTOPMOST ((HWND)-2)</term>
    ///         <description>
    ///         Places the window above all non-topmost windows (that is, behind all topmost windows). This
    ///         flag has no effect if the window is already a non-topmost window.
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>HWND_TOP ((HWND)0)</term><description>Places the window at the top of the Z order.</description>
    ///     </item>
    ///     <item>
    ///         <term>HWND_TOPMOST ((HWND)-1)</term>
    ///         <description>
    ///         Places the window above all non-topmost windows. The window maintains its topmost position
    ///         even when it is deactivated.
    ///         </description>
    ///     </item>
    ///     </list>
    ///     <para>For more information about how this parameter is used, see the following Remarks section.</para>
    /// </param>
    /// <param name="X">C++ ( X [in]. Type: int )<br />The new position of the left side of the window, in client coordinates.</param>
    /// <param name="Y">C++ ( Y [in]. Type: int )<br />The new position of the top of the window, in client coordinates.</param>
    /// <param name="cx">C++ ( cx [in]. Type: int )<br />The new width of the window, in pixels.</param>
    /// <param name="cy">C++ ( cy [in]. Type: int )<br />The new height of the window, in pixels.</param>
    /// <param name="uFlags">
    ///     C++ ( uFlags [in]. Type: UINT )<br />The window sizing and positioning flags. This parameter can be a combination
    ///     of the following values.
    ///     <list type="table">
    ///     <itemheader>
    ///         <term>HWND sizing and positioning flags</term>
    ///         <description>Where to place and size window. Can be a combination of any</description>
    ///     </itemheader>
    ///     <item>
    ///         <term>SWP_ASYNCWINDOWPOS (0x4000)</term>
    ///         <description>
    ///         If the calling thread and the thread that owns the window are attached to different input
    ///         queues, the system posts the request to the thread that owns the window. This prevents the calling
    ///         thread from blocking its execution while other threads process the request.
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_DEFERERASE (0x2000)</term>
    ///         <description>Prevents generation of the WM_SYNCPAINT message. </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_DRAWFRAME (0x0020)</term>
    ///         <description>Draws a frame (defined in the window's class description) around the window.</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_FRAMECHANGED (0x0020)</term>
    ///         <description>
    ///         Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message
    ///         to the window, even if the window's size is not being changed. If this flag is not specified,
    ///         WM_NCCALCSIZE is sent only when the window's size is being changed
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_HIDEWINDOW (0x0080)</term><description>Hides the window.</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOACTIVATE (0x0010)</term>
    ///         <description>
    ///         Does not activate the window. If this flag is not set, the window is activated and moved to
    ///         the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter
    ///         parameter).
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOCOPYBITS (0x0100)</term>
    ///         <description>
    ///         Discards the entire contents of the client area. If this flag is not specified, the valid
    ///         contents of the client area are saved and copied back into the client area after the window is sized or
    ///         repositioned.
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOMOVE (0x0002)</term>
    ///         <description>Retains the current position (ignores X and Y parameters).</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOOWNERZORDER (0x0200)</term>
    ///         <description>Does not change the owner window's position in the Z order.</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOREDRAW (0x0008)</term>
    ///         <description>
    ///         Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies
    ///         to the client area, the nonclient area (including the title bar and scroll bars), and any part of the
    ///         parent window uncovered as a result of the window being moved. When this flag is set, the application
    ///         must explicitly invalidate or redraw any parts of the window and parent window that need redrawing.
    ///         </description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOREPOSITION (0x0200)</term><description>Same as the SWP_NOOWNERZORDER flag.</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOSENDCHANGING (0x0400)</term>
    ///         <description>Prevents the window from receiving the WM_WINDOWPOSCHANGING message.</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOSIZE (0x0001)</term>
    ///         <description>Retains the current size (ignores the cx and cy parameters).</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_NOZORDER (0x0004)</term>
    ///         <description>Retains the current Z order (ignores the hWndInsertAfter parameter).</description>
    ///     </item>
    ///     <item>
    ///         <term>SWP_SHOWWINDOW (0x0040)</term><description>Displays the window.</description>
    ///     </item>
    ///     </list>
    /// </param>
    /// <returns><c>true</c> or nonzero if the function succeeds, <c>false</c> or zero otherwise or if function fails.</returns>
    /// <remarks>
    ///     <para>
    ///     As part of the Vista re-architecture, all services were moved off the interactive desktop into Session 0.
    ///     hwnd and window manager operations are only effective inside a session and cross-session attempts to manipulate
    ///     the hwnd will fail. For more information, see The Windows Vista Developer Story: Application Compatibility
    ///     Cookbook.
    ///     </para>
    ///     <para>
    ///     If you have changed certain window data using SetWindowLong, you must call SetWindowPos for the changes to
    ///     take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
    ///     SWP_FRAMECHANGED.
    ///     </para>
    ///     <para>
    ///     A window can be made a topmost window either by setting the hWndInsertAfter parameter to HWND_TOPMOST and
    ///     ensuring that the SWP_NOZORDER flag is not set, or by setting a window's position in the Z order so that it is
    ///     above any existing topmost windows. When a non-topmost window is made topmost, its owned windows are also made
    ///     topmost. Its owners, however, are not changed.
    ///     </para>
    ///     <para>
    ///     If neither the SWP_NOACTIVATE nor SWP_NOZORDER flag is specified (that is, when the application requests that
    ///     a window be simultaneously activated and its position in the Z order changed), the value specified in
    ///     hWndInsertAfter is used only in the following circumstances.
    ///     </para>
    ///     <list type="bullet">
    ///     <item>Neither the HWND_TOPMOST nor HWND_NOTOPMOST flag is specified in hWndInsertAfter. </item>
    ///     <item>The window identified by hWnd is not the active window. </item>
    ///     </list>
    ///     <para>
    ///     An application cannot activate an inactive window without also bringing it to the top of the Z order.
    ///     Applications can change an activated window's position in the Z order without restrictions, or it can activate
    ///     a window and then move it to the top of the topmost or non-topmost windows.
    ///     </para>
    ///     <para>
    ///     If a topmost window is repositioned to the bottom (HWND_BOTTOM) of the Z order or after any non-topmost
    ///     window, it is no longer topmost. When a topmost window is made non-topmost, its owners and its owned windows
    ///     are also made non-topmost windows.
    ///     </para>
    ///     <para>
    ///     A non-topmost window can own a topmost window, but the reverse cannot occur. Any window (for example, a
    ///     dialog box) owned by a topmost window is itself made a topmost window, to ensure that all owned windows stay
    ///     above their owner.
    ///     </para>
    ///     <para>
    ///     If an application is not in the foreground, and should be in the foreground, it must call the
    ///     SetForegroundWindow function.
    ///     </para>
    ///     <para>
    ///     To use SetWindowPos to bring a window to the top, the process that owns the window must have
    ///     SetForegroundWindow permission.
    ///     </para>
    /// </remarks>

[DllImport("user32.dll", SetLastError=true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, UInt32 uFlags);

VB.NET Signature:

VB Signature

C# Constants:

VB.NET Constants:

Alternative Managed API:

C# Code Sample

VB.Net Sample

VB.Net Sample

C# WPF Remarks

C# WPF Remarks

Última actualización