디스플레이 가득 늘리는 창

5900 단어 GUIC#
Twitter API를 이용하는 GUI 어플을 만들 때에 오른 일 시리즈 제2탄. 이번, 세로만 화면 가득 늘리고 싶다고 생각해 실장하면 의외로 오지 않았으므로 그 이야기를.
(전회는 PIN 코드의 수동 입력이 필요없는 인증 정보 , 다음회는 작업 스케줄러로 앱 시작 자동화 )

화면 해상도 얻기



세로로 늘리는 것보다 세로 창의 크기를 결정하려면 화면 해상도 정보가 필요합니다. 아무래도 WPF의 클래스에 그 정보를 취득할 수 있는 메소드가 없는 것 같고, Window.Forms의 메소드를 이용하는 것 같습니다.
(참고: C#에서 화면 해상도 얻기 )
//自身のウィンドウを囲む長方形を定義,thisはGUIアプリのクラス
System.Drawing.Rectangle rect = new System.Drawing.Rectangle((int)this.Left, (int)this.Top, (int)this.Width, (int)this.Height);
//長方形のある(ウィンドウのある)ディスプレイのスクリーン情報を取得
System.Windows.Forms.Screen screenData = System.Windows.Forms.Screen.FromRectangle(rect);
//縦と横の解像度を取得
int screenHeight = screenData.WorkingArea.Height;
int screenWidth = screenData.WorkingArea.Width;

마지막 2행에 WorkingArea 라고 있습니다만, 이 경우는 태스크 바등을 제외한 작업 영역의 사이즈를 꺼낼 수가 있어, Bounds 로 하면 화면 전체의 사이즈를 낼 수 있는 것 같습니다(참고: 디스플레이 크기(화면 영역, 해상도) 얻기 ) .

DPI를 통한 조정



위에서 얻은 데이터를 윈도우 크기에 적용해도 화면의 DPI 설정(1인치에 몇 도트 넣는지)에 따라서는 아래로 튀어나올 가능성이 있습니다. 아래 그림의 설정이 100%가 아니면 위의 정보만으로는 작동하지 않습니다. 자신도 평상시는 150%로 하고 있었던 것으로 밝혀졌습니다.
이를 해결하기 위해 스케일 인수를 통해 DPI 계수를 얻어야합니다. 예를 들어 위와 같이 150% 설정의 경우는 1.5배의 크기로 표시되어 버리므로 크기를 1.5로 나누면 좋은 것 같습니다.
(참고: WPF에서 높은 DPI 지원 )
PresentationSource source = PresentationSource.FromVisual(this);
double scaleX = 1.0;
double scaleY = 1.0;
if (source != null)
{
    //ここでDPIの係数を取得
    scaleX = source.CompositionTarget.TransformToDevice.M11;
    scaleY = source.CompositionTarget.TransformToDevice.M22;
}
//サイズを画面の縦サイズと同じにする
this.Height = (double)screenHeight / scaleY;

요약



이번, 윈도우의 사이즈를 두려워해, DPI의 일도 생각하지 않으면 안 되는 등, 귀찮은 부분도 하지 않으면 안된다고 하는 것을 알았습니다.

좋은 웹페이지 즐겨찾기