CWnd::SetWindowPos
Cambia el tamaño, la posición, y el orden Z del elemento secundario, de elemento emergente, y ventanas de nivel superior.
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,
int y,
int cx,
int cy,
UINT nFlags
);
Parámetros
pWndInsertAfter
Identifica el objeto de CWnd que precederá (es mayor que) este objeto de CWnd en el orden Z.Este parámetro puede ser un puntero a CWnd o a Puntero en uno de los siguientes valores:wndBottom coloca la ventana en la parte inferior del orden Z.si este CWnd es una ventana siempre visible, la ventana pierde su estado superior; el sistema coloca la ventana en la parte inferior de todas las demás ventanas.
wndTop coloca la ventana en la parte superior del orden Z.
wndTopMost coloca las ventanas no superior de la ventana principalmente.la ventana mantiene su primera posición incluso cuando se desactiva.
wndNoTopMost Repositions la en la parte superior de todas las ventanas no superiores (es decir, detrás de todas las ventanas de nivel superior).Este marcador no tiene ningún efecto si la ventana ya es una ventana no-superior.
Para las reglas sobre cómo usar este parámetro, vea la sección “comentarios” de este tema.
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 el nuevo ancho de la ventana.cy
especifica el nuevo alto de la ventana.nFlags
Especifica el tamaño y las opciones de posición.Este parámetro puede ser una combinación de los siguientes indicadores:SWP_DRAWFRAME dibuja un cuadro (definido cuando la ventana se creó) alrededor de la ventana.
SWP_FRAMECHANGED Sends un mensaje de WM_NCCALCSIZE a la ventana, aunque el tamaño de la ventana no se está cambiando.Si este marcador no se especifica, se envía WM_NCCALCSIZE cuando se cambia el tamaño de la ventana.
SWP_HIDEWINDOW oculta la ventana.
SWP_NOACTIVATE No no activar la ventana.Si este marcador no se establece, la ventana se genera y se mueve a la parte superior del grupo superior o no-superior (según el valor del parámetro de pWndInsertAfter ).
SWP_NOCOPYBITS descarta el contenido completo del área cliente.Si este marcador no se especifica, el contenido válidos del área de cliente se guardan y se copian en el área cliente después de que se haya ordenado o se coloque de nuevo la ventana.
SWP_NOMOVE conserva la posición actual (omite el x y los parámetros de la y ).
Cambio deSWP_NOOWNERZORDER No no la posición de la ventana propietaria en el orden Z.
Cambios no actualizars deSWP_NOREDRAW No.Si se establece este marcador, ninguna repintura de clase aparece.Esto se aplica al área cliente, al área no cliente (título incluidas y las barras de desplazamiento), y a cualquier parte de la ventana primaria destapada como resultado de la ventana que movió.Cuando se establece esta marca, la aplicación debe reemplazar explícitamente o actualizar cualquier parte de la ventana y la ventana primaria que deben ser rediseñadas.
SWP_NOREPOSITION Same que SWP_NOOWNERZORDER.
SWP_NOSENDCHANGING evita que la ventana reciba el mensaje de WM_WINDOWPOSCHANGING .
SWP_NOSIZE conserva el tamaño actual (omite los parámetros de cx y de cy ).
SWP_NOZORDER conserva el orden de la actual (omite pWndInsertAfter).
SWP_SHOWWINDOW muestra la ventana.
Valor devuelto
Distinto de cero si la función es correcta; de lo contrario, 0.
Comentarios
Windows se ordena en pantalla según su orden Z; la ventana en la parte superior del orden Z aparece encima del resto de las ventanas del orden.
Todas las coordenadas para ventanas secundarias son coordenadas de cliente (en relación con la esquina superior izquierda del área de cliente de la ventana primaria).
Una ventana se puede mover a la parte superior del orden Z cualquier por establecerpWndInsertAfter el parámetro en el &wndTopMost y el asegurarse queSWP_NOZORDER el mensaje no establece o estableciendo el orden Z de una ventana de modo que está sobre cualquier ventana siempre visible existente.Cuando una ventana no-superior se crea superior, sus ventanas que pertenecen también se crean máximas.no cambian a sus propietarios.
Una ventana siempre visible ya no superior si cambia de posición inferior (&wndBottom) del orden Z o después de cualquier ventana no-superior.Cuando una ventana siempre visible se crea no-superior, todas sus propietarios y sus ventanas que pertenecen también se crean las ventanas no-superiores.
Si no se especifica SWP_NOACTIVATE ni SWP_NOZORDER (es decir, cuando las solicitudes de la aplicación que una ventana se activa y se coloca simultáneamente en el orden Z especificado), el valor especificado en pWndInsertAfter sólo se utiliza en las circunstancias siguientes:
ni el &wndTopMost ni el &wndNoTopMost se especifica enpWndInsertAfter el parámetro.
esta ventana no es la ventana activa.
Una aplicación no puede provocar una ventana inactiva sin también puede ponerla encima de la parte superior del orden Z.las aplicaciones pueden cambiar el orden Z de una ventana activada sin restricciones.
Una ventana no-superior puede ser una ventana siempre visible, pero no viceversa.Cualquier ventana (por ejemplo, un cuadro de diálogo) poseída por una ventana siempre visible en sí se crea una ventana siempre visible para asegurarse de que todas poseyó las ventanas permanece sobre su propietario.
Con las versiones de Windows 3,1 y versiones posteriores, las ventanas se pueden mover a la parte superior del orden Z y se bloquean allí estableciendo sus estilos de WS_EX_TOPMOST .Esta ventana siempre visible mantiene su primera posición incluso cuando está desactivada.Por ejemplo, seleccionando el WinHelp Always en comando superior crea la ventana ayuda superior y, a continuación permanece visible cuando vuelve a la aplicación.
Para crear una ventana siempre visible,SetWindowPos llame a conpWndInsertAfter el parámetro igual al &wndTopMost, o establecer el estilo de WS_EX_TOPMOST cuando crea la ventana.
Si el orden Z contiene algunas ventanas con el estilo de WS_EX_TOPMOST, una ventana movida con el valor de &wndTopMost se coloca en la parte superior de todas las ventanas no-superiores, pero bajo cualquier ventana siempre visible.Cuando una aplicación inicia una ventana inactiva sin el bit de WS_EX_TOPMOST , la ventana es principalmente ventanas no-superiores movidas pero bajo cualquier ventana siempre visible.
SiSetWindowPos se llama cuandopWndInsertAfter el parámetro es &wndBottom yCWnd es una ventana siempre visible, la ventana pierde su estado superior (se borra WS_EX_TOPMOST), y el sistema coloca la ventana en la parte inferior del orden Z.
Ejemplo
void CMyApp::OnHideApplication()
{
//m_pMainWnd is the main application window, a member of CMyApp
ASSERT_VALID(m_pMainWnd);
// hide the application's windows before closing all the documents
m_pMainWnd->ShowWindow(SW_HIDE);
m_pMainWnd->ShowOwnedPopups(FALSE);
// put the window at the bottom of z-order, so it isn't activated
m_pMainWnd->SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
}
Requisitos
encabezado: afxwin.h