다음 접근법은 다소 복잡하지만, 필자가 사용하는 방법입니다. 윈도우가 매핑 될 때 윈도우 매니저와 GTK + 사이에 복잡한 상호 작용이있을 때에도 견고해야합니다 - 예를 들어 패널 중 일부가 자동으로 숨겨져있을 때.
기본적인 아이디어는 각 화면에 대해 장식이없는 최대화 된 창을 만들고, 매핑 될 때 (예 : map-event
콜백을 사용하여) 도형 (크기 및 위치)을 가져 와서 즉시 파괴하는 것입니다. 그러면 각 화면에서 사용할 수있는 영역이 생깁니다. 그런 다음 기존의 gdk_screen_get_monitor_geometry()
접근 방식을 사용하여 모니터간에 사용 가능한 영역이 분할되는 방식을 결정할 수 있습니다. 상세
:
사용 gdk_display_get_default()
는 기본 디스플레이를 얻기 위해 다음 gdk_display_get_n_screens()
가 얼마나 많은 화면을 찾을 수 있습니다.
gtk_window_new()
을 사용하여 각 화면에 대해 새 창을 만들고 gtk_window_set_screen()
을 사용하여 창을 각각의 화면으로 이동합니다. gtk_window_set_decorated(,FALSE)
을 사용하여 창을 없애고 gtk_window_maximize(,TRUE)
을 사용하여 창을 최대화하고 gtk_window_set_opacity(,0.0)
을 사용하여 투명하게 만듭니다. map-event
신호를 콜백 핸들러에 연결하십시오 (g_signal_connect()
사용). gtk_widget_show()
을 사용하여 창을 표시하십시오.
신호 처리기는 새로 매핑 된 창의 위치 및/또는 크기를 가져오고 gtk_widget_destroy()
을 사용하여 창을 파괴하려면 gtk_window_get_position()
및/또는 gtk_window_get_size()
을 호출해야합니다.
실제로는 하나의 창만 있으면됩니다. 나는 개인적으로 간단한 루프를 사용할 것이다. 필자는 창 관리자의 기이함/버그로 인해 화면간에 동일한 창을 이동하는 것보다 각 창마다 새 창을 만드는 것이 훨씬 더 강력하다고 생각합니다. 하나의 간단한 콜백 함수를 사용하여 각 화면에 사용할 수있는 영역을 얻을 수 있기 때문에 더 쉽습니다.
내가 말했듯이, 이것은 꽤 복잡하다. 반면에, 표준 애플리케이션은 화면 크기를 신경 쓰지 않아야합니다. 사용자 또는 창 관리자가 묻는 것을 단순히 수행해야합니다. 그렇기 때문에이 정보를 찾을 수있는 더 나은 시설이 없다면 나는 놀라지 않을 것입니다. 화면 크기는 사용자가 디스플레이를 회전하거나 디스플레이 해상도를 변경하는 경우와 같이 언제든지 변경 될 수 있습니다.
솔루션을 공유 하시겠습니까? –
게시물을 읽으십시오. 추가 도움말은 http://bit.ly/1t8MY1H –
을 참조하십시오. x-tile 소스 코드가 있는데, 나는 더미가 아닙니다. 하지만 전체 소스 코드를 검색하는 것에 비해 몇 가지 시스템 호출을 더 쉽게 볼 수 있다고 생각하지 않습니까? –