문제

나는 a 층상 창 the를 추가함으로써 ws_ex_layered 확장 스타일 :

wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED;

Windows는 Chroma 키 색상 값으로 검은 색을 사용합니다. 문제를 분명히하기 위해 큰 검은 색 경계를 남기겠습니다.

alt text


창문이 구성된 후에는 검은 색을 크로마 키 색상으로 사용하십시오:

SetLayeredWindowAttributes(hwnd, 0x00000000, 255, LWA_COLORKEY);

이제 팝업 레이어링 된 창이 부분적으로 투명하게 나타납니다.

alt text


문제는 마지막 단계입니다. 사용하고 싶습니다 CS_DROPSHADOW Windows XP 이후 제공되는 클래스 스타일은 드롭 쉐이도를 생성합니다.

wndClass.Style = wndClass.Style | CS_DROPSHADOW;

드롭 그림자가 나타나지만 그림자는 원래 직사각형 창을 둘러싸고 있으며 레이어드 창에서 제공하는 창의 투명도를 고려하지 않습니다.

드롭 섀도우가 비류 층상 창을 존중하게 만드는 어딘가에서 내가 놓친 마법의 옵션을 아는 사람이 있습니까?


이 문제가 나타나는 곳의 또 다른 예는 6px 패딩/마진을 포함하지 않을 때입니다. Windows® 테마로 그려진 힌트 창은 비 교방 적입니다. 이것은 창이 투명한 작은 가시 간격을 남기지 만 드롭 그림자는 나타나지 않습니다.

alt text

Microsoft는 Internet Explorer의 힌트에서 볼 수 있듯이 작동하게했습니다.

alt text


창문을 더 자세히 바라본다 tooltips 클래스 힌트 창. 사용 spyxx - 창 직장과 클래스 스타일을 얻을 수 있습니다.

spyxx 말한다 :

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

따라서 모든 것이 창 자체를 104x20 픽셀로 가리 킵니다. (일치합니다 CS_DROPSHADOW.)

다음으로 나는 스타일을 볼 수 있습니다 tooltips 윈도우 클래스 :

Windows Styles:     94000001

    WS_POPUP        80000000
    WS_VISIBLE      10000000
    WS_CLIPSIBLINGS  4000000
    TTS_ALWAYSTIP          1

Extended Styles:    00080088

    WS_EX_LAYERED      80000
    WS_EX_TOOLWIN         80
    WS_EX_TOPMOST          8

흥미롭게도 사용하지 않습니다 CS_SAVEBITS (0x800); 작고 짧은 창문에 유용합니다.

또한 사용하지도 않습니다 CS_DROPSHADOW (0x20000). 이제 어떻게 자신의 창문 밖으로 끌리는 지 궁금합니다.

메모: 투명한 계층 윈도우는 지역보다 선호되는 기술로 문서화됩니다.

편집하다: 층상 Windows는 Windows 2000과 함께있었습니다. CS_DROPSHADOW는 XP와 함께 추가되었습니다.

도움이 되었습니까?

해결책

투명한 계층 윈도우는 지역보다 선호되는 기술로 문서화됩니다.

하지만, CS_DROPSHADOW 하다 지역에주의를 기울이십시오. 지역을 사용하여 창을 자르거나 다른 방식으로 형성하는 경우 Drop-Shadow는 새로운 개요를 따릅니다.

다행히도, 당신 ~할 수 있다 층이있는 창이있는 영역을 사용하고 두 가지를 결합하여 원하는 효과를 얻으십시오.

BTW : Tooltips_Class32 하다 CS_DROPSHADOW 사용 - 창 스타일이 아니라 클래스 스타일이기 때문에 창 스타일에서 볼 수 없습니다.

다른 팁

lwa_alpha를 사용하고 이미지에 그림자를 만들지 않는 이유는 무엇입니까?

귀하의 의견에 반응하는 편집 :

a) 그림자에만 알파 채널 PNG를 사용하는 것을 멈추지 않습니다. 두 개의 이미지를 함께 BLT로 하나의 단일 이미지로 사용하십시오.
b) 드롭 그림자를 생성하는 것은 어렵지 않습니다. 이미지에서 당신은 3 가지 다른 알파 값으로 검은 색을 게시했습니다.
c)하지만 작동하지 않습니까? 창의력을 발휘할 시간입니다.
d) 그런 다음 창문이 당신을 위해하지 않는 일을하도록 시도하지 마십시오.
e) 전적으로 관련이 없습니다. 레이어드 윈도우가 당신을 위해 그것을 처리합니다.

계층화 된 Windows에 대해 더 많이 배우는 것이 좋습니다. 왜냐하면 그들이 당신의 목표에 도움이 될 수 있기 때문입니다.

edit2 : 비트 맵이 있습니다. 이미지를 스캔하고 (검은 색을 자신을 식별함으로써) 색상 키가 될 어떤 비트를 찾기가 상당히 쉽고, 암탉은 다른 모든 것이 255의 알파를 갖는 알파를 갖도록 수정합니다 (아님 : 변환해야 할 수도 있습니다. 낮은 색상 형식의 32 비트 이미지의 이미지는 새 DC를 만들고 이미지를 복사하여이를 수행 할 수 있습니다). LWA_COLORKEY와 LWA_ALPHA와 동일한 효과를 제공합니다. 거기에서 가장자리에서 픽셀을 식별하기가 상당히 쉽습니다. 여기서 색상은 (r = 0, g = 0, b = 0, a = 0)로 변합니다. 그런 다음 첫 번째 픽셀을 192의 알파를 갖도록 변경하고, 하나는 128로, 그리고 64 세로 날려 버립니다. 이제 그림자처럼 보일 이미지 아래에 알파의 그라데이션이 있습니다. 알파를 조정하여 원하는 효과를 얻을 수 있습니다.

CS_DROPSHADOW 표준 직사각형 창에서만 작동합니다. WS_EX_LAYERED 창문은 모든 것을 지원하지 않습니다. 그들은 당신이 원하는 것을 정확하게 그릴 수있는 저수준의 셀프 서비스 방법에 가깝습니다.

드롭 그림자를 얻으려면 이미지의 알파 채널에서 드롭 쉐이도를 생성해야합니다.

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