APIs für die Windows 10X-Dual-Screen-EntwicklungAPIs for Windows 10X dual-screen development

Wichtig

Wir haben vor Kurzem einige Änderungen an der Priorisierung für Windows 10 und Windows 10X angekündigt.We recently announced some changes in the prioritization for Windows 10 and Windows 10X. Zu diesen Ankündigungen gehören Änderungen an den Formfaktor-Prioritäten für Windows 10X.These announcements include changes to the Windows 10X form factor priorities. Hier mehr erfahren.Read more here.

Wichtig

In diesem Artikel werden die Funktionen und Anleitungen erläutert, die sich in der öffentlichen Vorschau befinden und möglicherweise erheblich geändert werden, bevor Sie allgemein verfügbar sind.This article describes functionality and guidance that is in public preview and may be substantially modified before it's generally available. Microsoft übernimmt bezüglich der hier bereitgestellten Informationen keine Gewährleistungen, weder ausdrücklich noch konkludent.Microsoft makes no warranties, express or implied, with respect to the information provided here. Die hier beschriebenen Funktionen und APIs stehen im Emulator-Image und in der SDK-Version zur Verfügung, die auf der Seite "Windows-Entwicklungs Tools " angezeigt werden, aber an anderer Stelle nicht verfügbar sind.The functionality and APIs described here are available in the emulator image and SDK version listed on the Get Windows dev tools page, but may not be available elsewhere.

Verwenden der Aufteilungs-APIsUse the Spanning APIs

Wenn Sie Ihre APP aktualisieren, um die Vorteile von Dual-Screen-Geräten zu nutzen, stehen Ihnen einige Optionen zur Verfügung.When you update your app to take advantage of dual-screen devices, you have a few options available. Die einfachste Option ist die Verwendung des neuen twopaneview -Steuer Elements.The most straightforward option is to use the new TwoPaneView control. Twopaneview bietet viele Funktionen, mit denen Sie Ihr Layout basierend darauf anpassen können, ob sich die APP auf einem Bildschirm oder auf zwei Bildschirmen befindet.TwoPaneView provides many capabilities to help you adjust your layout based on whether your app is on one screen or two screens. Sie kann verwendet werden, um viele der in Einführung zu Dual-Screen-Gerätenbeschriebenen Muster zu implementieren.It can be used to implement many of the patterns described in Introduction to dual-screen devices. Weitere Informationen finden Sie unter Two-Pane View.For more info, see Two-pane view.

Wenn das twopaneview-Steuerelement jedoch nicht Ihren Anforderungen entspricht – Wenn Ihre APP etwas vollständig Benutzer definiert ist oder Sie eine Win32-APP haben – können Sie dieselben APIs verwenden, auf denen die twopaneview basiert, um Ihre eigenen Layouts zu erstellen, die die beiden Bildschirme effektiv verwenden.However, if the TwoPaneView control doesn't suit your needs—if your app is doing something completely custom or if you have a Win32 app—you can use the same APIs that the TwoPaneView is built on to craft your own layouts that use the two screens effectively.

Hier werden drei Optionen erläutert:Here, we discuss three options for doing this:

  1. APIs für apps, die appwindowverwenden.APIs for apps that use AppWindow.
  2. APIs für apps, die applicationviewverwenden.APIs for apps that use ApplicationView.
  3. APIs für Win32-apps.APIs for Win32 apps.

Welche Option Sie verwenden, hängt davon ab, welche Art von APP Sie verwenden und welche windowingumgebung Sie verwendet.Which option you use depends on what kind of app you have and what windowing environment it uses. Weitere Informationen zu den Fenster Umgebungen appwindow und applicationview finden Sie unter Anzeigen mehrerer Ansichten für eine APP.For more info about the AppWindow and ApplicationView windowing environments, see Show multiple views for an app.

Verwenden von AppWindowUse AppWindow

Tipp

Weitere Informationen zu appwindow finden Sie unter Anzeigen mehrerer Ansichten mit appwindow.For more info about AppWindow, see Show multiple views with AppWindow.

