Condividi tramite


Funzione SetWindowPos (winuser.h)

Modifica le dimensioni, la posizione e l'ordine Z di una finestra figlio, popup o di livello superiore. Queste finestre vengono ordinate in base al loro aspetto sullo schermo. La finestra superiore riceve il rango più alto e è la prima finestra nell'ordine Z.

Sintassi

BOOL SetWindowPos(
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  X,
  [in]           int  Y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

Parametri

[in] hWnd

Tipo: HWND

Handle nella finestra.

[in, optional] hWndInsertAfter

Tipo: HWND

Handle della finestra per precedere la finestra posizionata nell'ordine Z. Questo parametro deve essere un handle di finestra o uno dei valori seguenti.

Valore Significato
HWND_BOTTOM
(HWND)1
Places la finestra nella parte inferiore dell'ordine Z. Se il parametro hWnd identifica una finestra superiore, la finestra perde lo stato superiore e viene posizionata nella parte inferiore di tutte le altre finestre.
HWND_NOTOPMOST
(HWND)-2
Places la finestra sopra tutte le finestre più in alto (ovvero dietro tutte le finestre più in alto). Questo flag non ha alcun effetto se la finestra è già una finestra non superiore.
HWND_TOP
(HWND)0
Places la finestra nella parte superiore dell'ordine Z.
HWND_TOPMOST
(HWND)-1
Places la finestra sopra tutte le finestre non superiore. La finestra mantiene la sua posizione superiore anche quando viene disattivata.
 

Per altre informazioni sul modo in cui viene usato questo parametro, vedere la sezione Osservazioni seguenti.

[in] X

Tipo: int

Nuova posizione del lato sinistro della finestra, nelle coordinate client.

[in] Y

Tipo: int

Nuova posizione della parte superiore della finestra, nelle coordinate client.

[in] cx

Tipo: int

Nuova larghezza della finestra, in pixel.

[in] cy

Tipo: int

Nuova altezza della finestra, in pixel.

[in] uFlags

Tipo: UINT

Contrassegni di ridimensionamento e posizionamento della finestra. Questo parametro può essere una combinazione dei valori seguenti.

Valore Significato
SWP_ASYNCWINDOWPOS
0x4000
Se il thread chiamante e il thread proprietario della finestra vengono collegati a code di input diverse, il sistema inserisce la richiesta al thread proprietario della finestra. Ciò impedisce al thread chiamante di bloccare l'esecuzione mentre altri thread elaborano la richiesta.
SWP_DEFERERASE
0x2000
Impedisce la generazione del messaggio di WM_SYNCPAINT .
SWP_DRAWFRAME
0x0020
Disegna un frame (definito nella descrizione della classe della finestra) intorno alla finestra.
SWP_FRAMECHANGED
0x0020
Applica nuovi stili di frame impostati usando la funzione SetWindowLong . Invia un messaggio WM_NCCALCSIZE alla finestra, anche se le dimensioni della finestra non vengono modificate. Se questo flag non è specificato, WM_NCCALCSIZE viene inviato solo quando viene modificata la dimensione della finestra.
SWP_HIDEWINDOW
0x0080
Nasconde la finestra.
SWP_NOACTIVATE
0x0010
Non attiva la finestra. Se questo flag non è impostato, la finestra viene attivata e spostata nella parte superiore del gruppo superiore o non superiore (a seconda dell'impostazione del parametro hWndInsertAfter ).
SWP_NOCOPYBITS
0x0100
Elimina l'intero contenuto dell'area client. Se questo flag non è specificato, il contenuto valido dell'area client viene salvato e copiato nell'area client dopo che la finestra viene ridimensionata o riposizionata.
SWP_NOMOVE
0x0002
Mantiene la posizione corrente (ignora i parametri X e Y ).
SWP_NOOWNERZORDER
0x0200
Non modifica la posizione della finestra del proprietario nell'ordine Z.
SWP_NOREDRAW
0x0008
Non ridisegna le modifiche. Se questo flag è impostato, non si verifica alcuna riinting di qualsiasi tipo. Ciò si applica all'area client, all'area nonclient (inclusa la barra del titolo e le barre di scorrimento) e a qualsiasi parte della finestra padre individuata come risultato dello spostamento della finestra. Quando questo flag è impostato, l'applicazione deve invalidare o ridisegnare in modo esplicito tutte le parti della finestra e della finestra padre che devono essere ridisegnate.
SWP_NOREPOSITION
0x0200
Uguale al flag di SWP_NOOWNERZORDER .
SWP_NOSENDCHANGING
0x0400
Impedisce alla finestra di ricevere il messaggio di WM_WINDOWPOSCHANGING .
SWP_NOSIZE
0x0001
Mantiene le dimensioni correnti (ignora i parametri cx e cy ).
SWP_NOZORDER
0x0004
Mantiene l'ordine Z corrente (ignora il parametro hWndInsertAfter ).
SWP_SHOWWINDOW
0x0040
Visualizza la finestra.

Valore restituito

Tipo: BOOL

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Come parte dell'architettura di Vista, tutti i servizi sono stati spostati dal desktop interattivo nella sessione 0. le operazioni di gestione finestre e hwnd sono valide solo all'interno di una sessione e tentativi di sessione incrociata di modificare l'hwnd avrà esito negativo. Per altre informazioni, vedere The Windows Vista Developer Story: Application Compatibility Cookbook.For more information, see The Windows Vista Developer Story: Application Compatibility Cookbook.For more information, see The Windows Vista Developer Story: Application Compatibility Cookbook.

Se sono stati modificati determinati dati della finestra usando SetWindowLong, è necessario chiamare SetWindowPos per rendere effettive le modifiche. Usare la combinazione seguente per uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.

Una finestra può essere creata in alto impostando il parametro hWndInsertAfter su HWND_TOPMOST e assicurandosi che il flag di SWP_NOZORDER non sia impostato o impostando la posizione di una finestra nell'ordine Z in modo che sia superiore a qualsiasi finestra esistente. Quando una finestra non superiore viene resa più in alto, le sue finestre di proprietà vengono anche rese più in alto. I suoi proprietari, tuttavia, non vengono modificati.

Se non viene specificato né il SWP_NOACTIVATEil flag SWP_NOZORDER , ovvero quando l'applicazione richiede che una finestra venga attivata simultaneamente e la relativa posizione nell'ordine Z modificata, il valore specificato in hWndInsertAfter viene usato solo nelle circostanze seguenti.

  • Né il flag HWND_TOPMOSTHWND_NOTOPMOST viene specificato in hWndInsertAfter.
  • La finestra identificata da hWnd non è la finestra attiva.
Un'applicazione non può attivare una finestra inattiva senza portarla all'inizio dell'ordine Z. Le applicazioni possono modificare la posizione di una finestra attivata nell'ordine Z senza restrizioni oppure attivare una finestra e quindi spostarla nella parte superiore della finestra superiore o non superiore.

Se una finestra superiore viene riposizionata nella parte inferiore (HWND_BOTTOM) dell'ordine Z o dopo qualsiasi finestra non superiore, non è più superiore. Quando una finestra più in alto è resa non superiore, i suoi proprietari e le sue finestre di proprietà sono anche fatte finestre non superiore.

Una finestra non superiore può avere una finestra superiore, ma il contrario non può verificarsi. Qualsiasi finestra (ad esempio, una finestra di dialogo) di proprietà di una finestra superiore viene creata una finestra più in alto, per assicurarsi che tutte le finestre di proprietà rimangano sopra il proprietario.

Se un'applicazione non è in primo piano e deve essere in primo piano, deve chiamare la funzione SetForegroundWindow .

Per usare SetWindowPos per portare una finestra nella parte superiore, il processo proprietario della finestra deve avere l'autorizzazione SetForegroundWindow .

Esempio

Per un esempio, vedere Inizializzazione di una finestra di dialogo.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-window-l1-1-0 (introdotto in Windows 8)

Vedi anche

Informazioni concettuali

Movewindow

Riferimento

SetActiveWindow

SetForegroundWindow

Windows