Condividi tramite


Funzione SetWindowLongW (winuser.h)

Modifica un attributo della finestra specificata. La funzione imposta anche il valore a 32 bit (long) in corrispondenza dell'offset specificato nella memoria aggiuntiva della finestra.

Nota Questa funzione è stata sostituita dalla funzione SetWindowLongPtr . Per scrivere codice compatibile con entrambe le versioni a 32 bit e a 64 bit di Windows, usare la funzione SetWindowLongPtr .
 

Sintassi

LONG SetWindowLongW(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

Parametri

[in] hWnd

Tipo: HWND

Handle per la finestra e, indirettamente, la classe a cui appartiene la finestra.

[in] nIndex

Tipo: int

Offset in base zero al valore da impostare. I valori validi sono compresi nell'intervallo zero fino al numero di byte di memoria aggiuntiva della finestra, meno le dimensioni di un numero intero. Per impostare qualsiasi altro valore, specificare uno dei valori seguenti.

Valore Significato
GWL_EXSTYLE
-20
Imposta un nuovo stile di finestra estesa.
GWL_HINSTANCE
-6
Imposta un nuovo handle di istanza dell'applicazione.
GWL_ID
-12
Imposta un nuovo identificatore della finestra figlio. La finestra non può essere una finestra di primo livello.
GWL_STYLE
-16
Imposta un nuovo stile di finestra.
GWL_USERDATA
-21
Imposta i dati utente associati alla finestra. Questi dati sono destinati all'uso da parte dell'applicazione che ha creato la finestra. Il valore è inizialmente zero.
GWL_WNDPROC
-4
Imposta un nuovo indirizzo per la routine della finestra.

Non è possibile modificare questo attributo se la finestra non appartiene allo stesso processo del thread chiamante.

 

I valori seguenti sono disponibili anche quando il parametro hWnd identifica una finestra di dialogo.

Valore Significato
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Imposta il nuovo indirizzo della routine della finestra di dialogo.
DWL_MSGRESULT
0
Imposta il valore restituito di un messaggio elaborato nella routine della finestra di dialogo.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Imposta nuove informazioni aggiuntive private per l'applicazione, ad esempio handle o puntatori.

[in] dwNewLong

Tipo: LONG

Valore sostitutivo.

Valore restituito

Tipo: LONG

Se la funzione ha esito positivo, il valore restituito è il valore precedente dell'intero a 32 bit specificato.

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

Se il valore precedente dell'intero a 32 bit specificato è zero e la funzione ha esito positivo, il valore restituito è zero, ma la funzione non cancella le ultime informazioni sull'errore. Ciò rende difficile determinare l'esito positivo o negativo. Per risolvere questo problema, è necessario cancellare le ultime informazioni sull'errore chiamando SetLastError con 0 prima di chiamare SetWindowLong. L'errore della funzione verrà quindi indicato da un valore restituito pari a zero e da un risultato GetLastError diverso da zero.

Commenti

Alcuni dati della finestra vengono memorizzati nella cache, pertanto le modifiche apportate tramite SetWindowLong non verranno applicate fino a quando non si chiama la funzione SetWindowPos . In particolare, se si modifica uno degli stili di frame, è necessario chiamare SetWindowPos con il flag di SWP_FRAMECHANGED affinché la cache venga aggiornata correttamente.

Se si usa SetWindowLong con l'indice GWL_WNDPROC per sostituire la routine finestra, la routine della finestra deve essere conforme alle linee guida specificate nella descrizione della funzione di callback WindowProc .

Se si usa SetWindowLong con l'indice DWL_MSGRESULT per impostare il valore restituito per un messaggio elaborato da una procedura di dialogo, è necessario restituire TRUE direttamente in seguito. In caso contrario, se si chiama una funzione che comporta la ricezione di un messaggio della finestra di dialogo, il messaggio della finestra nidificata potrebbe sovrascrivere il valore restituito impostato usando DWL_MSGRESULT.

La chiamata a SetWindowLong con l'indice GWL_WNDPROC crea una sottoclasse della classe finestra usata per creare la finestra. Un'applicazione può sottoclasse una classe di sistema, ma non deve sottoclasse una classe finestra creata da un altro processo. La funzione SetWindowLong crea la sottoclasse della finestra modificando la routine della finestra associata a una determinata classe finestra, causando la chiamata della nuova routine finestra da parte del sistema anziché quella precedente. Un'applicazione deve passare tutti i messaggi non elaborati dalla nuova procedura della finestra alla routine della finestra precedente chiamando CallWindowProc. In questo modo l'applicazione può creare una catena di procedure finestra.

Riservare memoria aggiuntiva della finestra specificando un valore diverso da zero nel membro cbWndExtra della struttura WNDCLASSEX utilizzata con la funzione RegisterClassEx .

Non è necessario chiamare SetWindowLong con l'indice GWL_HWNDPARENT per modificare l'elemento padre di una finestra figlio. Usare invece la funzione SetParent .

Se la finestra ha uno stile di classe di CS_CLASSDC o CS_OWNDC, non impostare gli stili della finestra estesa WS_EX_COMPOSITED o WS_EX_LAYERED.

Chiamando SetWindowLong per impostare lo stile su una barra di avanzamento, la posizione verrà reimpostata.

Esempio

Per un esempio, vedere Creazione di sottoclassi di una finestra.

Nota

L'intestazione winuser.h definisce SetWindowLong come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzioni.

Requisiti

   
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-windowclass-l1-1-0 (introdotto in Windows 8)

Vedi anche

ChiamaWindowProc

Informazioni concettuali

GetWindowLong

Riferimento

RegisterClassEx

Setparent

SetWindowLongPtr

WNDCLASSEX

Classi finestra

WindowProc