Wenn Sie appwindow in der App verwenden, ist der allgemeine Ablauf bei der Reaktion auf eine Änderung des Aufteilungs Status:When you use AppWindow in your app, the general flow for reacting to a change in spanning state is to:

  1. Empfangen eines appwindow. Changed -Ereignisses.Receive an AppWindow.Changed event.
  2. Überprüfen Sie den neuen Spanning Zustand.Check for the new Spanning state.
  3. Passen Sie das Layout entsprechend an.Adjust your layout accordingly.

Um den umteilungs Status anzugeben, wurde Spanning der appwindowpresentationkind -Enumeration ein neuer Wert hinzugefügt.To indicate the spanning state, a new value, Spanning, has been added the AppWindowPresentationKind enum. (Diese Enumeration unterstützt bereits Werte für Default , FullScreen und und CompactOverlay ist daher Spanning nur ein neuer Status, der für Ihre APP zur Überprüfung verfügbar ist.)(This enum already supports values for Default,FullScreen, and CompactOverlay, so Spanning is just a new state that is available for your app to check.)

Rufen Sie zum Abrufen von appwindowpresentationkind die GetConfiguration -Methode in appwindowpresenterIhres appwindow auf.To get the AppWindowPresentationKind, call the GetConfiguration method on your AppWindow's AppWindowPresenter.

Wenn der Status (angegeben durch die appwindowpresentationconfiguration. Kind -Eigenschaft) ist Spanning , können Sie das neue- SpanningPresentationConfiguration Objekt in appwindowpresenter verwenden, um Details zum übergreifenden Zustand zu verstehen.If the state (indicated by the AppWindowPresentationConfiguration.Kind property) is Spanning, you can then use the new SpanningPresentationConfiguration object in the AppWindowPresenter to understand details about the spanned state.

Das spanningpresentationconfiguration-Objekt enthält eine- GetSpanningRects Methode, die eine Liste der Rechtecke im appwindow-Client Bereichs Koordinaten Bereich zurückgibt, die die verschiedenen "Regionen" darstellt, auf die sich die APP erstreckt.The SpanningPresentationConfiguration object contains a GetSpanningRects method, which returns a list of rects within the AppWindow client area coordinate space that represents the different "regions" that the app is spanned across.

Im folgenden finden Sie ein Beispiel für die von dieser Methode zurückgegebenen Rechtecke.Here's an example of the rects returned by this method.

umspannen von Rechtecke

Das spanningpresentationconfiguration-Objekt enthält auch einen WindowMode Enumeration-Wert, der zusätzliche Fenster Zustandsinformationen bereitstellt.The SpanningPresentationConfiguration object also contains a WindowMode enum value, which provides additional window state information. Insbesondere hat Sie folgende Werte:In particular, it has values for:

  • Default– Das Fenster wird in einem normalen Fenster Layout überspannt.Default – The window is spanned in a normal window layout.
  • FullScreen– Das Fenster wird in einem voll Bild Layout überspannt.FullScreen – The window is spanned in a FullScreen layout.

Dieser Beispielcode zeigt, wie Sie Ihre APP-Inhalte erkennen und erneut übertragen können, wenn Sie sich auf zwei Bildschirme überspannen.This sample code shows how you can detect and re-flow your app content when it is spanned across two screens.

private void AppWindow_Changed(AppWindow sender, AppWindowChangedEventArgs args)

{
    if(args.DidWindowPresentationChange)
    {
        if (sender.Presenter.GetConfiguration().Kind == AppWindowPresentationKind.Spanning)
        {
            SpanningLayout(sender);
        }
        else
        {
            SingleLayout();
        }
    }
}

private void SpanningLayout(AppWindow window)
{
    SpanningPresentationConfiguration spanningPresentation =
      (SpanningPresentationConfiguration)window.Presenter.GetConfiguration();
    if(spanningPresentation.GetSpanningRects().Count == 2)
    {
        if(spanningPresentation.GetSpanningRect().ElementAt(0).X !=
           spanningPresentation.GetSpanningRect().ElementAt(1).X)
        {
            // X offsets mismatch, we're in left-right layout.
            // TODO: Add math for setting up the regions on our page.
        }
        else if (spanningPresentation.GetSpanningRect().ElementAt(0).Y !=
                 spanningPresentation.GetSpanningRect().ElementAt(1).Y)
        {
            // Y offsets mismatch, we're in top-bottom layout.
            // TODO: Add math for setting up the regions on our page.
        }
        else
        {
            // Either the regions are on top of each other - which cannot happen!
            // Or the regions are offset both at X and Y. We don't handle that,
            // so layout as a single pane.
            SingleLayout();
        }
    }
    else
    {
        SingleLayout();
    }
}

