이번시간에는 전시간에 간단하게 설명했었던 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를 적용시킬 수 있습니다. 간단하죠?
기타 궁금하신 사항이나 문의 사항은 이메일또는 리플로 질문 바라며 아래는 위 예제 에서 사용한 전체 소스코드입니다.

AeroGlassWindow.zip
