SetWindowPos
La función SetWindowPos canbia el tamaño, posición y el orden Z de una ventana hija, una ventana pop-up o una ventana de top-level. Las ventanas hijas, pop-up y top-level se ordenan de acuerdo con su aparición en la pantalla. La ventana superior recibe el rango más alto y es la primera ventana según el orden Z.
Sintaxis
BOOL SetWindowPos( HWND hWnd, // manipulador de ventana HWND hWndInsertAfter, // manipulador para el orden de colocación int X, // posición horizontal int Y, // posición vertical int cx, // anchura int cy, // altura UINT uFlags // banderas de posicionamiento de ventana );
Parámetros:
hWnd: identifica la ventana.
hWndInsertAfter: identifica a la ventana que precede a esta en el orden Z. Este parámetro debe ser un manipulador de ventana o uno de los siguientes valores:
Valor | Significado |
---|---|
HWND_BOTTOM | Coloca la ventana al final del orden Z. Si el parámetro hWnd identifica a una ventana topmost, esta pierde su estado topmost y se coloca detrás del resto de las ventanas. |
HWND_NOTOPMOST | Coloca la ventana encima de todas las ventanas no topmost (es decir, detrás de todas las ventanas topmost). Esta bandera no tiene efecto si la ventana ya es no topmost. |
HWND_TOP | Coloca la ventana al principio del orden Z. |
HWND_TOPMOST | Coloca la ventana encima de todas las ventanas no topmost. La ventana mantiene si posición topmost aunque se desactive. |
Para más información sobre el uso de este parámetro, ver la sección de observaciones.
X: especifica la nueva posición del lado izquierdo de la ventana.
Y: especifica la nueva posición de la parte superior de la ventana.
cx: especifica la nueva anchura de la ventana, en pixels.
cy: especifica la nueva altura de la ventana, en pixels.
uFlags: especifica las banderas de tamaño y colocación de la ventana. Este parámetro puede ser una combinación de los siguientes valores:
Valor | Significado |
---|---|
SWP_DRAWFRAME | Traza un marco (definido en la descripción de la clase de ventana) alrededor de la ventana. |
SWP_FRAMECHANGED | Envía un mensaje WM_NCCALCSIZE a la ventana, aunque el tamaño de la ventana no haya sido cambiado. Si no se especifica esta bandera, WM_NCCALCSIZE se envía sólo cuando el tamaño de la ventana ha cambiado. |
SWP_HIDEWINDOW | Oculta la ventana. |
SWP_NOACTIVATE | No activa la ventana. Si no se activa esta bandera, la ventana es activada y movida por encima de cualquier ventana topmost o grupo no topmost (dependiendo del valor del parámetro hWndInsertAfter). |
SWP_NOCOPYBITS | Descarta el contenido completo del área de cliente. Si no se especifica esta bandera, el contenido válido del área de cliente se guarda y se copia de nuevo en el área de cliente después de que la ventana sea redimiensionada o movida. |
SWP_NOMOVE | Mantiene la posición actual (ignora los parámetros X e Y). |
SWP_NOOWNERZORDER | No modifica la posición de la ventana en el orden Z. |
SWP_NOREDRAW | No redibuja los cambios. Si se activa esta bandera, no se producirá ningún tipo de redibujado. Esto se aplica tanto al área de cliente, a la de no cliente (incluyendo la barra de título y las barras de desplazamiento), y cualquier parte de la ventana padre descubierta como resultado del movimiento de la ventana. Cuando esta bandera se activa, la aplicación debe invalidar explícitamente o redibujar cualquier parte de la ventana y de la ventana padre que necesite redibujarse. |
SWP_NOREPOSITION | Igual que la bandera SWP_NOOWNERZORDER. |
SWP_NOSENDCHANGING | Evita que la ventana reciva el mensaje WM_WINDOWPOSCHANGING. |
SWP_NOSIZE | Mantiene el tamaño actual (ignora los parámetros cx y cy). |
SWP_NOZORDER | Mantiene el orden Z actual (ignora el parámetro hWndInsertAfter). |
SWP_SHOWWINDOW | Muestra la ventana. |
Valor de retorno
Si la función tiene éxito, el valor de retorno es distinto de cero.
Si la función falla, el valor de retorno es cero. Para obtener información adicional sobre el error, llamar a la función GetLastError.
Observaciones
Si las banderas SWP_SHOWWINDOW o SWP_HIDEWINDOW están activas, la ventana no puede ser movida o redimensionada.
Todas las coordenadas de las ventanas hija son coordenadas de cliente (relativas a la esquina superior izquierda del área de cliente de la ventana padre).
Una ventana puede ser una ventana topmost ya sea especificando el valor HWND_TOPMOST para el parámetro hWndInsertAfter y asegurándose de que la bandera SWP_NOZORDER no esté activa, o asignando la posición de orden Z de la ventana de modo que esté por encima de cualquier otra ventana topmost existente. Cuando una ventana no topmost se convierte en topmost, sus ventanas también se hacen topmost. Sus ventanas dueña, sin embargo, no cambian.
Si no se especifican las banderas SWP_NOACTIVATE ni SWP_NOZORDER (es decir, cuando la aplicación requiere que una ventana sea simultáneamente activada y su posición en el orden Z cambiada), el valor especificado en el parámetro hWndInsertAfter se usa sólo en las siguientes circunstancias:
- Que no se especifiquen las banderas HWND_TOPMOST ni HWND_NOTOPMOST en hWndInsertAfter.
- La ventana identificada por hWnd no es la ventana activa.
Una ventana no puede activar una ventana inactiva sin llevarla también a la cima del orden Z. Las aplicaciones pueden cambiar la posición en el orden Z de una ventana activa sin restricciones, o puede activar una ventana y entonces moverla a la cima de las ventanas topmost o no topmost.
Si una ventana topmost se reposiciona al final (HWND_BOTTOM) del orden Z o después de cualquier ventana no topmost, ya no será topmost. Cuando una ventana topmost se convierte en no topmost, las ventanas de su propiedad y sus ventanas padre se convierten también en ventanas no topmost.
Una ventana no topmost puede poseer una ventana topmost, pero lo contrario no puede ocurrir. Cualquier ventana (por ejemplo, un cuadro de diálogo) propiedad de una ventana topmost es en si misma una ventana topmost, para asegurar que todas las ventanas de su propiedad se mantienen por encima de su dueño.
Si una aplicación no está en primer plano, y debería estarlo, debe llamar a la función SetForegroundWindow.