private void SingleLayout()
{
    // Use default layout.
}

Verwenden von ApplicationViewUse ApplicationView

Tipp

Weitere Informationen zu applicationview finden Sie unter Anzeigen mehrerer Sichten mit applicationview.For more info about ApplicationView, see Show multiple views with ApplicationView.

Wenn Sie applicationviewverwenden, ist der allgemeine Ablauf bei der Reaktion auf eine Änderung des Aufteilungs Status:When you use ApplicationView, the general flow for reacting to a change in spanning state is to:

  1. Empfängt ein Window. SizeChanged -Ereignis.Receive a Window.SizeChanged event.
  2. Überprüfen Sie den neuen Spanning Zustand.Check for the new Spanning state.
  3. Passen Sie das Layout entsprechend an.Adjust your layout accordingly.

Um den umteilungs Status anzugeben, wurde Spanning der applicationviewmode -Enumeration ein neuer Wert,, hinzugefügt.To indicate the spanning state, a new value, Spanning, has been added the ApplicationViewMode enum. (Diese Enumeration unterstützt bereits Werte für Default und und CompactOverlay Spanning ist daher nur ein neuer Status, der für Ihre APP zur Überprüfung verfügbar ist.)(This enum already supports values for Default and CompactOverlay, so Spanning is just a new state that is available for your app to check.)

Wenn der (von der applicationview. ViewMode -Eigenschaft festgestellte) Status ist Spanning , können Sie die neue-Methode aufrufen, ApplicationView.GetSpanningRects um eine Liste von Rechtecke im applicationview-Client Bereichs Koordinaten Bereich abzurufen, der die verschiedenen "Regionen" darstellt, über die sich die APP erstreckt.If the state (indicated by the ApplicationView.ViewMode property) is Spanning, you can then call the new ApplicationView.GetSpanningRects method to retrieve a list of rects within the ApplicationView client area coordinate space that represents the different "regions" that the app is spanned across.

Im folgenden finden Sie ein Beispiel für die von dieser Methode zurückgegebenen Rechtecke.Here's an example of the rects returned by this method.

umspannen von Rechtecke

Dieser Beispielcode zeigt, wie Sie Ihre APP-Inhalte erkennen und erneut übertragen können, wenn Sie sich auf zwei Bildschirme überspannen.This sample code shows how you can detect and re-flow your app content when it is spanned across two screens.

public MainPage()
{
    this.InitializeComponent();
    Window.Current.SizeChanged += Current_SizeChanged;
}

private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
    switch (ApplicationView.GetForCurrentView().ViewMode)
    {
        case ApplicationViewMode.Spanning:
            SpanningLayout();
            break;
        default:
            SingleLayout();
            break;
    }
}

private void SpanningLayout()
{
    ApplicationView myView = ApplicationView.GetForCurrentView();
    if(myView.GetSpanningRect().Count == 2)
    {
        // We are split in two panes. Layout accordingly
        if(myView.GetSpanningRect().ElementAt(0).X != myView.GetSpanningRect().ElementAt(1).X)
        {
            // X offsets mismatch, we're in left-right layout.
            // TODO: Add math for setting up the regions on our page.
        }
        else if (myView.GetSpanningRect().ElementAt(0).Y != myView.GetSpanningRect().ElementAt(1).Y)
        {
            // Y offsets mismatch, we're in top-bottom layout.
            // TODO: Add math for setting up the regions on our page.
        }
        else
        {
            // Either the regions are on top of each other - which cannot happen!
            // Or the regions are offset both at X and Y. We don't handle that,
            // so layout as a single pane.
            SingleLayout();
        }
    }
    else
    {
        SingleLayout();
    }
}

