> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XGameStreamingShowTouchControlsWithStateUpdateOnClient

> XGameStreamingShowTouchControlsWithStateUpdateOnClient

# XGameStreamingShowTouchControlsWithStateUpdateOnClient

Demande à un appareil client de streaming spécifié de mettre à jour l'état de ses commandes tactiles, puis d'afficher une disposition tactile spécifiée. Toutes les mises à jour d'état ont lieu avant l'affichage de la nouvelle disposition tactile.

## Syntaxe

```cpp theme={null}
HRESULT XGameStreamingShowTouchControlsWithStateUpdateOnClient(  
         XGameStreamingClientId client,  
         const char* layout,  
         size_t operationCount,  
         const XGameStreamingTouchControlsStateOperation* operations  
)  
```

### Paramètres

*client*   \_In\_\
Type : XGameStreamingClientId

Appareil client de streaming sur lequel mettre à jour l'état et afficher les commandes tactiles.

*layout*   \_In\_opt\_z\_\
Type : char\*

Nom de la disposition des commandes tactiles à afficher, ou `nullptr` pour afficher la disposition standard.

*operationCount*   \_In\_\
Type : size\_t

Taille du tableau d'opérations transmis.

*operations*   \_In\_reads\_opt\_(operationCount)\
Type : [XGameStreamingTouchControlsStateOperation\*](/fr/reference/system/xgamestreaming/structs/xgamestreamingtouchcontrolsstateoperation)

Tableau de toutes les mises à jour de variables d'état demandées.

### Valeur de retour

Type : HRESULT

Retourne **S\_OK** en cas de réussite ; sinon, retourne un code d'erreur.

#### Erreurs potentielles

| Code d'erreur | Valeur d'erreur | Cause de l'erreur |
| - | - | - |
| E\_GAMESTREAMING\_NOT\_INITIALIZED | 0x89245400 | Le runtime XGameStreaming n'a pas été initialisé. Appelez XGameStreamingInitialize avant d'appeler d'autres API. |
| E\_GAMESTREAMING\_CLIENT\_NOT\_CONNECTED | 0x89245401 | Le client spécifié n'est pas connecté. |
| E\_INVALIDARG | 0x80070057 | Une opération spécifiée ne comporte pas de données correspondant au type de données spécifié dans le [XGameStreamingTouchControlsStateValueKind](/fr/reference/system/xgamestreaming/enums/xgamestreamingtouchcontrolsstatevaluekind) des opérations |

## Remarques

Cette API doit être utilisée lorsque le jeu souhaite afficher une disposition tactile particulière qui nécessite également des mises à jour d'état susceptibles d'affecter son rendu. Utilisez cette API si vous souhaitez à la fois mettre à jour l'état des variables référencées dans une nouvelle disposition tactile ET basculer vers cette disposition tactile sur un appareil client de streaming spécifié. Cette API garantit que toutes les mises à jour d'état sont effectuées avant l'affichage de la nouvelle disposition.

Si vous souhaitez affecter tous les appareils clients de streaming, utilisez [XGameStreamingShowTouchControlsWithStateUpdate](/fr/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrolswithstateupdate).

Si le jeu doit uniquement changer de disposition, il doit plutôt utiliser [XGameStreamingShowTouchControlLayoutOnClient](/fr/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrollayoutonclient).

Si les mises à jour d'état peuvent affecter la disposition actuelle ou d'autres dispositions et doivent avoir lieu indépendamment d'un changement de disposition tactile spécifique, le jeu doit plutôt utiliser [XGameStreamingUpdateTouchControlsStateOnClient](/fr/reference/system/xgamestreaming/functions/xgamestreamingupdatetouchcontrolsstateonclient).

## Exemples

```c++ theme={null}
// In this example, the player has just selected a specific building in an strategy game 
// and the game wants to populate the two building specific action slots with the appropriate imagery
// before selecting the layouts
//
// Assumes passing in game structure that refers to the selected building and a game function to get the image
// assets for a particular building capability and the client to be updated


void GameStreamingClientManager::UpdateBuildingStateAndControls(const BuildingProperties& building, XGameStreamingClientId clientId)
{
    
    

    std::vector<XGameStreamingTouchControlsStateOperation> updateOperations;
    
    // update the image for the first two building slots   
    XGameStreamingTouchControlsStateOperation buildingCapability1Image;
    buildingCapability1Image.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    buildingCapability1Image.path = "/buildingCapability1Image";
    buildingCapability1Image.valueKind = XGameStreamingTouchControlsStateValueKind::String;
    buildingCapability1Image.stringValue =  GetImageName(building.capability[0].id);        
    updateOperations.push_back(buildingCapability1Image);

    XGameStreamingTouchControlsStateOperation buildingCapability2Image;
    buildingCapability2Image.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    buildingCapability2Image.path = "/buildingCapability2Image";
    buildingCapability2Image.valueKind = XGameStreamingTouchControlsStateValueKind::String;
    buildingCapability2Image.stringValue =  GetImageName(building.capability[1].id);        
    updateOperations.push_back(buildingCapability2Image);
    
    // enable the second slot if the building is of level 3 or above, otherwise the third slot will be disabled
    XGameStreamingTouchControlsStateOperation buildingCapability2Enabled;
    buildingCapability2Enabled.operationKind = XGameStreamingTouchControlsStateOperationKind::Replace;
    buildingCapability2Enabled.path = "/buildingCapability2IsEnabled";
    buildingCapability2Enabled.valueKind = XGameStreamingTouchControlsStateValueKind::Boolean;
    buildingCapability2Enabled.booleanValue =  building.level >= 3;
    updateOperations.push_back(buildingCapability2Enabled);
  
    // Switch to the building layout with the state update being sent as well
    XGameStreamingShowTouchControlsWithStateUpdateOnClient(clientId, "building", updateOperations.size(), updateOperations.data());
}

```

## Configuration requise

**En-tête :** XGameStreaming.h

**Bibliothèque :** xgameruntime.lib
**Plateformes prises en charge** : Windows, consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[XGameStreaming](/fr/reference/system/xgamestreaming/xgamestreaming_members#TouchAdaptation)\
[XGameStreamingTouchControlsStateOperationKind](/fr/reference/system/xgamestreaming/enums/xgamestreamingtouchcontrolsstateoperationkind)\
[XGameStreamingTouchControlsStateOperation](/fr/reference/system/xgamestreaming/structs/xgamestreamingtouchcontrolsstateoperation)\
[XGameStreamingTouchControlsStateValue](/fr/reference/system/xgamestreaming/structs/xgamestreamingtouchcontrolsstatevalue)\
[XGameStreamingShowTouchControlsWithStateUpdate](/fr/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrolswithstateupdate)\
[XGameStreamingUpdateTouchControlsState](/fr/reference/system/xgamestreaming/functions/xgamestreamingupdatetouchcontrolsstate)\
[XGameStreamingUpdateTouchControlsStateOnClient](/fr/reference/system/xgamestreaming/functions/xgamestreamingupdatetouchcontrolsstateonclient)


## Related topics

- [XGameStreamingShowTouchControlsWithStateUpdateOnClient](/ko/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrolswithstateupdateonclient.md)
- [XGameStreamingShowTouchControlsWithStateUpdate](/reference/system/xgamestreaming/functions/xgamestreamingshowtouchcontrolswithstateupdate.md)
