Questa documentazione è stata archiviata e non viene gestita.

Procedura: gestire la rotazione dello schermo

Aggiornamento: novembre 2007

È possibile sviluppare applicazioni Direct3D per orientamenti dello schermo diversi da quello verticale. Con i driver di periferica vengono comunque offerti diversi livelli di supporto per il rendering in orientamento non verticale, pertanto è opportuno che per la gestione della rotazione dello schermo l'applicazione segua le procedure consigliate.

Nota:

Le applicazioni Direct3D Mobile gestito richiedono il software Windows Mobile versione 5.0 per Pocket PC e Smartphone. Per informazioni sul software Windows Mobile e sugli SDK, vedere Risorse esterne per .NET Compact Framework.

Gli esempi di codice riportati di seguito si trovano nel Windows Software Development Kit (SDK).

Per rilevare se lo schermo è ruotato

  1. Aggiungere al progetto un riferimento al componente Microsoft.WindowsCE.Forms.

  2. Il modo più semplice per aggiungere codice di rilevamento consiste nell'inserirlo nel gestore eventi Resize del form principale. Aggiungere un delegato per il gestore eventi nel costruttore del form.

    this.Resize += new System.EventHandler(this.MyForm_Resize);
    

    AddHandler Resize, AddressOf Me.MyForm_Resize
    

  3. Aggiungere la variabile membro della classe booleana orientationChanged che terrà traccia delle modifiche dell'orientamento. Utilizzare il valore della proprietà ScreenOrientation per determinare l'orientamento corrente. Un valore di Angle0 indica la modalità verticale. Se l'orientamento corrente è diverso da quel valore, prenderne nota impostando il flag orientationChanged. Solitamente non viene intrapresa alcuna azione a questo punto, poiché l'applicazione potrebbe essere in esecuzione in background. Non modificare l'orientamento a livello di codice in questa fase, poiché la modifica di orientamento che ha attivato l'evento di ridimensionamento probabilmente non è ancora stata completata. Se si tenta di modificare di nuovo l'orientamento, si verificherà un errore.

        // 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
    

Procedura da eseguire quando viene ruotato lo schermo

  • È possibile controllare ogni frame per determinare se è stato modificato l'orientamento. Il metodo CheckRotation nell'esempio di codice seguente consente di modificare di nuovo l'orientamento in verticale impostando la proprietà ScreenOrientation. È possibile eseguire altre azioni, a seconda del tipo di interazione utente desiderato. Ad esempio, è possibile che si desideri evitare che l'applicazione modifichi autonomamente l'orientamento dello schermo, ma che venga visualizzato un messaggio per informare l'utente che il rendering non continuerà finché non si modifica di nuovo l'orientamento. Se si modifica l'orientamento dello schermo, salvare e ripristinare anche l'orientamento dello schermo iniziale, come illustrato nell'esempio seguente. Se non si modifica l'orientamento dello schermo ma si eseguono altre azioni, il rendering potrebbe continuare normalmente, non essere completato senza notifica oppure restituire un'eccezione.

    Nell'esempio di codice riportato di seguito viene eseguito il tentativo di impostare l'orientamento in verticale per il dispositivo, se non è già in modalità verticale. Il metodo CheckOrientation restituisce true, se il dispositivo è in modalità verticale.

    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
    

Per ripristinare l'orientamento alla chiusura dell'applicazione

  • Se si desidera modificare l'orientamento dello schermo a livello di codice, ripristinare anche l'orientamento iniziale dell'applicazione alla chiusura. Poiché l'applicazione potrebbe tentare di modificare l'orientamento mentre è in esecuzione, è necessario salvare l'orientamento iniziale e ripristinarlo alla chiusura dell'applicazione. Aggiungere una variabile membro per memorizzare l'orientamento iniziale.

    ScreenOrientation initialOrientation = SystemSettings.ScreenOrientation;
    

    ScreenOrientation initialOrientation = SystemSettings.ScreenOrientation;
    

    Aggiungere quanto riportato di seguito alla fine del metodo Main per tentare di ripristinare l'orientamento alla chiusura dell'applicazione.

    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
    

Mostra: