Gewusst wie: Behandeln der Bildschirmdrehung

Aktualisiert: November 2007

Sie können Direct3D-Anwendungen für andere Bildschirmausrichtungen als Hochformat entwickeln. Von Gerätetreibern wird die Darstellung einer anderen Ausrichtung als Hochformat allerdings in unterschiedlichem Ausmaß unterstützt. Daher sollte Ihre Anwendung die empfohlenen Vorgehensweisen zur Behandlung der Bildschirmdrehung einhalten.

Hinweis:

Für verwaltete Direct3D Mobile-Anwendungen ist Windows Mobile, Version 5.0, für Pocket PCs und Smartphones erforderlich. Informationen über Windows Mobile-Software und SDKs finden Sie unter Externe Ressourcen für .NET Compact Framework.

Die folgenden Codebeispiele sind in Windows Software Development Kit (SDK) enthalten.

So erkennen Sie, ob ein Bildschirm gedreht ist

  1. Fügen Sie im Projekt einen Verweis auf die Microsoft.WindowsCE.Forms-Komponente hinzu.

  2. Erkennungscode lässt sich am einfachsten hinzufügen, wenn Sie ihn in den Resize-Ereignishandler des Hauptformulars einfügen. Fügen Sie im Konstruktor des Formulars einen Delegaten für den Ereignishandler hinzu.

    this.Resize += new System.EventHandler(this.MyForm_Resize);
    
    AddHandler Resize, AddressOf Me.MyForm_Resize
    
  3. Fügen Sie die boolesche Membervariable der orientationChanged-Klasse hinzu, durch die Änderungen bezüglich der Ausrichtung nachverfolgt werden. Verwenden Sie den Wert der ScreenOrientation-Eigenschaft, um die aktuelle Ausrichtung zu bestimmen. Der Wert Angle0 gibt den Hochformatmodus an. Wenn dies nicht die aktuelle Ausrichtung ist, markieren Sie dies durch Festlegen des orientationChanged-Flags. Normalerweise wird an diesen Punkt keine Aktion ausgeführt, da die Anwendung eventuell im Hintergrund ausgeführt wird. Ändern Sie die Ausrichtung hier nicht programmgesteuert, da die Änderung der Ausrichtung, durch die das Größenänderungsereignis ausgelöst wird, wahrscheinlich noch nicht abgeschlossen ist. Wenn Sie jetzt versuchen, die Ausrichtung wieder zu ändern, schlägt dieser Vorgang fehl.

        // Add a class member variable to
        // store that the orientation has changed.
        bool orientationChanged = false;
    
        private void MyForm_Resize(object sender, EventArgs e)
        {
           if (SystemSettings.ScreenOrientation !=
             ScreenOrientation.Angle0)
            orientationChanged = true;
        }
    
        ' Add a class member variable to
        ' store that the orientation has changed.
        Dim OrientationChanged As Boolean = False
    
    Private Sub MyForm_Resize(ByVal sender As Object, ByVal e As EventArgs)
        If (SystemSettings.ScreenOrientation <> ScreenOrientation.Angle0) Then
           orientationChanged = True
        End If
    End Sub
    

