관리 메뉴

개발자의 코드 노트

WPF 투명창 애니메이션 복원 본문

프로그래밍/NET Framework

WPF 투명창 애니메이션 복원

IODES 2018. 4. 19. 01:43

WPF에서 투명한 창을 만들기 위해 AllowsTransparency="True"로 설정할경우,

Windows의 기본 최소화 / 최대화 애니메이션이 비활성된다는건 모두 아실겁니다.


최근에 커스텀 디자인의 창을 개발할 일이 있어서 조금 연구를 해본 결과,

특정한 스타일의 조합을 통해 투명창 상태에서도 애니메이션을 활성화하는게 가능합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int GWL_STYLE = -16;
const uint WS_POPUP = 0x80000000;
const uint WS_CAPTION = 0x00C00000;
const uint WS_SYSMENU = 0x00080000;
const uint WS_MINIMIZEBOX = 0x00020000;
const uint WS_MAXIMIZEBOX = 0x00010000;
const uint WS_THICKFRAME = 0x00040000;
const uint WM_NCCALCSIZE = 0x83;
 
[DllImport("user32")]
private static extern int SetWindowLong(IntPtr hwnd, int index, uint newLong);
 
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    var hwnd = new WindowInteropHelper(this).Handle;
    SetWindowLong(hwnd, GWL_STYLE, WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION);
}
cs


여기서 핵심은 WS_CAPTION이며, WS_THICKFRAME 스타일은 선택적으로 제외할 수 있지만,

리사이즈가 불가능한 창으로 취급되서 그런지 에어로 스냅과 관련된 기능이 동작하지 않습니다.


참고로 최소화 / 최대화 효과만 복원되고 기본 그림자나 열기 / 닫기 애니메이션은 없습니다.

Comments