| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CToolBar блокировка одной кнопки |
| Автор: SmarTi 22.7.2006, 00:51 |
| Доброго времени суток! Подскажите пожалуйста, как сделать неактивной одну из кнопок тулбара. |
| Автор: Dray 22.7.2006, 01:12 | ||
| Обрабатывать сообщение UPDATE_COMMAND_UI. В обработчике писать:
|
| Автор: SmarTi 22.7.2006, 01:33 |
| Извените за мою тупость, но из этих строчек я почти ничего не понял... можно подробнее обьяснить ? или указать где можно об этом прочитать. |
| Автор: Dray 22.7.2006, 02:04 |
| Обычно кнопка на тулбаре связанна с пунктом меню. Если это не так то тут сложней. Если связана, то нужно задисэблить пункт меню, тогда кнопка задисэблица вместе с ним. Делается так: 1) По нужному пункту меню в редакторе ресурсов нужно щелкнуть правой кнопкой и выбрать Add Event Handler... 2) В списке Message type выбрать UPDATE_COMMAND_UI, в списке Class list нужный класс. 3) Нажать кнопку Add end Edit. 4) Внутри появившейся функции написать pCmdUI->Enable (FALSE); Тогда пункт меню будет все время недоступным, а кнопка вместе с ним. Добавлено @ 02:06 В поисковиках если набрать UPDATE_COMMAND_UI находится много полезных ссылок по теме. |
| Автор: SmarTi 23.7.2006, 16:44 | ||||
Этот метод у меня почемуто не работает
А вот если зделать так :
То пункт меню действительно становится серым. Но моей проблемы это нерешает, так как кнопка на ToolBar не реагирует на это вообще, хотя и имеет тот же ID_FIZ. Что может быть не так ? |
| Автор: Любитель 23.7.2006, 20:33 |
| Насчёт первого кода - в месседж-мепе у тебя прописана эта функция макросом ON_UPDATE_COMMAND_UI? Насчёт второго - бред. MFC заботится о всех командах (и меню, и тулбары) в приложениях не на базе диалога (т. е. юзаем OnUpdateComandUi). В диалоговых приложениях используй методы твоего тулбара. Создавал-то ты его как? |
| Автор: SmarTi 24.7.2006, 16:42 | ||||||
Прописана.
Это диалоговое приложение. Насколько я понял, вся проблема в том что я использовал класс CToolBar :
А вот в классе CToolBarCtrl есть функции по нажатию и отжатию кнопки. Но у меня не получается его создать. Видимо чтото делаю не так. Поэтому покачто я просто задал необходимым кнопкам на тулбаре свойство CHECKBOX и делаю им SetChek при нажатии. |
| Автор: Coocky 24.7.2006, 16:45 |
| Есть поиск Я прекрасно описывал работу Тулбара в диалоге и в документе/представлении они отличаются. Отличается и классы для работы. и метода создания. Там где-то даже есть пример, как создать много мого тулбаров на диалоге |
| Автор: Earnest 24.7.2006, 17:17 |
| Чтобы в модальном диалоге заработала асинхронные обновления (т.е. вызывались обработчики OnUpdateXXX), нужно: 1) добавить обработчик сообщения WM_KICKIDLE (это сообщение из afxpriv.h) 2) В этом обработчике вызвать UpdateDialogControls (this, false) (можно и True - это параметр DisbaleIfNoHandler) Добавлено @ 17:20 А у объекта ToolBar вызвать метод OnUpdateCmdUI (this, false) |
| Автор: SmarTi 25.7.2006, 00:56 |
| Всем огромное спасибо. Разобрался |