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.
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 |
---|---|
|
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. |
|
Impedisce la generazione del messaggio di WM_SYNCPAINT . |
|
Disegna un frame (definito nella descrizione della classe della finestra) intorno alla finestra. |
|
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. |
|
Nasconde la finestra. |
|
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 ). |
|
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. |
|
Mantiene la posizione corrente (ignora i parametri X e Y ). |
|
Non modifica la posizione della finestra del proprietario nell'ordine Z. |
|
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. |
|
Uguale al flag di SWP_NOOWNERZORDER . |
|
Impedisce alla finestra di ricevere il messaggio di WM_WINDOWPOSCHANGING . |
|
Mantiene le dimensioni correnti (ignora i parametri cx e cy ). |
|
Mantiene l'ordine Z corrente (ignora il parametro hWndInsertAfter ). |
|
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_NOACTIVATE né il 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_TOPMOST né HWND_NOTOPMOST viene specificato in hWndInsertAfter.
- La finestra identificata da hWnd non è la finestra attiva.
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
Riferimento