2014-09-26 10 views
0

투명 창이있는 그림을 그리며 컴퓨터 화면에 주석을 적용하는 WPF 응용 프로그램이 있습니다. 투명성의 PInvoke를 사용하여 설정 : 내가 16 비트 32 비트에서 디스플레이 어댑터 colordepth을 켤 때16 비트 색상 수에서 WS_EX_TRANSPARENT를 사용하는 투명도

extendedWindowStyle = GetWindowLong(hwnd, GWL_EXSTYLE); 
SetWindowLong(hwnd, GWL_EXSTYLE, extendedWindowStyle | WS_EX_TRANSPARENT); 

는 지금은 문제가있다. 그 순간 투명 윈도우에서 더 이상 페인트 할 수 없으며 대신 마우스가 투명 WPF 윈도우 아래의 컨트롤에 도달합니다. 어떤 아이디어가 이것을 해결하는 방법?

문제 설정과는 아무 상관이 없었다

+0

WS_EX_TRANSPARENT는 자식 윈도우에만 적합 투명도를 에뮬레이트 꽤 취약한 Windows 해킹입니다. 하나는 WPF 애플 리케이션은 절대 필요하지 않습니다, 왜 당신이 그것을 사용하는 매우 명확하지. 최상위 창은 0 % 불투명 한 배경 브러시와 함께 AllowTransparency = True를 사용해야합니다. –

답변

0

가 나는 마침내 발견 (BTW의 PInvoke는 "윈도우 기본"및 에어로 투명성을 끄고 "고 대비"테마에 제대로 작동 내가 투명성을 가지고있는 유일한 방법이었다 사용) WS_EX_TRANSPARENT를 통한 투명도 또는 WPF의 AllowTransparency = true를 통해 "0 % 불투명 한 배경 브러시"와 관련이 있습니다. 투명화 된 캔버스에 페인트하기 위해 마우스 이벤트가 무시되기 때문에 0 % 불투명도로 설정할 수 없습니다. 따라서 불투명도를 01로 설정했습니다 (Background = "# 01FFFFFF"). 이제이 값은 너무 작아서 16 비트 색상 해상도를 사용할 때 감지되지 않습니다. 0 % 불투명도로 표시되며 마우스 이벤트가 더 이상 캡처되지 않습니다. 배경을 "04FFFFFF"로 설정하면 문제가 해결됩니다. 그냥 다른 사람이 같은 문제를 안타 - 그냥이 문제를 해결하기 위해 노력하고 코드의 잘못된 부분을 찾고 있었는데 ...