Condividi tramite


Funzione DeferWindowPos (winuser.h)

Aggiornamenti la struttura di più finestre specificata per la finestra specificata. La funzione restituisce quindi un handle alla struttura aggiornata. La funzione EndDeferWindowPos usa le informazioni in questa struttura per modificare la posizione e le dimensioni di un numero di finestre simultaneamente. La funzione BeginDeferWindowPos crea la struttura.

Sintassi

HDWP DeferWindowPos(
  [in]           HDWP hWinPosInfo,
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  x,
  [in]           int  y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

Parametri

[in] hWinPosInfo

Tipo: HDWP

Handle a una struttura a più finestre che contiene informazioni sulle dimensioni e sulla posizione per una o più finestre. Questa struttura viene restituita da BeginDeferWindowPos o dalla chiamata più recente a DeferWindowPos.

[in] hWnd

Tipo: HWND

Handle alla finestra per cui le informazioni di aggiornamento vengono archiviate nella struttura. Tutte le finestre di una finestra multipla: la struttura di posizione deve avere lo stesso elemento padre.

[in, optional] hWndInsertAfter

Tipo: HWND

Handle alla finestra che precede la finestra posizionata nell'ordine Z. Questo parametro deve essere un handle di finestra o uno dei valori seguenti. Questo parametro viene ignorato se il flag di SWP_NOZORDER è impostato nel parametro uFlags .

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.

[in] x

Tipo: int

Coordinata x dell'angolo superiore sinistro della finestra.

[in] y

Tipo: int

Coordinata y dell'angolo superiore sinistro della finestra.

[in] cx

Tipo: int

La nuova larghezza della finestra, in pixel.

[in] cy

Tipo: int

La nuova altezza della finestra, in pixel.

[in] uFlags

Tipo: UINT

Combinazione dei valori seguenti che influiscono sulle dimensioni e sulla posizione della finestra.

Valore Significato
SWP_DRAWFRAME
0x0020
Disegna un frame (definito nella descrizione della classe della finestra) intorno alla finestra.
SWP_FRAMECHANGED
0x0020
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: HDWP

Il valore restituito identifica la struttura di più finestre aggiornata: posizione. L'handle restituito da questa funzione può essere diverso dall'handle passato alla funzione. Il nuovo handle restituito da questa funzione deve essere passato durante la chiamata successiva alla funzione DeferWindowPos o EndDeferWindowPos .

Se le risorse di sistema insufficienti sono disponibili per la funzione, il valore restituito è NULL. Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

Se una chiamata a DeferWindowPos ha esito negativo, l'applicazione deve abbandonare l'operazione di posizionamento della finestra e non chiamare EndDeferWindowPos.

Se non viene specificato SWP_NOZORDER, il sistema inserisce la finestra identificata dal parametro hWnd nella posizione che segue la finestra identificata dal parametro hWndInsertAfter . Se hWndInsertAfter è NULL o HWND_TOP, il sistema inserisce la finestra hWnd nella parte superiore dell'ordine Z. Se hWndInsertAfter è impostato su HWND_BOTTOM, il sistema inserisce la finestra hWnd nella parte inferiore dell'ordine Z.

Tutte le coordinate per le finestre figlio sono relative all'angolo superiore sinistro dell'area client della finestra padre.

Una finestra può essere impostata in alto impostando hWndInsertAfter sul flag HWND_TOPMOST e assicurando che il flag di SWP_NOZORDER non sia impostato o impostando la posizione della finestra nell'ordine Z in modo che si tratti di una finestra superiore esistente. Quando una finestra non superiore viene resa più in alto, anche le finestre di proprietà vengono rese più in alto. I 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 contemporaneamente e la relativa posizione nell'ordine Z modificato), il valore specificato in hWndInsertAfter viene usato solo nelle circostanze seguenti:

  • Né il flag HWND_TOPMOST néHWND_NOTOPMOST è specificato in hWndInsertAfter.
  • La finestra identificata da hWnd non è la finestra attiva.
Un'applicazione non può attivare una finestra inattiva senza portarla anche all'inizio dell'ordine Z. Un'applicazione può modificare la posizione di una finestra attivata nell'ordine Z senza restrizioni oppure può attivare una finestra e quindi spostarla nella parte superiore o non superiore delle finestre.

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

Una finestra non superiore può essere proprietaria di una finestra superiore, ma non viceversa. Qualsiasi finestra ,ad esempio una finestra di dialogo, di proprietà di una finestra in alto, viene creata una finestra in alto per garantire che tutte le finestre di proprietà rimangano al di sopra del proprietario.

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-4 (introdotto in Windows 10 versione 10.0.14393)

Vedi anche

BeginDeferWindowPos

Informazioni concettuali

EndDeferWindowPos

Riferimento

Showwindow

Windows