다음을 통해 공유


방법: 화면 회전 처리

업데이트: 2007년 11월

화면 방향이 세로 방향이 아닌 Direct3D 응용 프로그램을 개발할 수 있습니다. 그러나 장치 드라이버에서 비세로 방향으로 렌더링하기 위한 다양한 지원 수준을 제공하므로 응용 프로그램은 화면 회전을 처리하기 위해 권장되는 방법을 따라야 합니다.

참고:

관리되는 Direct3D 모바일 응용 프로그램을 사용하려면 Pocket PC 및 Smartphone용 Windows Mobile 버전 5.0 소프트웨어가 필요합니다. Windows Mobile 소프트웨어 및 SDK에 대한 내용은 .NET Compact Framework용 외부 리소스를 참조하십시오.

다음 코드 예제는 Windows SDK(소프트웨어 개발 키트)의 예제입니다.

화면이 회전 상태인지 감지하려면

  1. Microsoft.WindowsCE.Forms 구성 요소에 대한 참조를 프로젝트에 추가합니다.

  2. 감지 코드를 추가하는 가장 쉬운 방법은 해당 코드를 주 폼의 Resize 이벤트 처리기에 두는 것입니다. 폼 생성자에서 이벤트 처리기에 대한 대리자를 추가합니다.

    this.Resize += new System.EventHandler(this.MyForm_Resize);
    
    AddHandler Resize, AddressOf Me.MyForm_Resize
    
  3. 방향이 변경되면 추적하는 부울 orientationChanged 클래스 멤버 변수를 추가합니다. ScreenOrientation 속성 값을 사용하여 현재 방향을 확인합니다. Angle0 값은 세로 모드를 나타냅니다. 현재 방향이 세로 방향이 아니면 orientationChanged 플래그를 설정하여 표시합니다. 일반적으로 응용 프로그램이 백그라운드 모드에 있을 수 있으므로 이 경우 아무런 작업도 수행되지 않습니다. 크기 조정 이벤트를 트리거한 방향 변경 작업이 아직 완료되지 않았을 수 있으므로 방향을 프로그래밍 방식으로 변경하지 마십시오. 방향을 다시 변경하려고 하면 실패합니다.

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

화면이 회전할 때 조치를 취하는 방법

  • 각 프레임을 검사하여 방향이 변경되었는지 여부를 확인할 수 있습니다. 다음 코드 예제의 CheckRotation 메서드는 ScreenOrientation 속성을 설정하여 화면 방향을 세로 모드로 다시 변경합니다. 원하는 작업 환경에 따라 다른 작업을 수행해야 합니다. 예를 들어, 응용 프로그램이 자체적으로 화면 방향을 변경하게 하지 않고 대신 사용자가 원래 상태로 변경하지 않는 한 렌더링이 계속되지 않을 것임을 알릴 수 있습니다. 화면 방향을 변경할 경우 다음 예제에 표시된 것처럼 초기 화면 방향을 저장 및 복원해야 합니다. 화면 방향을 변경하지 않고 대신 다른 작업을 수행하면 렌더링이 정상적으로 계속되거나 자동으로 실패하거나 예외를 반환하면서 실패할 수 있습니다.

    다음 코드 예제는 장치가 세로 모드에 있지 않을 경우 세로 방향 모드에 두려고 합니다. CheckOrientation 메서드는 장치가 세로 모드에 있을 경우 true를 반환합니다.

    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
    

응용 프로그램이 끝날 때 방향을 복원하려면

  • 화면 회전을 프로그래밍 방식으로 변경하려면 응용 프로그램이 끝날 때 초기 응용 프로그램 방향을 복원해야 합니다. 응용 프로그램이 실행 중일 때 방향을 바꾸려고 하므로 처음 방향을 저장하고 응용 프로그램이 종료되면 처음 방향을 복원해야 합니다. 처음 방향을 저장하려면 멤버 변수를 추가합니다.

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

    응용 프로그램이 종료되면 방향을 복원하도록 Main 메서드 끝에 멤버 변수를 추가합니다.

    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
    

참고 항목

개념

.NET Compact Framework 방법 항목

기타 리소스

Direct3D 모바일 매트릭스 샘플

.NET Compact Framework의 모바일 Direct3D 프로그래밍