2010-12-23 3 views

답변

4

XQueryPointer()을 사용하면 마우스 위치를 알 수 있습니다. 그런 다음 XQueryTree()을 사용하여 창 목록을 가져옵니다. XQueryTree()은 올바른 z 순서로 창 목록을 반환하므로 바운딩 박스가 포인터 아래에있을 때까지 모든 창을 반복 할 수 있습니다. XGetWindowAttributes()은 경계 상자를 알아내는 데 필요한 모든 것을 제공합니다. 나는 당신이 모양의 창문으로 무엇을 할 것인지를 잘 모릅니다.

나는 X11을 몇 년 동안 사용하지 않았기 때문에 이것은 다소 어수선한 방법 일 수 있지만 작동해야합니다. 또한 저의 O'Reilly X11 서적을 더 이상 가지고 있지 않습니다. 저급 X11 자료로 작업한다면이 시리즈의 책 1 권을 얻고 싶을 것입니다. 나는 전체 시리즈가 요즘 무료 온라인으로 사용 가능하다고 생각한다.

+0

예 : http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –

+0

저는 Adrian Nye 저서 (XLib 프로그래밍 설명서, XLib 참조 설명서)를 출판했습니다. O'Reilly, 그 시리즈는 나의 X11/Motif 시대에 나의 성경이었습니다. –

3

저는 X11을 10 년 이상 프로그래밍하지 않았기 때문에이 오류가 발생하면 용서해주십시오.

Windows에서 마우스 움직임 이벤트를 등록 할 수 있다고 생각합니다. 어떤 변수 나 다른 변수에 윈도우 핸들을 저장 한 다음 트리를 투과하지 않도록 이벤트를 처리하면 이러한 이벤트를 처리 할 수 ​​있습니다. 그러면 윈도우를 식별 할 때 변수를 쿼리 할 수 ​​있습니다.

그러나 마우스가 적절한 이벤트 처리기를 등록한 창 위에있을 때만 작동하므로 다른 응용 프로그램에 속한 창에 대해 알지 못합니다. 다른 사람의 이벤트에 등록하는 방법이없는 한 가능한 창문.

다른 대답에 비해 장점은 전체 트리를 탐색 할 필요가 없다는 것입니다. 단점은 많은 마우스 움직임 이벤트를 처리해야하며 다른 사람들의 창을 찾지 못할 수도 있다는 것입니다.

마우스 입력 및 마우스 나가기 이벤트도있을 수 있으므로 필요한 처리량이 줄어들 것이라고 생각합니다.

관련 문제