첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170

TestProject.zip
0.02MB

▶ WindowDisplayMode.cs

namespace TestProject
{
    /// <summary>
    /// 윈도우 디스플레이 모드
    /// </summary>
    public enum WindowDisplayMode
    {
        /// <summary>
        /// 알 수 없음
        /// </summary>
        Unknown,

        /// <summary>
        /// 윈도우
        /// </summary>
        Windowed,

        /// <summary>
        /// 최대화
        /// </summary>
        Maximized,

        /// <summary>
        /// 전체 화면
        /// </summary>
        FullScreen,

        /// <summary>
        /// 왼쪽 스냅
        /// </summary>
        SnappedLeft,

        /// <summary>
        /// 오른쪽 스냅
        /// </summary>
        SnappedRight,

        /// <summary>
        /// 전체 화면 타블렛 모드
        /// </summary>
        FullScreenTabletMode,

        /// <summary>
        /// 컴팩트 오버레이
        /// </summary>
        CompactOverlay
    };
}

 

728x90

 

▶ WindowDisplayInformation.cs

using Windows.ApplicationModel.LockScreen;
using Windows.ApplicationModel.Preview.Holographic;
using Windows.Foundation.Metadata;
using Windows.System.Profile;
using Windows.UI.ViewManagement;

namespace TestProject
{
    /// <summary>
    /// 윈도우 디스플레이 정보
    /// </summary>
    public sealed class WindowDisplayInformation
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 현재 윈도우 디스플레이 모드 구하기 - GetCurrentWindowDisplayMode()

        /// <summary>
        /// 현재 윈도우 디스플레이 모드 구하기
        /// </summary>
        /// <returns>현재 윈도우 디스플레이 모드</returns>
        public static WindowDisplayMode GetCurrentWindowDisplayMode()
        {
            ApplicationView applicationView = ApplicationView.GetForCurrentView();

            switch(AnalyticsInfo.VersionInfo.DeviceFamily)
            {
                case "Windows.Desktop" :
                {
                    if
                    (
                        ApiInformation.IsEnumNamedValuePresent("Windows.UI.ViewManagement.ApplicationViewMode", "CompactOverlay") &&
                        applicationView.ViewMode == ApplicationViewMode.CompactOverlay
                    )
                    {
                        return WindowDisplayMode.CompactOverlay;
                    }

                    if(LockApplicationHost.GetForCurrentView() != null)
                    {
                        return WindowDisplayMode.FullScreen;
                    }

                    if(IsMixedReality())
                    {
                        return WindowDisplayMode.Windowed;
                    }
                    else
                    {
                        if(applicationView.IsFullScreenMode)
                        {
                            return WindowDisplayMode.FullScreen;
                        }
                        else
                        {
                            switch(UIViewSettings.GetForCurrentView().UserInteractionMode)
                            {
                                case UserInteractionMode.Mouse :
#pragma warning disable CS0618
                                    return applicationView.IsFullScreen ? WindowDisplayMode.Maximized : WindowDisplayMode.Windowed;
#pragma warning restore CS0618

                                case UserInteractionMode.Touch :
                                {
                                    if(applicationView.AdjacentToLeftDisplayEdge)
                                    {
                                        if(applicationView.AdjacentToRightDisplayEdge)
                                        {
                                            return WindowDisplayMode.FullScreenTabletMode;
                                        }
                                        else
                                        {
                                            return WindowDisplayMode.SnappedLeft;
                                        }
                                    }
                                    else
                                    {
                                        return WindowDisplayMode.SnappedRight;
                                    }
                                }

                                default :
 
                                    return WindowDisplayMode.Unknown;
                            }
                        }
                    }
                }
                case "Windows.Mobile" :
                {
                    if(UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse)
                    {
                        return applicationView.IsFullScreenMode ? WindowDisplayMode.Maximized : WindowDisplayMode.Windowed;
                    }
                    else
                    {
                        return WindowDisplayMode.FullScreen;
                    }
                }
                case "Windows.Holographic" :
                {
                    return WindowDisplayMode.Windowed;
                }
                case "Windows.Xbox" :
                case "Windows.IoT"  :
                {
                    return WindowDisplayMode.FullScreen;
                }
                case "Windows.Team" :
                {
                    if(applicationView.AdjacentToLeftDisplayEdge)
                    {
                        if(applicationView.AdjacentToRightDisplayEdge)
                        {
                            return WindowDisplayMode.FullScreenTabletMode;
                        }
                        else
                        {
                            return WindowDisplayMode.SnappedLeft;
                        }
                    }
                    else
                    {
                        return WindowDisplayMode.SnappedRight;
                    }
                }
                default :
                {
                    return WindowDisplayMode.Unknown;
                }
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Private

        #region 혼합 현실 여부 구하기 - IsMixedReality()

        /// <summary>
        /// 혼합 현실 여부 구하기
        /// </summary>
        /// <returns>혼합 현실 여부</returns>
        private static bool IsMixedReality()
        {
            try
            {
                bool result = ApiInformation.IsTypePresent("Windows.ApplicationModel.Preview.Holographic.HolographicApplicationPreview") &&
                              ApiInformation.IsMethodPresent
                              (
                                  "Windows.ApplicationModel.Preview.Holographic.HolographicApplicationPreview",
                                  nameof(HolographicApplicationPreview.IsCurrentViewPresentedOnHolographicDisplay)
                              ) &&
                              HolographicApplicationPreview.IsCurrentViewPresentedOnHolographicDisplay();

                return result;
            }
            catch
            {
            }

            return false;
        }

        #endregion
    }
}

 

300x250

 

▶ MainPage.xaml

<Page x:Class="TestProject.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    FontFamily="나눔고딕코딩"
    FontSize="16">
    <Grid>
        <Button Name="runButton"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Padding="10"
            Content="윈도우 디스플레이 모드 구하기" />
    </Grid>
</Page>

 

반응형

 

▶ MainPage.xaml.cs

using System;
using Windows.Foundation;
using Windows.Graphics.Display;
using Windows.UI.Popups;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace TestProject
{
    /// <summary>
    /// 메인 페이지
    /// </summary>
    public sealed partial class MainPage : Page
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainPage()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainPage()
        {
            InitializeComponent();

            #region 윈도우 크기를 설정한다.

            double width  = 800d;
            double height = 600d;

            double dpi = (double)DisplayInformation.GetForCurrentView().LogicalDpi;

            ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.PreferredLaunchViewSize;

            Size windowSize = new Size(width * 96d / dpi, height * 96d / dpi);

            ApplicationView.PreferredLaunchViewSize = windowSize;

            Window.Current.Activate();

            ApplicationView.GetForCurrentView().TryResizeView(windowSize);

            #endregion
            #region 윈도우 제목을 설정한다.

            ApplicationView.GetForCurrentView().Title = "윈도우 디스플레이 모드 구하기";

            #endregion

            this.runButton.Click += runButton_Click;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 윈도우 디스플레이 모드 구하기 버튼 클릭시 처리하기 - runButton_Click(sender, e)

        /// <summary>
        /// 윈도우 디스플레이 모드 구하기 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private async void runButton_Click(object sender, RoutedEventArgs e)
        {
            string windowDisplayMode = WindowDisplayInformation.GetCurrentWindowDisplayMode().ToString();

            MessageDialog messageDialog = new MessageDialog(windowDisplayMode);

            await messageDialog.ShowAsync();
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요