Нужна помощь в написании «без фонового» виджета для wxWidgets (wxGTK) с использованием GTK2 - PullRequest
4 голосов
/ 13 сентября 2010

Мой вопрос касается GTK2 и wxWidgets (фактически wxGTK).

В wxGTK все элементы управления по умолчанию имеют серый фон иневозможно удалить это.У меня есть текстурированная панель с пользовательскими дочерними элементами управления, и каждый из моих элементов управления имеет уродливую серую рамку, которую я не могу удалить.Я могу только установить цвет фона и сделать цвет панели таким же.Поэтому мне нужен вид "без фона" в wxGTK.

У меня много лет опыта работы с MS Windows до Linux.Насколько я помню, в MS Windows каждый оконный элемент управления (т.е. виджет) получает сообщение WM_ERASEBKGND (событие), а затем сообщение WM_PAINT .Фон рисуется в WM_ERASEBKGND обработчике событий, поэтому вы можете легко оставить фон родительского элемента управления нетронутым и закрасить все элементы виджета поверх него, просто переписав этот обработчик.

Это неcase с wxGTK (и GTK2)!

Фактически все виджеты в wxGTK основаны на собственном виджете "wxPizza" GTK, который является производным от виджета GtkFixed.Любой из виджетов wxPizza имеет свое собственное окно gdk, поэтому невозможно реализовать собственные виджеты без окон, используя стандартные элементы управления wxGTK, основанные на виджете "wxPizza".

Поэтому я решил реализовать еще один виджет GTK2, чтобы сделать его без фонаmsgstr "элементы управления доступны для wxWidgets.Я реализовал виджет GTK2 без окон, полученный из GtkFixed.Чтобы сделать его без окон, я использовал функцию gtk_widget_set_has_window (другой способ - установить флаг GTK_NO_WINDOW ).

Все работает, кроме координат отрисовки, которые находятся в родительском окнекоординатное пространство.Таким образом, элементы виджета отображаются в верхней левой позиции родительского окна.Это проблема, которую я не могу решить.Может быть, мне нужно добавить GtkEventBox в мой пользовательский виджет?

Может быть, есть другие способы реализовать такую ​​функциональность (виджеты без фона) в GTK2?Что вы об этом думаете?

Заранее спасибо, Илья

1 Ответ

4 голосов
/ 04 октября 2012

Ваш вопрос довольно старый, но поскольку теперь существует тривиальное решение, лучше написать об этом здесь, используйте следующий код перед вашим Create() вызовом:

SetBackgroundStyle(wxBG_STYLE_TRANSPARENT);

Мы получили этов wxWidgets 2.9.4 Я верю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...