Função SetWindowPos (winuser.h)

Altera o tamanho, a posição e a ordem Z de uma janela filho, pop-up ou de nível superior. Essas janelas são ordenadas de acordo com sua aparência na tela. A janela mais alta recebe a classificação mais alta e é a primeira janela na ordem Z.

Sintaxe

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

Digite: HWND

Um identificador para a janela.

[in, optional] hWndInsertAfter

Digite: HWND

Um identificador para a janela para preceder a janela posicionada na ordem Z. Esse parâmetro deve ser um identificador de janela ou um dos valores a seguir.

Valor Significado
HWND_BOTTOM
(HWND)1
Places a janela na parte inferior da ordem Z. Se o parâmetro hWnd identificar uma janela superior, a janela perderá sua status superior e será colocada na parte inferior de todas as outras janelas.
HWND_NOTOPMOST
(HWND)-2
Places a janela acima de todas as janelas não superiores (ou seja, atrás de todas as janelas superiores). Esse sinalizador não terá efeito se a janela já for uma janela não superior.
HWND_TOP
(HWND)0
Places a janela na parte superior da ordem Z.
HWND_TOPMOST
(HWND)-1
Coloca a janela acima de todas as janelas não superiores. A janela mantém sua posição superior mesmo quando está desativada.
 

Para obter mais informações sobre como esse parâmetro é usado, consulte a seção Comentários a seguir.

[in] X

Tipo: int

A nova posição do lado esquerdo da janela, nas coordenadas do cliente.

[in] Y

Tipo: int

A nova posição da parte superior da janela, nas coordenadas do cliente.

[in] cx

Tipo: int

A nova largura da janela, em pixels.

[in] cy

Tipo: int

A nova altura da janela, em pixels.

[in] uFlags

Tipo: UINT

O dimensionamento da janela e os sinalizadores de posicionamento. Esse parâmetro pode ser uma combinação dos seguintes valores.

Valor Significado
SWP_ASYNCWINDOWPOS
0x4000
Se o thread de chamada e o thread que possui a janela estiverem anexados a filas de entrada diferentes, o sistema postará a solicitação no thread que possui a janela. Isso impede que o thread de chamada bloqueie sua execução enquanto outros threads processam a solicitação.
SWP_DEFERERASE
0x2000
Impede a geração da mensagem WM_SYNCPAINT .
SWP_DRAWFRAME
0x0020
Desenha um quadro (definido na descrição da classe da janela) ao redor da janela.
SWP_FRAMECHANGED
0x0020
Aplica novos estilos de quadro definidos usando a função SetWindowLong . Envia uma mensagem WM_NCCALCSIZE para a janela, mesmo que o tamanho da janela não esteja sendo alterado. Se esse sinalizador não for especificado, WM_NCCALCSIZE será enviado somente quando o tamanho da janela estiver sendo alterado.
SWP_HIDEWINDOW
0x0080
Oculta a janela.
SWP_NOACTIVATE
0x0010
Não ativa a janela. Se esse sinalizador não estiver definido, a janela será ativada e movida para a parte superior do grupo mais superior ou não superior (dependendo da configuração do parâmetro hWndInsertAfter ).
SWP_NOCOPYBITS
0x0100
Descarta todo o conteúdo da área do cliente. Se esse sinalizador não for especificado, o conteúdo válido da área do cliente será salvo e copiado de volta para a área do cliente depois que a janela for dimensionada ou reposicionada.
SWP_NOMOVE
0x0002
Mantém a posição atual (ignora os parâmetros X e Y ).
SWP_NOOWNERZORDER
0x0200
Não altera a posição da janela do proprietário na ordem Z.
SWP_NOREDRAW
0x0008
Não redesenha as alterações. Se esse sinalizador estiver definido, nenhum repositório de nenhum tipo ocorrerá. Isso se aplica à área do cliente, à área não cliente (incluindo a barra de título e as barras de rolagem) e a qualquer parte da janela pai descoberta como resultado da movimentação da janela. Quando esse sinalizador é definido, o aplicativo deve invalidar ou redesenhar explicitamente todas as partes da janela e da janela pai que precisem ser redesenhadas.
SWP_NOREPOSITION
0x0200
O mesmo que o sinalizador SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Impede que a janela receba a mensagem de WM_WINDOWPOSCHANGING .
SWP_NOSIZE
0x0001
Retém o tamanho atual (ignora os parâmetros cx e cy ).
SWP_NOZORDER
0x0004
Retém a ordem Z atual (ignora o parâmetro hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
Exibe a janela.

Retornar valor

Tipo: BOOL

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Como parte da nova arquitetura do Vista, todos os serviços foram movidos da área de trabalho interativa para a Sessão 0. As operações do hwnd e do gerenciador de janelas só são eficazes dentro de uma sessão e as tentativas entre sessões de manipular o hwnd falharão. Para obter mais informações, consulte The Windows Vista Developer Story: Application Compatibility Cookbook.

Se você tiver alterado determinados dados de janela usando SetWindowLong, deverá chamar SetWindowPos para que as alterações entrem em vigor. Use a seguinte combinação para uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Uma janela pode ser feita em uma janela superior definindo o parâmetro hWndInsertAfter como HWND_TOPMOST e garantindo que o sinalizador de SWP_NOZORDER não esteja definido ou definindo a posição de uma janela na ordem Z para que ele esteja acima de qualquer janela superior existente. Quando uma janela não superior se torna superior, suas janelas de propriedade também se tornam superiores. Seus proprietários, no entanto, não são alterados.

Se nem o sinalizador SWP_NOACTIVATE nem SWP_NOZORDER for especificado (ou seja, quando o aplicativo solicitar que uma janela seja ativada simultaneamente e sua posição na ordem Z for alterada), o valor especificado em hWndInsertAfter será usado apenas nas circunstâncias a seguir.

  • Nem o sinalizador HWND_TOPMOST nem HWND_NOTOPMOST é especificado em hWndInsertAfter.
  • A janela identificada por hWnd não é a janela ativa.
Um aplicativo não pode ativar uma janela inativa sem também trazê-la para a parte superior da ordem Z. Os aplicativos podem alterar a posição de uma janela ativada na ordem Z sem restrições ou ativar uma janela e movê-la para a parte superior das janelas mais altas ou não superiores.

Se uma janela superior for reposicionada para a parte inferior (HWND_BOTTOM) da ordem Z ou após qualquer janela não superior, ela não será mais superior. Quando uma janela superior é feita não superior, seus proprietários e suas janelas de propriedade também são feitas janelas não superiores.

Uma janela não superior pode ter uma janela superior, mas o inverso não pode ocorrer. Qualquer janela (por exemplo, uma caixa de diálogo) de propriedade de uma janela superior é feita uma janela superior, para garantir que todas as janelas de propriedade permaneçam acima de seu proprietário.

Se um aplicativo não estiver em primeiro plano e estiver em primeiro plano, ele deverá chamar a função SetForegroundWindow .

Para usar SetWindowPos para trazer uma janela para a parte superior, o processo que possui a janela deve ter a permissão SetForegroundWindow .

Exemplos

Para obter um exemplo, consulte Inicializando uma caixa de diálogo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll
Conjunto de APIs ext-ms-win-ntuser-window-l1-1-0 (introduzido em Windows 8)

Confira também

Conceitual

Movewindow

Referência

SetActiveWindow

Setforegroundwindow

Windows