2011-05-05 4 views
3

필자는 그다지 봤지만 어떤 해결책도 찾을 수 없습니다. 메신저 쉘 통합 라이브러리를 사용하여 사용자 정의 창 크롬을 강조하고이 창에 그림자도 있어야합니다. 어떤 사람들은 GlassFrameThickness를 -1로 설정한다고 말하면 트릭을하지만, 저에게는 효과가 없습니다. Jeremiah Morrill은 DwmExtendFrameIntoClientArea를 사용하여 제안했습니다. 필자는 그것을 시도해 보았다. 그림자는 괜찮아 보이지만 창을 표시하면 유리 프레임으로 처음 표시되고 그 다음에는 실제 내용이 겹쳐집니다. 이것은 나를 깜박 거리게 만듭니다. 이 깜박임을 제거 할 수있는 방법이 있습니까 아니면 셸 통합 라이브러리 만 사용하면 더 좋은 방법입니까?쉐도우 통합 라이브러리 WindowChrome (그림자 포함)

+0

'WindowStyle'을'None'으로 설정해 보셨습니까? – alimbada

+0

아무것도하지 않는 것 같은데 ...? –

답변

7

맞춤 크롬을 사용할 때 그림자가 표시되지 않는 비슷한 문제가있었습니다. 유리를 사용할 때 잘 작동했습니다.

그림자가있어서 GlassFrameThickness="0,0,0,1"으로 설정했습니다. 유리가 보이지 않았고 나는 그림자를 가졌다.

그림자는 Windows에 대한 단순한 RECT이므로 투명 필름으로 펑키 한 크롬을 사용하면 재미있어 보일 수 있습니다.

또한 최대화 상태를 지원하는 경우 최대화 모드 인 경우 "8,8,8,8"의 최상위 패널 요소에 여백을 설정해야합니다. 다른 모든 모드는 "0,0,0,0"이어야합니다.

alimbada의 경우 WindowStyle은 맞춤 크롬에서 기본값 없음입니다.

+0

최대화 된 상태에서 마진을 설정하는 것이 좋습니다. 그러나 'Window XP'는 어떤가? 필자는 'Window 8'과 'Window XP SP2'에서 예제를 테스트했다. 'XP'에서는 여백이 필요하지 않은 것 같습니다. 왜냐하면 그것은 나쁜 마진을하기 때문입니다. –

+0

그건 나에게 의미가 있습니다. GlassFrameThickness는 Windows Vista 이상에서만 작동하므로 Windows XP에서 여백을 변경할 필요가 없습니다. 나는 보통 OS 감지 로직으로이 문제를 처리한다. –

3

셸 통합 라이브러리는 DwmExtendFrameIntoClientArea을 사용하고 몇 가지 창 메시지를 처리하여 효과를 얻습니다. 전체 창 rect (즉, 둥근 모서리 없음)를 사용하는 경우 제안 된대로 (0,0,0,1)으로 설정하면 드롭 섀도우가 원하는대로 제공됩니다. Aero의 둥근 모서리를 시뮬레이션하려는 경우 (8,8,8,8)으로 설정하면 모서리도 둥글게 유지 될 정도로 유리 프레임이 확장되어 직사각형 모서리를 그릴 필요가 없습니다. 그림자의 모양은 유리 프레임 두께에 관계없이 변경되지 않습니다.

두께를 -1로 설정했을 때 깜박이는 것이 유리 프레임을 완전히 늘리지 않은 경우에도 여전히 존재합니다. 무슨 일이 일어나고있는 지, 콘텐트가 아직 합성 중일 때 윈도우가 보이게됩니다. 할 수있는 일은 기본 UI를 단순화하여 더 빨리 표시하거나 (처음으로 간단한 배경을 가져온 다음 사용할 수있는 것으로 바꾸는 것) 또는 화면을 만들어서 화면에 표시하지 않고 이동할 수 있습니다 콘텐츠가 렌더링되면 원하는 시작 위치로 이동합니다. 일 때 일 때 쉽게 감지 할 수있는 방법은 Priority=Loaded으로 DispatchTimer을 호출하는 것입니다. 기본 기본 레이아웃이 완료되면이를 호출해야합니다.