2009-10-02 183 views
0

是否可以創建一個窗口作爲另一個窗口頂部的覆蓋層,例如,可以顯示在窗口標題欄或狀態欄中的圖標?在窗口上創建一個「覆蓋」

承擔這問那的目的:

  • 窗口是一個外國的窗口(不是我的應用程序擁有)
  • 疊加是16×16像素,並具有透明背景
  • 疊加顯示得非常靠近窗口的右上角,並且應該保持相對於窗口右上邊緣的位置。
  • 疊加層感興趣的是處理鼠標左鍵並沒有其他輸入。
  • 疊加層不應該有輸入焦點,它應該只有知道它何時被點擊。

如果有可能,怎麼辦?我試圖創建一個窗口並將其顯示在正確的位置,但我從來沒有看到它;就好像它不存在一樣。我做得到的窗口句柄,甚至可以將它轉換成一個GdkWindow對象,但我無法看到它。

ETA:我想要做的一個例子可以在網上找到,first without what I'm trying to doagain with it。在這種情況下,請看右邊的菜單欄。我想爲任何任意應用程序執行此操作,並讓用戶能夠單擊該小圖標以「停靠」該窗口。

回答

1

窗口管理器的工作方式是創建一個新窗口並將窗口的裝飾 作爲窗口的「父」添加到新窗口。

您可以使用XReparent()窗口api在窗口管理器的裝飾窗口和現有窗口之間插入窗口。

+0

我試圖避免重造和包裝。 AIUI,這種方法意味着我必須充當各種各樣的消息代理,這很脆弱。如果我能想出來,我只需截取WM_DELETE ClientMessage。 我開始認爲我只是不適合低級別的X11編程。 :) –

0

應該可以僅使用GDK命令來做到這一點,因爲它們或多或少地映射到Xlib的相同調用中。也許你沒有考慮到你應該以某種方式處理公開事件(那些不是發送到你的應用程序,而是發送到外部應用程序的事件)? 順便說一句,你到底如何將XWindow句柄轉換爲GtkWindow?

+0

我現在不在。我使用libwnck來獲取窗口句柄,這可能是幕後工作,但是當我必須使用窗口時,我會從窗口獲得一個X窗口。 –