IDXGIFactory::MakeWindowAssociation-Methode (dxgi.h)
Ermöglicht DXGI das Überwachen der Nachrichtenwarteschlange einer Anwendung für die Alt-Enter-Tastensequenz (wodurch die Anwendung von Fenstern zum Vollbild wechselt oder umgekehrt).
Syntax
HRESULT MakeWindowAssociation(
HWND WindowHandle,
UINT Flags
);
Parameter
WindowHandle
Typ: HWND
Das Handle des zu überwachenden Fensters. Dieser Parameter kann NULL sein. aber nur, wenn Flags ebenfalls 0 ist.
Flags
Typ: UINT
Mindestens einer der folgenden Werte:
- DXGI_MWA_NO_WINDOW_CHANGES: Verhindern, dass DXGI eine Anwendungsmeldungswarteschlange überwacht; Dies führt dazu, dass DXGI nicht auf Modusänderungen reagieren kann.
- DXGI_MWA_NO_ALT_ENTER: Verhindern, dass DXGI auf eine Alt-Eingabesequenz reagiert.
- DXGI_MWA_NO_PRINT_SCREEN: Verhindern, dass DXGI auf eine Drucktaste reagiert.
Rückgabewert
Typ: HRESULT
DXGI_ERROR_INVALID_CALL , wenn WindowHandle ungültig oder E_OUTOFMEMORY ist.
Hinweise
Wenn die Anwendung in den Vollbildmodus wechselt, wählt DXGI eine Vollbildauflösung aus, um die kleinste unterstützte Auflösung zu sein, die größer oder die gleiche Größe wie die aktuelle Backpuffergröße ist.
Anwendungen können einige Änderungen vornehmen, um den Übergang von Fenstern zum Vollbild effizienter zu gestalten. In einer WM_SIZE Meldung sollte die Anwendung beispielsweise alle ausstehenden Swapchain-Back-Puffer freigeben, IDXGISwapChain::ResizeBuffers aufrufen und dann die Backpuffer aus den Swapchains erneut abrufen. Dies gibt den Swapchains die Möglichkeit, die Größe der Backpuffer zu ändern und/oder neu zu erstellen, um den Vollbild-Flipping-Vorgang zu ermöglichen. Wenn die Anwendung diese Sequenz nicht ausführt, führt DXGI weiterhin den Vollbild-/Fensterübergang durch, wird jedoch möglicherweise gezwungen, einen Stretch-Vorgang zu verwenden (da die Backpuffer möglicherweise nicht die richtige Größe aufweisen), was möglicherweise weniger effizient ist. Auch wenn kein Stretch erforderlich ist, ist die Darstellung möglicherweise nicht optimal, da die Backpuffer möglicherweise nicht direkt mit dem Frontpuffer austauschbar sind. Daher wird immer ein Aufruf von ResizeBuffers auf WM_SIZE empfohlen, da WM_SIZE immer während eines Vollbildübergangs gesendet wird.
Während des Fensters kann die Anwendung bei Bedarf die Größe des Clientbereichs ihres Fensters auf Größen beschränken, auf die sie komfortabel rendern kann. Eine vollständig flexible Anwendung würde diese Einschränkung nicht zulassen, aber UI-Elemente oder andere Entwurfsüberlegungen können diese Flexibilität natürlich unhaltbar machen. Wenn die Anwendung den Clientbereich ihres Fensters weiterhin auf die bereiche beschränkt, die den unterstützten Vollbildauflösungen entsprechen, kann die Anwendung WM_SIZING felden und dann idXGIOutput::FindClosestMatchingMode überprüfen. Wenn ein übereinstimmenden Modus gefunden wird, lassen Sie die Größe zu. (Der IDXGIOutput kann aus IDXGISwapChain::GetContainingOutput abgerufen werden. Wenn keine nachfolgenden Änderungen an der Desktoptopologie vorhanden sind, wird dies dieselbe Ausgabe sein, die ausgewählt wird, wenn die Alt-Eingabe aktiviert wird und der Vollbildmodus für diese Swapchain gestartet wird.)
Anwendungen, die Modusänderungen oder ALT+ENTER selbst verarbeiten möchten, sollten MakeWindowAssociation mit dem DXGI_MWA_NO_WINDOW_CHANGES-Flag nach der Erstellung der Swap chain aufrufen. Das WindowHandle-Argument gibt an, wenn es nicht NULL ist, dass die Anwendungsmeldungswarteschlangen nicht von der DXGI-Runtime für alle Swapchains eines bestimmten Ziel-HWND verarbeitet werden. Das Aufrufen von MakeWindowAssociation mit dem DXGI_MWA_NO_WINDOW_CHANGES-Flag nach der Swapchainerstellung stellt sicher, dass DXGI die Verarbeitung von Fenstermodusänderungen oder ALT+EINGABETASTE in der Anwendung nicht beeinträchtigt.
Sie müssen die MakeWindowAssociation-Methode für das Factoryobjekt aufrufen, das den Ziel-HWND-Swapketten zugeordnet ist. Sie können dies garantieren, indem Sie die IDXGIObject::GetParent-Methode für die Swapchain aufrufen, um die Factory zu suchen. Hier sehen Sie ein Codebeispiel dafür.
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);
}
Hinweise für Windows Store-Apps
Wenn eine Windows Store-App MakeWindowAssociation aufruft, schlägt dies mit DXGI_ERROR_NOT_CURRENTLY_AVAILABLE fehl.Eine Microsoft Win32-Anwendung kann MakeWindowAssociation verwenden, um Vollbildübergänge über die Tastenkombination ALT+EINGABETASTE und das Druckbildschirmverhalten für den Vollbildmodus zu steuern. Da DXGI für Windows Store-Apps keine Vollbildübergänge ausführen kann, hat eine Windows Store-App keine Möglichkeit, Vollbildübergänge zu steuern.
Anforderungen
Zielplattform | Windows |
Kopfzeile | dxgi.h |
Bibliothek | DXGI.lib |