문제

창문을보고 있습니다 tooltips 클래스 힌트 창 밖의 힌트 창의 실제 사각형.

사용 spyxx - 툴팁의 창 직장과 클래스 스타일을 얻을 수 있습니다.

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

당신이 보는 드롭 그림자는 육체적으로 밖의 그려진 창. 내 창문 주위에 그림자를 어떻게 그리는 동안 밖의 내 창?

메모: 그림자는 표준을 사용하여 그려지지 않습니다 CS_DROPSHADOW 수업 스타일. 나는 이것을 실험적으로 확인했고, 창의 클래스 스타일도 spyxx; 사용하지 않습니다 CS_DROPSHADOW:

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

그래서 어떻게 창문 밖으로 끌려 갈 수 있습니까?

메모: 데스크탑 DC를 그려 보려고합니다. Greg Schechter 's에서 GDI, DirectX 및 WPF 응용 프로그램 리디렉션:

화면으로 그리기 및 읽기 -Baaaad!

마지막으로, 우리가 리디렉션 주제를 사용하기 때문에, 특히 위험한 관행 중 하나는 getdc (null)를 사용하고 그것에 글을 쓰거나 XOR 고무 대역 라인 등을 시도하는 시도를 통해 화면에 글을 쓰는 것입니다. 두 가지가 있습니다. 화면에 글을 쓰는 큰 이유 :

비싸다 ... 화면 자체에 쓰는 것은 비싸지 않지만, 화면에서 글을 쓸 때 일반적으로 XOR과 같은 XOR와 같은 읽기 모조리 작성 작업을 수행하기 때문에 거의 항상 화면에서 읽는 것과 동반됩니다. 비디오 메모리 표면에서 읽는 것은 매우 비싸고 DWM과의 동기화가 필요하며 전체 GPU 파이프와 DWM 애플리케이션 파이프를 실행해야합니다.
예측할 수 없습니다 ... 어떻게 든 실제 기본에 도달하고 글을 쓸 수 있다면, 기본에 쓴 내용이 화면에 얼마나 오래 남아 있는지에 대한 예측 가능성이 없습니다. UCE는 그것에 대해 알지 못하므로 다음 프레임 새로 고침에서 지우거나 화면에서 업데이트 해야하는 다른 내용에 따라 오랫동안 지속될 수 있습니다. (우리는 어쨌든 1 차에 직접 글을 쓰지 않습니다. 바로 그 이유가 있습니다 ... 예를 들어 DirectDraw 1 차에 액세스하려고하면 DWM이 액세스 응용 프로그램 종료 될 때까지 꺼집니다).

도움이 되었습니까?

해결책

당신은 당신이 설명하는 방식으로 창 밖으로 창 밖으로 끌 수 없습니다.

데스크탑을 마우스 오른쪽 버튼으로 클릭하면 속성/외관/효과로 이동하여 '메뉴에서 그림자 표시'를 선택 취소하십시오 ... 더 이상 그림자가 없습니다.

결론은 이것이 프로그램이 아닌 Window Manager의 제품이라는 것입니다.

다른 팁

Q : 한 창 밖에서 어떻게 그리나요? A : 내부를 그립니다 또 다른 창문!

가장 먼저 주목해야 할 것은 툴팁 클래스가 실제로 하다 사용 CS_DROPSHADOW 스타일 - 그러나 이것은 a입니다 수업 스타일이 아닙니다 창문 스타일, 그래서 당신은 수업 스파이 ++ 속성 대화 상자에서 탭을 찾으십시오. 당신은 그것을 볼 것입니다 tooltips_class32 Windows에는 실제로 이것과 다른 사람들이 있습니다.

그러나 그것은 단지 다음 질문으로 이어집니다 - 어떻게 저것 일하다? 글쎄, Windows는 그림자를 그리기 위해 도우미 HWND를 만들어 이것을 구현하는 것 같습니다. 아마도 다른 팝업 창이 그림자와 같은 크기와 모양을 만들고 회색으로 채우고 기본 창 아래에 직접 배치하고 설정합니다. 그것은 a ws_ex_layered 알파 블렌딩을 사용하여 그림자가 투명하고 가장자리 주위에 사라질 수 있도록 창. 그리고 자신의 창문 중 하나에 다른 유형의 그림자 효과를 추가하려면 동일하거나 유사한 기술을 스스로 사용하는 것을 막을 수있는 것은 없습니다.

그래서, 긴 이야기는 짧습니다 : 자신의 창문 밖으로 끌려하려면 일반 영역에서 도우미 투명 창을 만들고 대신 해당 도우미 창을 그립니다.

--

이제 Spy ++ 에서이 헬퍼 섀도우 윈도우 중 하나를 찾으려고하면 많이 찾을 수 없습니다. 와는 달리 tooltip_class32 Windows는 오래 지속되고 필요에 따라 숨기기/표시하는 Windows,이 그림자 창문은 더 애매한 생물입니다. 필요한만큼만 제작되므로 툴팁 또는 팝업 메뉴가있는 동안 Spy ++를 새로 고침해야합니다. 또는 Shadow Present를 사용하는 다른 창 - 대부분의 툴팁과 메뉴가 Spy ++로 전환하기 위해 마우스를 이동하자마자 사라지기 때문에 까다 롭습니다. 그러나 Spy ++의 자체 도구 모음의 툴팁이 고정 될 것입니다. 따라서 Spy ++를 시작하고 도구 모음의 항목 위로 호버링하고 F5 툴팁과 그림자가있는 동안 HWND 트리를 새로 고치기 위해. 이제 아래로 스크롤하면 트리의 세 번째와 네 번째 가시 HWND가 툴팁 자체이며 바로 그 후에 SysShadow 창문. 불행히도, 툴팁과 그림자가 이제 사라 졌기 때문에 해당 HWND의 속성 대화 상자를 얻으려고하면 '유효하지 않은 창'메시지와 함께 빈 속성 대화 상자를 얻을 수 있습니다. 정말로 주위를 찌르고 Sysshadow가 어떻게 작동하는지, 어떤 스타일 자체가 사용하는지 등을보고 싶다면 사용하는 오래 지속되는 팝업이있는 대상 앱을 만들 수 있습니다. CS_DROPSHADOW 그런 다음 여가에서 스파이 ++에서 탐색 할 수 있습니다.

(마지막으로,이 그림자는 Vista 이후 한 앱 창이 다른 앱 위에있을 때 보는 그림자와는 완전히 다른 것입니다.이 유형의 그림자는 에어로 유리 모드의 일부이며 동일하게 처리됩니다. 데스크탑 구성 관리자 유리 타이틀 바 효과가 추가되며 그림자를 구현하기 위해 도우미 창을 사용하거나 필요로하지 않습니다.)

그 그림자가 창 관리자 자체에 밀접하게 연결되어 있다면 놀라지 않을 것입니다. 결심 한 것은 모든 윈도우 관리자입니다 무엇 창이 페인트됩니다 어느 그 자체의 일부 언제 할 수 있습니다. 나는 윈도우 관리자가 가지고있는 모든 것을 제어 할 경우 그 그림자를 페인트하는 로켓 과학으로 보지 못합니다.

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