'Aero Glass'에 해당되는 글 2건

  1. 2009/01/09 Aero Glass Window (WPF & Winform)
  2. 2009/01/05 Aero Glass Using DWM(Desktop Window Manager) Part #1
WPF2009/01/09 13:42

이번시간에는 전시간에 간단하게 설명했었던 DWM을 이용한 Aero Glass Window를 생성하는 방법에 대해 소개하겠습니다. AeroGlass는 앞시간에도 계속해서 말씀드렸다 싶이 Windows Vista HomeBasic 이상의 버전에서만 작동하니 만약 작동을 하지 않는다! 하신다면 OS를 먼저 확인해 보시길 바랍니다. (물론 XP도 지원하지 않습니다.)

Windows Vista에서는 딱히 손을 대지 않아도 아래그림처럼 창의 외각 테두리는 자동으로 AeroGlass가 적용되는것을 확인하실 있습니다. 하지만 외각 테두리만 제공을 하기때문에 이것만으론 만족할 순 없겠죠? DWM을 사용하면 오른쪽 그럼처럼 Window 전체가 Aero Glass가 적용되도록 할 수 있습니다.

위 WPF Window를 Aero Glass로 구현했을때의 이미지 이며, Winform도 마찬가지로 AeroGlass로 구현할 수 있습니다. Winform 이미지는 생략하도록 하겠습니다. (구현 방법에 대해서는 아래에서 설명합니다.) 먼저 소스코드입니다.

소스코드 맨위에 정의되어 있는 AeroMargin은 AeroGlass가 적용될 때 Client Aera 까지의 여백을 지정하기 위한 Structure입니다. 간단하게 Left,Top,Right,Bottom을 포함하는 구조체 이므로 설명은 건너뛰겟습니다. 계속해서 코드를 보다보면 생소할 수 있는 문법이 보일 수도있습니다. C# 3.0부터 제공되는 확장 메서드라는 문법으로 this 이후에 있는 Type의 메서드를 확장시킨다는 계념으로 이해하시면 되겠습니다. (지금 잘 이해가 가시질 않는다면 잠시 후 등장하는 사용예를 보시면 이해하실수 있습니다.)

파라미터로 입력받은 Window를 WindowInteropHelper를 사용해 Window의 핸들을 얻습니다. 그리고 Window와 CompositionTarget의 배경색을 투명으로 설정합니다. 이는 투명으로 설정된 영역에 DWM에서 해당 부분에 바탕화면과 병합된 AeroGlass 이미지를 출력하기때문에 꼭 필요한 부분입니다. 그리고 DWM API인 DwmExtendFrameIntoClientArea를 호출하여 최종적으로 AeroGlass를 적용합니다.

Winform에서 AeroGlass를 사용하기 위해서는 WindowInteropHelper를 사용하지 않고 바로 핸들을 적용하면 됩니다.

사용하실때는 아래와 같이 사용하시면 됩니다.
 
위에서 잠깐 언급했었던 확장메서드를 사용합니다. Window Type의 확장 메서드로 SetAeroGlass를 구현했기때문에 간단하게 this.SetAreoGlass(); 를 호출하는 것만으로도 AeroGlass를 적용시킬 수 있습니다. 간단하죠?

기타 궁금하신 사항이나 문의 사항은 이메일또는 리플로 질문 바라며 아래는 위 예제 에서 사용한 전체 소스코드입니다.

 


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스
TAG Aero Glass, c#, WPF
WPF2009/01/05 06:50

이번시간부터 총 2차례에 걸쳐서 DWM(Desktop WIndow Manager)에 대하여 살펴보도록하겠습니다. Windows Vista가 출시되면사 많은 사람들의 이목이 집중됬던 기술중의 하나인 "DWM", 해석하자면 데스크탑 윈도우 관리자 라고 할수 있는데요. 이름만 가지고는 뭐하는 녀석인지 아직 감이 잘 오지 않습니다. 그렇다면 아래그림을 한번 보겠습니다.


개인적으로 Windows Vista가 처음 등장했을때 가장 많은 관심을 가지게 만들었던 기능입니다. 위와 같은 기능을 가능케 하는 기술이 바로 DWM이라고 하면 이해하기가 쉬울것같습니다. WPF가 바탕화면 레이어로 렌더링 하는 작업을 제어하기 위한 기술이라면 DWM은 화면상에 렌더링 되고 있는 다양한 Window를 바탕화면에 혼합하는 방식을 관리하는 기술이라고 할 수 있겠습니다.

DWM은 Windows Vista Home Basic 버전을 제외한 모든 Windows Vista 버전에서 사용 가능하며 dwm.exe파일을 통해 인터페이스가 제공됩니다. DWM의 기능을 사용하고자 할 경우에는 dwmapi.dll에서 제공하는 인터페이스를 통해 dwm.exe에 접근 할 수 있으며 dwmapi.dll의 인터페이스 선언은 windowssdk.msdn.microsoft.com 정보를 얻을 수 있습니다. 

제 글에서는 dwmapi.dll을 사용한 Aero Glass구현에 대하여 다룰 예정이기 때문에 DWM에 대한 설명은 여기까지만 하고, 보다 자세한 설명이 필요하신분은 메일을 보내주시거나, MSDN을 참고해주시기바랍니다.

여러분의 프로그램에 DWM의 기능을 사용하고자 한다면 dwmapi.dll의 여러가지 인터페이스를 통해 DWM 파라미터를 설정해야 합니다.(Windows API와 구현방식이 비슷합니다.) 아래는 dwmapi.dll에서 제공하는 기본적인 인터페이스를 나열해 놓은 것으로
위에서도 말씀드렸듯이 DWM 인터페이스를 사용하려면 Windows Vista Home Basic이상의 버전을 실행해야 합니다.

DwmEnableComposition, DwmIsCompositionEnabled, DwmSetWindowAttribute, DwmGetWindowAttribute, DwmGetColorizationColor, DwmDefWindowProc, DwmExtendFrameIntoClientArea, DwmEnableBlurBehindWindow, DwmQueryThumbnailSourceSize, DwmRegisterThumbnail, DwmUnregisterThumbnail, DwmUpdateThumbnailProperties

각 인터페이스에 대한 설명은 다음시간에 다루도록 하겠습니다. 이번시간에는 여기까지 Aero Glass를 구현하기 위한 DWM에 대하여 간단하게 살펴보았습니다. 다음시간에는 실제 DWM 인터페이스를 활용하여 Aero기능을 구현 해보 도록 하겠습니다.

PS. 새벽에 정신없이 포스팅한거라 말이 잘안맞는거 같네요 죄송합니다. ㅜ



 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 곡스