728x90
728x170
▶ 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
그리드형(광고전용)
'C# > UWP' 카테고리의 다른 글
[C#/UWP] PointerDevice 클래스 : GetPointerDevices 정적 메소드를 사용해 터치 이용 가능 여부 구하기 (0) | 2022.01.08 |
---|---|
[C#/UWP] ToastNotification 클래스 : Dismissed 이벤트를 사용해 사용자 취소/타임아웃시 알림 센터에서 토스트 알림 제거하기 (0) | 2021.09.12 |
[C#/UWP] ToastNotifier 클래스 : Show 메소드를 사용해 토스트 알림(Toast Notification) 표시하기 (0) | 2021.09.12 |
[C#/UWP] CoreInputView 클래스 : TryShow 메소드를 사용해 이모지 대화 상자 표시하기 (0) | 2021.09.10 |
[C#/UWP] TextBlock 엘리먼트 : 아이콘 사용하기 (0) | 2021.09.10 |
[C#/UWP] FontIcon 엘리먼트 : FontFamily/Glyph 속성 사용하기 (0) | 2021.09.10 |
[C#/UWP] FontIcon 엘리먼트 : FontFamily/Glyph 속성 사용하기 (0) | 2021.09.10 |
[C#/UWP] CoreWindow 클래스 : PointerCursor 속성을 사용해 마우스 커서 설정하기 (0) | 2021.08.23 |
[C#/UWP] UIElement 클래스 : TransformToVisual 메소드를 사용해 엘리먼트 상대/절대 위치 구하기 (0) | 2021.08.17 |
[C#/UWP] 백그라운드 태스크 사용하기 (0) | 2021.07.29 |