통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
WPF & Silverlight 포럼마을입니다.
  마을등급 WPF & Silverlight   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 서학수 주민 728 since 2008-07-17
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
[마을 게시판]
WPF 강좌
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 WPF 강좌
 화면에서 WPF 윈도우 크기와 위치 지정 2008-01-05 오후 7:38:57
 superth  superth님께 메시지 보내기superth님을 내 주소록에 추가합니다.superth님의 개인게시판 가기 번호: 34543  / 읽음:11,736

운영체제에서 창은 화면상에 표시되는 위치와 크기를 갖는데 이를 재지정 할 수 있습니다. 크기(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의 수치는 높을 것이고 따라서 창의 실제 크기는 동일하게 변함이 없을 것입니다.

 

 

 

WidthHeight의 값을 매우 작은 값을 넣어 시험해보면 다음그림처럼 창의 제목표시줄은 항상 특정 크기보다 작아지지 않는다는 사실을 발견할 수 있습니다.


 

 

이런 창의 크기는 정적 읽기 프로퍼티인 SystemParameters.MinimizedWindowHeightSystemParameters.MinimizedWindowWidth에 저장돼 있습니다. SystemParameters 클래스에는 이 같은 몇가지 정적 프로퍼티가 있습니다.

 

화면의 위치를 결정짓는 값은 Left Top에 들어 있으며, 프로그램에서 이 프로퍼티를 변경하지 않으면 NaN의 값이 유지됩니다. 윈도우의 해상도에 대한 값은 정적 프로퍼티인 SystemParameters.PrimaryScreenWidthSystemParameters.PrimaryScreenHeight의 값을 통해 알 수 있습니다. DPI값에 따라 각각 값이 변경될 수 있습니다.

 

SystemParameterssms는 모두 크기를 장치 독립적 단위로 표현하지만 유일하게  SystemParameterssms의 프로퍼티중 SmallIconWidth SmallIconHeight는 픽셀 단위입니다. 대부분의 값들은 별다른 변환 없이 바로 사용할 수 있으며, 예를 들어 창을 화면의 우측하단 영역에 위치시키기 위해 다음과 같이 할 수 있습니다.

 


Left = 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 있는데 모달 대화상자를 그 소유자의 중앙에 위치시킵니다.

[코멘트] 좋음
2013-03-25 17:35
 pu238  pu238님께 메시지 보내기pu238님을 내 주소록에 추가합니다.pu238님의 개인게시판 가기 
이런 예외가 발생하네요.

오버라이드 클래스는 메인클래스 위에서 선언했고
생성자는 main() 메서드에서 호출했습니다.

생성자 호출시 예외가 나는데 왜그럴까요?
저장 취소
코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.