winuser.h


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.