Funzione ReportWindowContentInertia

[Alcune informazioni riguardano il prodotto non rilasciato che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non fornisce alcuna garanzia, espressa o implicita, in relazione alle informazioni fornite qui.]

Segnala al sistema se il contenuto della finestra specificata è in uno stato di inerzia.

Sintassi

WINUSERAPI
BOOL
WINAPI
ReportWindowContentInertia(
    HWND hWnd,
    BOOL bStartInertia);

Parametri

hWnd

Handle per la finestra di cui viene segnalato lo stato di inerzia del contenuto.

bStartInertia

TRUE per segnalare che il contenuto della finestra è entrato in inerzia; FALSE per segnalare che l'inerzia è stata arrestata.

Valore restituito

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

Se la funzione ha esito negativo, il valore restituito è zero.

Osservazioni:

Il contenuto della finestra è "in inerzia" se continua a spostarsi dopo essere stato modificato dall'input dopo la conclusione del flusso di input. Segnala questa inerzia in modo che l'input del touchpad possa interrompere correttamente questo movimento quando appropriato.

Se una finestra si trova in inerzia, il sistema modifica la modalità di risposta all'input del touchpad:

  • Poco dopo l'arrivo del nuovo input touchpad, il sistema invierà WM_STOPINERTIA alla finestra. L'applicazione deve reagire a questo messaggio interrompendo il movimento del contenuto, ma non necessariamente passando dallo stato "inerzia" se dispone di ottimizzazioni per movimenti ripetuti che modificano lo stesso contenuto (ad esempio, l'hit testing input che favorisce il contenuto nell'inerzia o memorizza la velocità del contenuto esistente).
  • Se il sistema determina che l'input del touchpad sta tentando di interrompere il movimento del contenuto, il sistema invierà WM_ENDINERTIA alla finestra. L'applicazione deve reagire a questo messaggio interrompendo il movimento del contenuto e chiudendo lo stato di inerzia.

Scenari di esempio:

  • L'utente esegue un tocco rapido: WM_ENDINERTIA viene inviato. L'input del mouse non viene prodotto: il tocco ha generato solo l'inerzia finale.
  • L'utente tiene un dito sul touchpad e lo solleva: WM_STOPINERTIA seguito da WM_ENDINERTIA.
  • L'utente esegue un rapido movimento a due dita: nessun messaggio di inerzia. I movimenti ripetuti devono essere gestiti senza interruzioni inutili del contenuto.
  • L'utente tiene un dito (o due) sul touchpad e quindi esegue un gesto a due dita: WM_STOPINERTIA. Abitazione prima di eseguire il gesto, era possibile che l'utente tentasse di interrompere il contenuto.

Anche se nella maggior parte dei casi, la ricezione di WM_STOPINERTIA è seguita da WM_ENDINERTIA o da un altro movimento del touchpad, non è garantito. Se le applicazioni implementano uno stato di contenuto speciale al momento della ricezione di WM_STOPINERTIA, tale stato deve essere chiuso dopo un certo periodo di tempo. Analogamente, WM_ENDINERTIA potrebbe non essere necessariamente preceduto da WM_STOPINERTIA se il flusso di input del touchpad è breve.

La creazione di report è importante per gestire correttamente l'input del touchpad. Se il contenuto di una finestra è in inerzia e non viene segnalato al sistema, toccando il touchpad si verifica il normale comportamento di un clic (mouse a sinistra e a sinistra). L'applicazione può finire per trattare l'input del mouse come interagire con il contenuto in movimento, possibilmente causando un'azione che l'utente non intendeva.

Per l'inerzia causata dall'input tramite tocco o penna, il sistema non deve gestire in modo speciale l'input rispetto all'inerzia, perché la finestra il cui contenuto è in inerzia è in genere lo stesso che riceve l'input successivo. Per l'input del touchpad, invece, il sistema prende una decisione prima che l'applicazione riceva qualsiasi input. La segnalazione dell'inerzia causata dall'input tramite tocco o penna è comunque consigliata in modo che se l'utente tenta di arrestare l'inerzia con il touchpad, si verifica il comportamento previsto.

Il sistema tiene traccia solo di una singola finestra nell'inerzia. Se l'inerzia è già attiva quando questa API viene chiamata per segnalare l'inerzia a partire da una finestra diversa, le informazioni di inerzia precedenti verranno sostituite.

Se si avvia la segnalazione dell'inerzia, la finestra specificata deve essere di proprietà del thread corrente e il thread deve avere recuperato l'input negli ultimi due secondi. Successivamente, deve essere segnalato come arrestato quando il movimento del contenuto della finestra si arresta (a meno che la finestra non abbia ricevuto WM_STOPINERTIA o WM_ENDINERTIA, nel qual caso non è necessario segnalare l'arresto dell'inerzia). La segnalazione dell'arresto dell'inerzia verrà ignorata automaticamente se il sistema non tiene più traccia dell'inerzia, se la finestra rilevata non corrisponde alla finestra specificata o se la finestra rilevata è di proprietà di un processo diverso.

Requisiti

Requisito Valore
Client minimo supportato Windows 11 [solo app desktop]
Server minimo supportato Nessuna supportata
Intestazione Winuser.h (includere Windows.h)
Libreria User32.lib
DLL User32.dll (ordinale 2695)

Vedere anche