private void SingleLayout()
{
    // Use default layout.
}

APIs für Win32-appsAPIs for Win32 Apps

Wichtig

Die GetContentRects hier referenzierte API befindet sich derzeit nicht im SDK.The GetContentRects API referenced here is not currently in the SDK. Dieser Abschnitt ist eine Vorschau der Funktionen für Win32-apps.This section is a preview of what is coming for Win32 apps. Die API kann erheblich geändert werden, bevor Sie allgemein verfügbar ist.The API may be substantially modified before it's generally available. Microsoft übernimmt bezüglich der hier bereitgestellten Informationen keine Gewährleistungen, weder ausdrücklich noch konkludent.Microsoft makes no warranties, express or implied, with respect to the information provided here.

Für Win32 lautet der allgemeine Ablauf bei der Reaktion auf eine Änderung im übereinteilungs Status:For Win32, the general flow for reacting to a change in spanning state is to:

  1. Empfangen eines- WM_WINDOWPOSCHANGED ,- WM_WINDOWPOSCHANGING oder- WM_SIZE Ereignisses.Receive a WM_WINDOWPOSCHANGED, WM_WINDOWPOSCHANGING, or WM_SIZE event.
  2. Wenden Sie die neue GetContentRects API an, um den Status ihrer Aufteilung zu verstehen.Call the new GetContentRects API to understand your spanning state.
  3. Passen Sie das Layout entsprechend an.Adjust your layout accordingly.

GetContentRectswird eine neue API hinzugefügt, mit der Sie ein Array von Rechtecke abrufen können, die die Regionen darstellen, in denen der Inhalt der App angezeigt wird.GetContentRects is a new API being added which will allow you to retrieve an array of rects that represent the regions in which your app's content is being displayed.

BOOL GetContentRects(
    HWND hwnd,
    _Inout_ UINT32* count,
    _Out_writes_opt_(*count) RECT* rects);
  • hwndDas Fenster, das abgefragt werden soll.hwnd is the window to query.
  • countdie Länge des vom Aufrufer bereitgestellten Rect-Arrays "rects".count is the length of the caller-supplied RECT array, "rects". Beim Beenden ist dies die Anzahl der durch das HWND übergreifenden Rechtecke.On exit, it is the number of rects spanned by the hwnd. Der aktualisierte Wert beim Beenden ist möglicherweise größer als der Eingabe Wert, wenn der vom Aufrufer bereitgestellte Puffer nicht groß genug ist, um alle Aufteilungs-rects zu speichern.The updated value on exit may be larger than the input value, when the caller supplied buffer is not large enough to hold all spanning rects. Der Wert ist kleiner, wenn weniger Inhalt als Steckplätze im bereitgestellten Puffer vorhanden sind.It will be smaller if there are fewer content rects than slots in the supplied buffer.
  • rectsder vom Aufrufer bereitgestellte Puffer, der Aufteilungs-rects empfängt.rects is the caller-supplied buffer which receives spanning rects. Wenn die Anzahl 0 (null) ist, kann Sie sein null .If the count is zero, it may be null.

Die von dieser Methode zurückgegebenen Rechtecke ähneln denen, die von den zuvor gezeigten WinRT-APIs zurückgegeben werden.The rects returned through this method will look similar to those returned by WinRT APIs, shown previously.

ZusammenfassungSummary

Unabhängig davon, ob Ihre APP mit appwindow, applicationview oder Win32-APIs erstellt wurde, kann Ihre APP Zustände, in denen Sie sich über mehrere Bildschirme erstreckt, effektiv erkennen und darauf reagieren.Whether your app is built using AppWindow, ApplicationView, or Win32 APIs, your app will be able to effectively detect and respond to states where it is spanned across multiple screens. Unabhängig von der verwendeten Technologie können Sie eine Reihe von Rechtecke abrufen, die die verschiedenen "Regionen" darstellen, über die sich die APP erstreckt, sodass Sie das Layout nach Bedarf effektiv aktualisieren können.Regardless of the technology being used, you will be able to retrieve a set of rects that represents the different "regions" across which your app is spanned, letting you effectively update your layout as you desire.

Zusätzliche RessourcenAdditional resources