본문 바로가기
.NET C#

화면에서 윈도우 크기와 위치 지정

by 태디 2008. 1. 5.
728x90
사용자 삽입 이미지
윈도우 운영체제에서 창은 화면상에 표시되는 위치와 크기를 갖는데 이를 재지정 할 수 있습니다. 크기(Size) : Width(가로), Height(세로)
 
Window 클래스는 FrameworkElement로부터 Width와 Height 프로퍼티를 상속 받습니다. 따라서 다음처럼 다음과 같이 생성자에서 이 프로퍼티의 값을 재정의 할 수 있습니다.

사용자 삽입 이미지

 
Width와 Height는 초기에는 정의돼 있지 않으며 프로그램에서 따로 정의하지 않는 한 계속 이런 상태로 남습니다. 따라서 이를 달리 표현하면 NaN(숫자가 아님:not a number)값을 갖게 합니다.
 
창의 실제 크기를 얻기 위해서는 Width와 Height 프로퍼티를 사용해서는 안 되며 ActualWdith, ActualHeight 프로퍼티를 사용해야 합니다. 초기에는 값이 0이며 창이 화면에 표시된 후에 실제 값을 갖게 됩니다.
 
WPF에서는 모든 크기나 위치를 지정할 때 장치 독립적 픽셀(device-independent pixels) 또는 논리 픽셀(logical pixels)이라고 하는 단위를 사용합니다. 이 단위는 1/96인치이며, 예를 들어서 Width가 288이고 Height가 192의 값을 갖는다면 실제로 창의 가로가 3인치이고 세로가 2인치임을 의미합니다. 이는 모든 컴퓨터의 설정에 따라 차이가 있을 수 있으며 사용자가 윈도우의 설정을 변경이 변경 가능하기 때문입니다.
 
모니터의 설정에서 기본값으로 96DPI(인치당 도트 수, dots per inch)로 설정돼 있으며 그런 경우 Width와 Height는 각각 288과 192가 그대로 픽셀 값과 일치 합니다. 그러나 120DPI로 설정이 변경한다면 Width와 Height 프로퍼티가 288, 192인 경우에 실제 픽셀 수가 360과 240이 되는 것입니다. 픽셀이 아닌 실제 창의 크기는 변함이 없습니다. 미래의 모니터는 지금보다 더 높은 해상도를 표시하므로 DPI의 수치는 높을 것이고 따라서 창의 실제 크기는 동일하게 변함이 없을 것입니다.
 
 
 
Width와 Height의 값을 매우 작은 값을 넣어 시험해보면 다음그림처럼 창의 제목표시줄은 항상 특정 크기보다 작아지지 않는다는 사실을 발견할 수 있습니다.

 
사용자 삽입 이미지
 
이런 창의 크기는 정적 읽기 프로퍼티인 SystemParameters.MinimizedWindowHeight와 SystemParameters.MinimizedWindowWidth에 저장돼 있습니다. SystemParameters 클래스에는 이 같은 몇가지 정적 프로퍼티가 있습니다.
 
화면의 위치를 결정짓는 값은 Left와 Top에 들어 있으며, 프로그램에서 이 프로퍼티를 변경하지 않으면 NaN의 값이 유지됩니다. 윈도우의 해상도에 대한 값은 정적 프로퍼티인 SystemParameters.PrimaryScreenWidth와 SystemParameters.PrimaryScreenHeight의 값을 통해 알 수 있습니다. DPI값에 따라 각각 값이 변경될 수 있습니다.
 
SystemParameterssms는 모두 크기를 장치 독립적 단위로 표현하지만 유일하게 SystemParameterssms의 프로퍼티중 SmallIconWidth와 SmallIconHeight는 픽셀 단위입니다. 대부분의 값들은 별다른 변환 없이 바로 사용할 수 있으며, 예를 들어 창을 화면의 우측하단 영역에 위치시키기 위해 다음과 같이 할 수 있습니다.

SystemParameters.PrimaryScreenWidth - Width;
Top = SystemParameters.PrimaryScreenHeight - Height;

윈도우 영역의 작업표시줄을 감안한다면 코드는 다음과 같습니다. SystemParameters.WorkArea 프로퍼티는 Rect 타입의 객체를 반환합니다. 이 타입은 왼쪽 상단의 위치와 크기로써 사각형을 정의하는 구조체입니다.

Left = SystemParameters.WorkArea.Width - Width;
Height = SystemParameters.WorkArea.Height - Height;

WorkArea를 감안하여 화면의 중앙에 창을 위치코자 한다면 코드는 다음과 같습니다.

Left = (SystemParameters.WorkArea.Width - Width) / 2 +
SystemParameters.WorkArea.Left;
Height = (SystemParameters.WorkArea.Height - Height) / 2 +
      SystemParameters.WorkArea.Top;

이 코드를 Window 클래스에 정의된 WindowStartupLocation 프로퍼티를 사용해 바꿀 수 있습니다.

사용자 삽입 이미지

WindowStartupLocation 열거형의 멤버를 이 프로퍼티에 대입합니다. 기본값은
WindowStartupLocation.Manual로, 프로그램이나 윈도우 운영체제에서 수동으로 창의 위치를 지정합니다. WindowStartupLocation.CenterScreen으로 지정하면 창을 화면의 중앙에 위치킵니다. 세 번째로 WindowStartupLocation.CenterOwner가 있는데 모달 대화상자를 그 소유자의 중앙에 위치시킵니다.

 

댓글