Funzione SetWindowLongPtrA (winuser.h)
Modifica un attributo della finestra specificata. La funzione imposta anche un valore in corrispondenza dell'offset specificato nella memoria della finestra aggiuntiva.
Sintassi
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
Parametri
[in] hWnd
Tipo: HWND
Handle alla finestra e, indirettamente, alla classe a cui appartiene la finestra. La funzione SetWindowLongPtr ha esito negativo se il processo proprietario della finestra specificata dal parametro hWnd è a un privilegio di processo superiore nella gerarchia UIPI rispetto al processo in cui risiede il thread chiamante.
Windows XP/2000: La funzione SetWindowLongPtr non riesce se la finestra specificata dal parametro hWnd non appartiene allo stesso processo del thread chiamante.
[in] nIndex
Tipo: int
Offset in base zero al valore da impostare. I valori validi si trovano nell'intervallo zero tramite il numero di byte di memoria finestra aggiuntiva, meno le dimensioni di un LONG_PTR. Per impostare qualsiasi altro valore, specificare uno dei valori seguenti.
Valore | Significato |
---|---|
|
Imposta un nuovo stile della finestra estesa. |
|
Imposta un nuovo handle di istanza dell'applicazione. |
|
Imposta un nuovo identificatore della finestra figlio. La finestra non può essere una finestra di primo livello. |
|
Imposta un nuovo stile di finestra. |
|
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. |
|
Imposta un nuovo indirizzo per la routine della finestra. |
I valori seguenti sono disponibili anche quando il parametro hWnd identifica una finestra di dialogo.
[in] dwNewLong
Tipo: LONG_PTR
Valore sostitutivo.
Valore restituito
Tipo: LONG_PTR
Se la funzione ha esito positivo, il valore restituito è il valore precedente dell'offset specificato.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni dettagliate sull'errore, chiamare GetLastError.
Se il valore precedente è zero e la funzione ha esito positivo, il valore restituito è zero, ma la funzione non cancella le ultime informazioni sull'errore. Per determinare l'esito positivo o negativo, cancellare le ultime informazioni sull'errore chiamando SetLastError con 0, quindi chiamare SetWindowLongPtr. L'errore della funzione verrà 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 SetWindowLongPtr non avranno effetto finché non si chiama la funzione SetWindowPos .
Se si usa SetWindowLongPtr con l'indice GWLP_WNDPROC per sostituire la procedura della finestra, la procedura della finestra deve essere conforme alle linee guida specificate nella descrizione della funzione di callback WindowProc .
Se si usa SetWindowLongPtr con l'indice DWLP_MSGRESULT per impostare il valore restituito per un messaggio elaborato da una finestra di dialogo, la procedura della finestra di dialogo deve restituire TRUE direttamente in seguito. In caso contrario, se si chiama una funzione che comporta la ricezione di un messaggio di finestra, il messaggio della finestra annidata potrebbe sovrascrivere il valore restituito impostato usando DWLP_MSGRESULT.
La chiamata a SetWindowLongPtr con l'indice GWLP_WNDPROC crea una sottoclasse della classe di finestra usata per creare la finestra. Un'applicazione può sottoclassere una classe di sistema, ma non deve sottoclasse una classe finestra creata da un altro processo. La funzione SetWindowLongPtr crea la sottoclasse della finestra modificando la routine della finestra associata a una determinata classe di finestra, causando al sistema di chiamare la nuova routine della finestra anziché quella precedente. Un'applicazione deve passare qualsiasi messaggio non elaborato dalla nuova procedura della finestra alla procedura della finestra precedente chiamando CallWindowProc. Ciò consente all'applicazione di creare una catena di procedure di finestra.
Riservare memoria finestra aggiuntiva specificando un valore diverso da zero nel membro cbWndExtra della struttura WNDCLASSEX usato con la funzione RegisterClassEx .
Non chiamare SetWindowLongPtr con l'indice GWLP_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_PARENTDC, non impostare gli stili di finestra estesi WS_EX_COMPOSITED o WS_EX_LAYERED.
Chiamando SetWindowLongPtr per impostare lo stile su una barra di avanzamento verrà reimpostata la posizione.
Nota
L'intestazione winuser.h definisce SetWindowLongPtr come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.
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 (introdotta in Windows 8) |
Vedi anche
Informazioni concettuali
Riferimento