Добавление кнопки в ячейку wxGrid Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
xalgor
In need of some credit
In need of some credit
Posts: 9
Joined: Wed Dec 17, 2008 8:31 am

Добавление кнопки в ячейку wxGrid

Post by xalgor » Wed Dec 17, 2008 4:29 pm

Есть wxGrid. Каким образом можно в одну из ее ячеек добавить кнопку, как показано на картинке?
Спасибо.

Image

User avatar
T-Rex
Moderator
Moderator
Posts: 1188
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Dec 17, 2008 7:27 pm


xalgor
In need of some credit
In need of some credit
Posts: 9
Joined: Wed Dec 17, 2008 8:31 am

Post by xalgor » Thu Dec 18, 2008 8:39 am

T-Rex wrote:wxPropertyGrid
Спасибо! :D

xalgor
In need of some credit
In need of some credit
Posts: 9
Joined: Wed Dec 17, 2008 8:31 am

Post by xalgor » Fri Dec 19, 2008 3:38 pm

Вот только не совсем понятно, как происходит добавление кнопки в ячейку.
То ли поверх каждой ячейки накладывает прозрачная панель с кнопкой, то ли как-то замещается Renderer и Editor, то ли еще как-то. Так как никогда не общался с такого рода технологиями, то код кажется, мягко говоря, размазанным и уловить суть не особо получается.

Может быть в двух словах кто-то сможет объяснить принцип?

User avatar
T-Rex
Moderator
Moderator
Posts: 1188
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Fri Dec 19, 2008 3:58 pm

Так эээ.. ну тут два варианта:
- Рендерить кнопку руками
- Размещать контрол/кнопку руками в виде дочернего контрола, обрабатывать изменения размеров ячейки и перемещать кнопку куда надо.

Тебе что именно реализовать надо, для wxGrid конпку в ячейке или устроит функционал wxPropertyGrid?

На http://wxwidgets.info я недавно две статьи постил по кастомизации wxGrid'а.

xalgor
In need of some credit
In need of some credit
Posts: 9
Joined: Wed Dec 17, 2008 8:31 am

Post by xalgor » Fri Dec 19, 2008 4:41 pm

T-Rex wrote:Так эээ.. ну тут два варианта:
- Рендерить кнопку руками
- Размещать контрол/кнопку руками в виде дочернего контрола, обрабатывать изменения размеров ячейки и перемещать кнопку куда надо.

Тебе что именно реализовать надо, для wxGrid конпку в ячейке или устроит функционал wxPropertyGrid?

На http://wxwidgets.info я недавно две статьи постил по кастомизации wxGrid'а.
Спасибо за помощь.

Задача такова, что нужно для wxGrid для произвольной ячейки уметь ее сделать ButtonType (то есть текст + кнопка справа) и чтобы при нажатии на кнопку вызывалась некая функция.

В идеале планируется расширить класс wxGrid, чтобы был метод что-то вроде setButtonTypeCell(row, column, btn_name, callback), где колбэк - указатель на функцию, вызываемую при нажатии кнопки.

Кнопку руками рендерить как я понимаю не получится, так как для нее требуется стандартный вид на любой ОС, на которую будет портирован проект. На данный момент это только для винды реализуется, но Windows only функции использовать по вышеупомянутой причине нельзя.

Соответственно, получается, что нужно именно дочерним элементом кнопку добавлять, что я пытаюсь делать, но почему-то при создании кнопки с parent = grid ее не видно, если добавляю новую панель, а на нее кнопку, то она появляется, но при манипуляциях с grid панель исчезает и появляется кусками не совсем понятным образом.

Функционал PropertyGrid не устроит, так как там слишком много лишнего для моей задачи и не хочется полагаться на код сторонних разработчиков(а).

Сейчас потихоньку осиливаю Cross-platform GUI Programming with wxWidgets, думаю, что проблема в том, что некоторых принципов базовых пока не знаю.

PS. Статьи читал, но полностью переварить не смог :(
[offtop]
Там пару косяков можно в оформлении пофиксить:
1. Последние скриншоты не видны (в оригинале все ок) в обоих статьях
2. В середине предпоследней статьи в листинг кода врезался авторский текст про Example.cpp
[/offtop]
OS: Windows Vista [6.0.6]
Compiler: MSVC++ 8.0
wxWidgets: 2.8.9

algor
In need of some credit
In need of some credit
Posts: 4
Joined: Wed Jan 21, 2009 11:32 am

Post by algor » Wed Jan 21, 2009 11:48 am

Проблему решил написанием собственного контрола (текст+кнопка) и впихиванием оного в соответствующий самописный CellEditor.

Post Reply