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
Fügen Sie im Projekt einen Verweis auf die Microsoft.WindowsCE.Forms-Komponente hinzu.
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
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