2010-09-13 36 views
4

我的問題是有關GTK2wxWidgets的(實際上wxGTK)wxWidgets的 「backgroundless」 窗口小部件(wxGTK)。需要幫助寫的用GTK2

wxGTK所有控件默認都是灰色背景,無法將其刪除。我有一個帶自定義子控件的紋理面板,每個控件都有一個難以消除的醜陋灰色邊框。我只能設置一些背景顏色,並使面板的顏色相同。所以我需要在wxGTK中使用類型的「無背景」控件

我在Linux之前有多年的MS Windows經驗。據我還記得,在MS Windows中的每個窗口控件(即插件)接收WM_ERASEBKGND消息(事件),然後WM_PAINT消息。背景繪製在WM_ERASEBKGND事件處理程序中,因此您可以輕鬆地保持父控件的背景不變,並通過簡單地重寫此處理程序來將所有控件的元素都繪製在其上。

這不是與wxGTK(和GTK2)的情況下!

其實在wxGTK所有部件都基於定製「wxPizza」 GTK控件,它是從GtkFixed部件的。任何wxPizza小部件都有自己的gdk窗口,因此不可能使用基於「wxPizza」小部件的標準wxGTK控件實現自定義無窗口小部件。

所以我決定實現一個又一個GTK2小工具,使「backgroundless」控件可用的wxWidgets。我實現了一個從GtkFixed派生的無窗口GTK2小部件。爲了使它無窗口我用gtk_widget_set_has_window函數(另一種方法是設置一個GTK_NO_WINDOW標誌)。

一切正常,除了抽獎座標,這是在父窗口座標空間。所以小部件的元素在父窗口的左上角位置繪製。這是我無法解決的問題。也許我需要添加一個GtkEventBox到我的自定義小部件?

也許有以實現GTK2這樣的功能(backgroundless部件)其他的方法呢?你對此有何看法?

由於提前, 伊利亞

+0

聽起來像Gtkfixed正在扔扳手。你可以添加一個+ x_offset(從x座標)+ y_offset(從y座標)到繪製座標。但是,我仍然使用修改後的glade-2.12.2直接在C中構建我的接口而不使用Wx,並使用自定義的gtkrc文件控制很多「外觀」。 – technosaurus 2012-03-06 06:16:30

回答

4

你的問題是很老,但現在有一個簡單的解決方案,這是更好地在這裏寫出來,你Create()調用之前使用下面的代碼:

SetBackgroundStyle(wxBG_STYLE_TRANSPARENT); 

我們把它寫入wxWidgets 2.9.4我相信。

+1

謝謝!這個問題對我來說仍然是實際的! – ezpresso 2012-10-04 21:13:50