IdXGIFactory::MakeWindowAssociation, méthode (dxgi.h)

Permet à DXGI de surveiller la file d’attente de messages d’une application pour la séquence de touches alt-entrée (ce qui entraîne le basculement de l’application en mode plein écran ou vice versa).

Syntaxe

HRESULT MakeWindowAssociation(
  HWND WindowHandle,
  UINT Flags
);

Paramètres

WindowHandle

Type : HWND

Handle de la fenêtre à surveiller. Ce paramètre peut être NULL ; mais seulement si Indicateurs est également 0.

Flags

Type : UINT

Une ou plusieurs des valeurs suivantes.

  • DXGI_MWA_NO_WINDOW_CHANGES : empêcher DXGI de surveiller une file d’attente de messages d’applications ; DXGI ne peut donc pas répondre aux modifications de mode.
  • DXGI_MWA_NO_ALT_ENTER : empêche DXGI de répondre à une séquence d’entrée de remplacement.
  • DXGI_MWA_NO_PRINT_SCREEN : empêcher DXGI de répondre à une touche d’écran d’impression.

Valeur retournée

Type : HRESULT

DXGI_ERROR_INVALID_CALL si WindowHandle n’est pas valide ou E_OUTOFMEMORY.

Notes

Note Si vous appelez cette API dans un processus session 0, elle retourne DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
La combinaison de WindowHandle et d’Indicateurs informe DXGI d’arrêter la surveillance des messages de fenêtre pour la fenêtre précédemment associée.

Si l’application passe en mode plein écran, DXGI choisit une résolution plein écran pour être la plus petite résolution prise en charge qui est plus grande ou de la même taille que la taille actuelle de la mémoire tampon arrière.

Les applications peuvent apporter certaines modifications pour rendre la transition du fenêtré au mode plein écran plus efficace. Par exemple, sur un message WM_SIZE, l’application doit libérer toutes les mémoires tampons de chaîne d’échange en attente, appeler IDXGISwapChain::ResizeBuffers, puis récupérer à nouveau les mémoires tampons d’arrière-mémoire à partir de la ou des chaînes d’échange. Cela permet aux chaînes d’échange de redimensionner les mémoires tampons d’arrière-mémoire et/ou de les recréer pour activer l’opération de basculement en plein écran. Si l’application n’effectue pas cette séquence, DXGI effectue toujours la transition plein écran/fenêtré, mais peut être obligé d’utiliser une opération d’étirement (car les mémoires tampons d’arrière-plan peuvent ne pas avoir la taille correcte), ce qui peut être moins efficace. Même si un étirement n’est pas nécessaire, la présentation peut ne pas être optimale, car les mémoires tampons d’arrière-plan peuvent ne pas être directement interchangeables avec la mémoire tampon avant. Par conséquent, un appel à ResizeBuffers sur WM_SIZE est toujours recommandé, car WM_SIZE est toujours envoyé pendant une transition plein écran.

Lorsqu’elle est fenêtré, l’application peut, si elle le souhaite, limiter la taille de la zone cliente de sa fenêtre aux tailles auxquelles elle est confortable de rendu. Une application entièrement flexible n’apporterait aucune restriction de ce type, mais les éléments d’interface utilisateur ou d’autres considérations de conception peuvent, bien sûr, rendre cette flexibilité intenable. Si l’application choisit de restreindre la zone cliente de sa fenêtre uniquement à celles qui correspondent aux résolutions en plein écran prises en charge, l’application peut WM_SIZING, puis case activée sur IDXGIOutput::FindClosestMatchingMode. Si un mode de correspondance est trouvé, autorisez le redimensionnement. (L’IDXGIOutput peut être récupéré à partir de IDXGISwapChain::GetContainingOutput. En l’absence de modifications ultérieures apportées à la topologie du bureau, il s’agit de la même sortie que celle choisie lorsque l’option alt-entrée est champée et que le mode plein écran est démarré pour cette chaîne d’échange.)

Les applications qui souhaitent gérer les modifications de mode ou Alt+Entrée elles-mêmes doivent appeler MakeWindowAssociation avec l’indicateur DXGI_MWA_NO_WINDOW_CHANGES après la création de la chaîne d’échange. L’argument WindowHandle , s’il n’est pas NULL, spécifie que les files d’attente de messages d’application ne seront pas gérées par le runtime DXGI pour toutes les chaînes d’échange d’un HWND cible particulier. L’appel de MakeWindowAssociation avec l’indicateur DXGI_MWA_NO_WINDOW_CHANGES après la création de la chaîne d’échange garantit que DXGI n’interfère pas avec la gestion par l’application des modifications du mode fenêtre ou alt+entrée.

Vous devez appeler la méthode MakeWindowAssociation sur l’objet de fabrique associé aux chaînes de permutation HWND cibles. Vous pouvez le garantir en appelant la méthode IDXGIObject::GetParent sur la ou les chaînes d’échange pour localiser la fabrique. Voici un exemple de code de cette opération.

void MakeWindowAssociationWithLocatedFactory(
    winrt::com_ptr<IDXGISwapChain> const& swapChain,
    HWND hWnd,
    UINT flags)
{
    winrt::com_ptr<IDXGIFactory1> factory;
    factory.capture(swapChain, &IDXGISwapChain::GetParent);
    factory->MakeWindowAssociation(hWnd, flags);
}

Remarques pour les applications du Windows Store

Si une application du Windows Store appelle MakeWindowAssociation, elle échoue avec DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.

Une application Microsoft Win32 peut utiliser MakeWindowAssociation pour contrôler les transitions en plein écran via la combinaison de touches Alt+Entrée et imprimer le comportement de l’écran en plein écran. Pour les applications du Windows Store, étant donné que DXGI ne peut pas effectuer de transitions en plein écran, une application du Windows Store n’a aucun moyen de contrôler les transitions en plein écran.

Spécifications

   
Plateforme cible Windows
En-tête dxgi.h
Bibliothèque DXGI.lib

Voir aussi

Interfaces DXGI

IDXGIFactory