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.
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 |
---|---|
|
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. |
|
Impide la generación del mensaje de WM_SYNCPAINT . |
|
Dibuja un marco (definido en la descripción de clase de la ventana) alrededor de la ventana. |
|
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. |
|
Oculta la ventana. |
|
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 ). |
|
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. |
|
Conserva la posición actual (omite los parámetros X e Y ). |
|
No cambia la posición de la ventana del propietario en el orden Z. |
|
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. |
|
Igual que la marca SWP_NOOWNERZORDER . |
|
Impide que la ventana reciba el mensaje WM_WINDOWPOSCHANGING . |
|
Conserva el tamaño actual (omite los parámetros cx y cy ). |
|
Conserva el orden Z actual (omite el parámetro hWndInsertAfter ). |
|
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.
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
Referencia