| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > синхронизация контролов диалогов |
| Автор: zkv 26.9.2007, 16:54 |
| Нередко приходится дублировать некоторые элементы управления в программе. К примеру у меня есть некоторое свойство объекта, управляется оно слайдером. сейчас мне потребовалось продублировать этот слайдер в другом месте программы, те создать еще один слайдер, который будет управлять этим же свойством объекта. Необходимо теперь эти два слайдера синхронизировать - изменение одного из них должно отражаться на другом. Те мне нужно создать что-то типа ссылки в с++, но только гуишной Стало интересно, может существуют стандартные методы (типа: m_ctrlSome.SynchronizeWith( m_ctrlAnother ) ) или приемы, для организации сей фишки? |
| Автор: Andrey44 27.9.2007, 08:42 |
| При движении одного слайдера делаешь другому two.SetPos(one.GetPos()); И всех делов. |
| Автор: Andrey44 27.9.2007, 12:05 |
| А интересно, можно-ли одну переменную связать с двумя контролами? Сейчас не могу попробовать. Но интересно! |
| Автор: Coocky 28.9.2007, 13:36 | ||
Не понял,что ты хочешь толком,но кроме срздание промежуточного класса,в котором хранятся данные об изменении свойств обьекта,которых управляется слайдером,не вижу. Пересечений не будет,если организуешь все через сообщения. |
| Автор: zkv 29.9.2007, 15:49 | ||
знаешь ссылку в с++? тоже самое хочу, изменяю один объект - абсолютно также одновременно изменяется другой. Вот но только для контролов.
Вообщем то задачу конечно решил, но мне не нравится решение Если придумаю что-нить красивое, отпишусь. |
| Автор: Любитель 29.9.2007, 23:55 | ||
Насколько также? Положение всё-таки, думаю, будет разным [offtop] А вообще, концепция сигнал/слотов (при встраивании соответствующей поддержке со стороны ГУИ-либы или написании своих обёрток) в данном случае очен красива и удачна. [/offtop] |
| Автор: Earnest 30.9.2007, 11:26 |
| Если слайдеры находяться не в модальных диалогах, а на панелях, то сделай им одинаковые ид-ры и напиши метод OnUpdateCmdUI где-нибудь в таком классе, который точно получит управление - документе, виде, фрейме, ... где логичнее в общем. Далее, эти слайдеры должны управлять каким-то глобально (или через документ) доступным свойством. И неважно, кто его установит - один из слайдеров или кто-то третий. Можно даже написать для этого конкретного слайдера свой класс и повесить OnUpdateCmdUI ему на REFLECT. И тогда хоть 10 слайдеров заведи - все будут работать как один. Это примерно тот же механизм, который применяется для обновления кнопок, пунктов меню и прочего... |