Gewusst wie: Vorgehensweise, wenn der Bildschirm gedreht wird

  • Sie können jeden Frame überprüfen, um festzustellen, ob sich die Ausrichtung geändert hat. Mit der CheckRotation-Methode im folgenden Codebeispiel wird die Bildschirmausrichtung durch Festlegen der ScreenOrientation-Eigenschaft wieder in den Hochformatmodus geändert. Je nachdem wie sich die Anwendung dem Benutzer präsentieren soll, sollten Sie erwägen, weitere Aktionen auszuführen. Beispielsweise soll die Anwendung die Bildschirmausrichtung nicht selbstständig ändern, sondern den Benutzer darauf hinweisen, dass der Darstellungsvorgang erst dann fortgesetzt wird, wenn die Ausrichtung vom Benutzer wieder zurückgeändert wird. Wenn Sie die Bildschirmausrichtung allerdings ändern, sollten Sie die anfängliche Ausrichtung zudem speichern und wiederherstellen, wie im folgenden Beispiel gezeigt. Wenn Sie die Bildschirmausrichtung nicht ändern, sondern eine andere Aktion ausführen, kann die Darstellung normal fortgesetzt werden, ohne weitere Meldung fehlschlagen oder mit Rückgabe einer Ausnahme fehlschlagen.

    Im folgenden Codebeispiel wird versucht, das Gerät in den Hochformatmodus zu versetzen, sofern dieser noch nicht aktiviert ist. Die CheckOrientation-Methode gibt true zurück, wenn sich das Gerät im Hochformatmodus befindet.

    private bool CheckOrientation()
    {
        // orientationChanged is set to true in resize if it is
        // detected that the orientation of the device has changed.
        if (orientationChanged)
        {
          // Attempt to change the display back to portrait mode.
          try
          {
             SystemSettings.ScreenOrientation =
              ScreenOrientation.Angle0;
             // Now that the orientation is back to portrait mode
             // Do not attempt to change it again.
             orientationChanged = false;
           }
          catch (Exception)
          {
             // Failed to change the display mode.
             return false;
          }
        }
        return true;
    }
    
    // Use the CheckOrientation() method before rendering occurs.
    // All rendering for each frame occurs here.
    
    private void Render()
    {
        // If the device is not oriented properly, 
        // some display drivers may not work.
        if (!CheckOrientation())
            return;
            // Rendering code omitted here.
    }
    
    Private Function CheckOrientation() As Boolean
        ' orientationChanged is set to true in resize if it is
        ' detected that the orientation of the device has changed.
        If orientationChanged Then
            ' Attempt to change the display back to portrait mode.
            Try 
                SystemSettings.ScreenOrientation = ScreenOrientation.Angle0
                ' Now that the orientation is back to portrait mode
                ' Do not attempt to change it again.
                orientationChanged = false
            Catch  As Exception
                ' Failed to change the display mode.
                Return false
            End Try
        End If
        Return true
    End Function
    
    ' Use the CheckOrientation() method before rendering occurs.
    ' All rendering for each frame occurs here.
    Private Sub Render()
        ' If the device is not oriented properly, 
        ' some display drivers may not work.
        If Not CheckOrientation Then
            Return
        End If
        ' Rendering code omitted here.
    End Sub
    

So stellen Sie die Bildschirmausrichtung beim Beenden der Anwendung wieder her

  • Wenn Sie die Bildschirmausrichtung programmgesteuert ändern möchten, sollten Sie beim Beenden der Anwendung auch die anfängliche Anwendungsausrichtung wiederherstellen. Da eine Anwendung versuchen könnte, die Ausrichtung während der Ausführung zu ändern, müssen Sie die ursprüngliche Ausrichtung speichern und nach Beenden der Anwendung wiederherstellen. Fügen Sie eine Membervariable hinzu, um die ursprüngliche Ausrichtung zu speichern.

    ScreenOrientation initialOrientation = SystemSettings.ScreenOrientation;
    
    ScreenOrientation initialOrientation = SystemSettings.ScreenOrientation;
    

    Fügen Sie die Variable am Ende der Main-Methode hinzu, damit die Ausrichtung beim Beenden der Anwendung wiederhergestellt werden kann.

    if (SystemSettings.ScreenOrientation != initialOrientation)
    {
        try
        {
           SystemSettings.ScreenOrientation = initialOrientation;
        }
        catch (Exception)
        {
            // Unable to change the orientation back 
            // to the original configuration. 
    
            MessageBox.Show("This sample was unable to set the " +
                "orientation back to the original state.");
        }
    }
    
    If (SystemSettings.ScreenOrientation <> initialOrientation) Then
        Try 
            SystemSettings.ScreenOrientation = initialOrientation
        Catch  As Exception
            ' Unable to change the orientation back 
            ' to the original configuration. 
            MessageBox.Show(("This sample was unable to set the " & _
                "orientation back to the original state."))
        End Try
    End If
    

Siehe auch

Konzepte

Gewusst-wie-Themen für .NET Compact Framework

Weitere Ressourcen

Matrizenbeispiel für Direct3D Mobile

Mobile Direct3D-Programmierung in .NET Compact Framework