Función SetWindowPos (winuser.h)

Cambia el tamaño, la posición y el orden Z de una ventana secundaria, emergente o de nivel superior. Estas ventanas se ordenan según su apariencia en la pantalla. La ventana superior recibe el rango más alto y es la primera ventana en el orden Z.

Sintaxis

BOOL SetWindowPos(
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  X,
  [in]           int  Y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

Parámetros

[in] hWnd

Tipo: HWND

Un identificador de la ventana.

[in, optional] hWndInsertAfter

Tipo: HWND

Identificador de la ventana que precede a la ventana posicionada en el orden Z. Este parámetro debe ser un identificador de ventana o uno de los valores siguientes.

Valor Significado
HWND_BOTTOM
(HWND)1
Places la ventana en la parte inferior del orden Z. Si el parámetro hWnd identifica una ventana superior, la ventana pierde su estado superior y se coloca en la parte inferior de todas las demás ventanas.
HWND_NOTOPMOST
(HWND)-2
Places la ventana por encima de todas las ventanas no superiores (es decir, detrás de todas las ventanas superiores). Esta marca no tiene ningún efecto si la ventana ya es una ventana no superior.
HWND_TOP
(HWND)0
Places la ventana en la parte superior del pedido Z.
HWND_TOPMOST
(HWND)-1
Coloca la ventana encima de todas las ventanas no superiores. La ventana mantiene su posición superior incluso cuando está desactivada.
 

Para obtener más información sobre cómo se usa este parámetro, vea la siguiente sección Comentarios.

[in] X

Tipo: int

Nueva posición del lado izquierdo de la ventana, en coordenadas de cliente.

[in] Y

Tipo: int

Nueva posición de la parte superior de la ventana, en coordenadas de cliente.

[in] cx

Tipo: int

Nuevo ancho de la ventana, en píxeles.

[in] cy

Tipo: int

Nuevo alto de la ventana, en píxeles.

[in] uFlags

Tipo: UINT

Marcas de ajuste de tamaño y posicionamiento de la ventana. Este parámetro puede ser una combinación de los valores siguientes.

Value Significado
SWP_ASYNCWINDOWPOS
0x4000
Si el subproceso que realiza la llamada y el subproceso propietario de la ventana se adjuntan a diferentes colas de entrada, el sistema envía la solicitud al subproceso que posee la ventana. Esto impide que el subproceso que realiza la llamada bloquee su ejecución mientras otros subprocesos procesan la solicitud.
SWP_DEFERERASE
0x2000
Impide la generación del mensaje de WM_SYNCPAINT .
SWP_DRAWFRAME
0x0020
Dibuja un marco (definido en la descripción de clase de la ventana) alrededor de la ventana.
SWP_FRAMECHANGED
0x0020
Aplica nuevos estilos de marco establecidos mediante la función SetWindowLong . Envía un mensaje WM_NCCALCSIZE a la ventana, incluso si no se cambia el tamaño de la ventana. Si no se especifica esta marca, WM_NCCALCSIZE solo se envía cuando se cambia el tamaño de la ventana.
SWP_HIDEWINDOW
0x0080
Oculta la ventana.
SWP_NOACTIVATE
0x0010
No activa la ventana. Si no se establece esta marca, la ventana se activa y se mueve a la parte superior del grupo superior o no superior (según la configuración del parámetro hWndInsertAfter ).
SWP_NOCOPYBITS
0x0100
Descarta el contenido del área cliente. Si no se especifica esta marca, el contenido válido del área de cliente se guarda y se copia en el área cliente después de cambiar el tamaño o la posición de la ventana.
SWP_NOMOVE
0x0002
Conserva la posición actual (omite los parámetros X e Y ).
SWP_NOOWNERZORDER
0x0200
No cambia la posición de la ventana del propietario en el orden Z.
SWP_NOREDRAW
0x0008
No vuelve a dibujar los cambios. Si se establece esta marca, no se vuelve a pintar nada. Esto se aplica al área cliente, al área no cliente (incluida la barra de título y las barras de desplazamiento) y a cualquier parte de la ventana primaria que se haya descubierto como resultado del movimiento de la ventana. Cuando se establece esta marca, la aplicación debe invalidar o volver a dibujar explícitamente todas las partes de la ventana y la ventana primaria que necesiten volver a dibujar.
SWP_NOREPOSITION
0x0200
Igual que la marca SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Impide que la ventana reciba el mensaje WM_WINDOWPOSCHANGING .
SWP_NOSIZE
0x0001
Conserva el tamaño actual (omite los parámetros cx y cy ).
SWP_NOZORDER
0x0004
Conserva el orden Z actual (omite el parámetro hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
Muestra la ventana.

Valor devuelto

Tipo: BOOL

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Como parte de la nueva arquitectura de Vista, todos los servicios se movieron fuera del escritorio interactivo a la sesión 0. Las operaciones del administrador de ventanas y hwnd solo son eficaces dentro de una sesión y se producirá un error en los intentos entre sesiones para manipular el hwnd. Para obtener más información, vea La historia para desarrolladores de Windows Vista: guía de compatibilidad de aplicaciones.

Si ha cambiado ciertos datos de ventana mediante SetWindowLong, debe llamar a SetWindowPos para que los cambios surtan efecto. Use la siguiente combinación para uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Una ventana se puede crear en la parte superior estableciendo el parámetro hWndInsertAfter en HWND_TOPMOST y asegurándose de que la marca de SWP_NOZORDER no está establecida o estableciendo la posición de una ventana en el orden Z para que esté por encima de cualquier ventana superior existente. Cuando una ventana no superior se hace superior, sus ventanas propiedad también devienen superiores. Sin embargo, sus propietarios no cambian.

Si no se especifica la marca SWP_NOACTIVATE ni SWP_NOZORDER (es decir, cuando la aplicación solicita que una ventana se active simultáneamente y su posición en el orden Z cambie), el valor especificado en hWndInsertAfter solo se usa en las siguientes circunstancias.

  • Ni el HWND_TOPMOST ni la marca HWND_NOTOPMOST se especifican en hWndInsertAfter.
  • La ventana identificada por hWnd no es la ventana activa.
Una aplicación no puede activar una ventana inactiva sin incluirla en la parte superior del orden Z. Las aplicaciones pueden cambiar la posición de una ventana activada en el orden Z sin restricciones, o puede activar una ventana y, a continuación, moverla a la parte superior de las ventanas más arriba o no superior.

Si se cambia la posición de una ventana superior a la parte inferior (HWND_BOTTOM) del orden Z o después de cualquier ventana que no sea superior, ya no se encuentra más arriba. Cuando se convierte en una ventana superior más no superior, sus propietarios y sus ventanas propiedad también se convierten en ventanas no superiores.

Una ventana no superior puede ser propietaria de una ventana superior, pero no se puede producir la inversa. Cualquier ventana (por ejemplo, un cuadro de diálogo) propiedad de una ventana superior se convierte en una ventana superior, para asegurarse de que todas las ventanas propiedad permanezcan por encima de su propietario.

Si una aplicación no está en primer plano y debe estar en primer plano, debe llamar a la función SetForegroundWindow .

Para usar SetWindowPos para llevar una ventana a la parte superior, el proceso que posee la ventana debe tener el permiso SetForegroundWindow .

Ejemplos

Para obtener un ejemplo, vea Inicializar un cuadro de diálogo.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-window-l1-1-0 (introducido en Windows 8)

Consulte también

Conceptual

MoveWindow

Referencia

SetActiveWindow

SetForegroundWindow

Windows