문제

투명성이있는 최상위 수준 (예 : WS_Child가 아닌) 창을 만들고 싶습니다. 그러나 주어진 픽셀이 완전히 투명하거나 완전히 불투명 한 간단한 마스크가되기를 원하지 않습니다. 그리고 나는 그것이 전체 창에 알파 레벨을 가지고 있기를 원하지 않습니다. 오히려, 나는 창이 본질적으로 완전히 투명 해지기를 원하며, 비트 맵이 알파 채널로 비트 맵을 그려 비트 맵이 그 뒤에있는 모든 창과 혼합되도록합니다. 예를 들어, 이미지 자체의 알파가 불투명에서 중앙에서 바깥쪽으로 완전히 투명하게 조화를 이루는 햇살.

나는 둘 다 내가하고 싶은 일에 가까워지는 두 가지 방법을 찾았습니다. 영역을 사용하여 완전히 투명한 섹션을 잘라낼 수 있습니다. 계층화 된 Windows를 사용하면 비슷한 일을 할 수 있습니다 (또는 전체 창을 약간 투명하게 만들 수도 있지만 전혀 원하는 것은 아닙니다). WS_EX_TRANSPARENT 및 WS_EX_COMPOSITE와 같은 다른 스타일을 살펴 보았지만 아무 소용이 없습니다.

부모의 지역 내 부모 창과 혼합되기 때문에 어린이 창에서 잘 작동하기 위해 이런 종류의 효과를 얻을 수 있습니다. 최상위 창에서도 비슷하게 작동하는 것은 계속 나를 피할 수 있습니다.

사람들이 다른 프로그램에서 보았다고 확신했기 때문에 이것이 할 수 있다는 것을 알고 있습니다. 나는 여기서 창문을 그리는 것에 대해 간단한 것을 완전히 이해하지 못한 것 같습니다.

도움이 되었습니까?

해결책

층상 된 창 (WS_EX_LAYERED) 작업을 수행해야합니다. UpdateLayeredWindow() 그리고 픽셀 당 알파 값을 지정하기위한 다소 특이한 비트 맵 형식 (32 비트, 사전 배수 알파) (SetLayeredWindowAttributes() 전체 창 또는 색상 키에 대한 단일 알파 값 만 지정할 수 있습니다).

당신은 이미 이것을 시도했다고 말합니다 - 어떤 문제를 경험 했습니까?

다른 팁

창에 픽셀 당 알파를 얻는 유일한 방법은 updatelayeredwindow ()입니다.
이 MSDN 링크를 확인하십시오. http://msdn.microsoft.com/en-us/library/ms997507.aspx

updateLayeredWindow를 사용할 때 응용 프로그램은 WM_PAINT 또는 기타 페인팅 메시지에 응답 할 필요가 없습니다. 이미 창에 대한 시각적 표현을 제공했으며 시스템이 해당 이미지를 저장하고, 작곡하고,이를 렌더링하는 데 도움이되기 때문입니다. 화면. updateLayeredWindow는 매우 강력하지만 기존 Win32 응용 프로그램이 그리는 방식을 수정해야합니다..

나는 이것이 당신이 겪고있는 문제라고 확신합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top