Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CToolBar блокировка одной кнопки, Как реализовать ? 
V
    Опции темы
SmarTi
Дата 22.7.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Доброго времени суток! Подскажите пожалуйста, как сделать неактивной одну из кнопок тулбара. 
PM MAIL   Вверх
Dray
Дата 22.7.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

Репутация: 2
Всего: 6



Обрабатывать сообщение UPDATE_COMMAND_UI.
В обработчике писать:
Код
pCmdUI->Enable (FALSE);
 


--------------------
忍者

user posted image
PM MAIL   Вверх
SmarTi
Дата 22.7.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Извените за мою тупость, но из этих строчек я почти ничего не понял... можно подробнее обьяснить ? или указать где можно об этом прочитать. 
PM MAIL   Вверх
Dray
Дата 22.7.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

Репутация: 2
Всего: 6



Обычно кнопка на тулбаре связанна с пунктом меню. Если это не так то тут сложней. Если связана, то нужно задисэблить пункт меню, тогда кнопка задисэблица вместе с ним. Делается так:
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 находится много полезных ссылок по теме. 


--------------------
忍者

user posted image
PM MAIL   Вверх
SmarTi
Дата 23.7.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Этот метод у меня почемуто не работает  smile , вот код :
Код

void CTelBook8Dlg::OnUpdateFiz(CCmdUI *pCmdUI)
{
    pCmdUI->Enable(FALSE);
}

А вот если зделать так : 
Код

void CTelBook8Dlg::OnFiz()
{
    CMenu* cm=GetMenu();
    cm->EnableMenuItem(ID_FIZ,MF_GRAYED);
}

То пункт меню действительно становится серым. Но моей проблемы это нерешает, так как кнопка на ToolBar не реагирует на это вообще, хотя и имеет тот же ID_FIZ. Что может быть не так ?   

Это сообщение отредактировал(а) SmarTi - 23.7.2006, 16:44
PM MAIL   Вверх
Любитель
Дата 23.7.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 7
Всего: 92



Насчёт первого кода - в месседж-мепе у тебя прописана эта функция макросом ON_UPDATE_COMMAND_UI?

Насчёт второго - бред. MFC заботится о всех командах (и меню, и тулбары) в приложениях не на базе диалога (т. е. юзаем OnUpdateComandUi). В диалоговых приложениях используй методы твоего тулбара. Создавал-то ты его как? 


--------------------
PM MAIL ICQ Skype   Вверх
SmarTi
Дата 24.7.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Цитата

Насчёт первого кода - в месседж-мепе у тебя прописана эта функция макросом ON_UPDATE_COMMAND_UI?

Прописана.
Цитата

Создавал-то ты его как?

Это диалоговое приложение. Насколько я понял, вся проблема в том что я использовал класс CToolBar :
Код

ToolBar.Create(this,WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_TOOLTIPS |  CBRS_FLYBY |  CBRS_BORDER_BOTTOM );
  ToolBar.LoadToolBar(IDR_TOOLBAR1);

А вот в классе CToolBarCtrl есть функции по нажатию и отжатию кнопки. Но у меня не получается его создать. Видимо чтото делаю не так. Поэтому покачто я просто задал необходимым кнопкам на тулбаре свойство CHECKBOX и делаю им SetChek при нажатии. 
PM MAIL   Вверх
Coocky
Дата 24.7.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Есть поиск smile 
Я прекрасно описывал работу Тулбара в диалоге и в документе/представлении они отличаются.
Отличается и классы для работы. и метода создания.
Там где-то даже есть пример, как создать много мого тулбаров на диалоге smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 24.7.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Чтобы в модальном диалоге заработала асинхронные обновления (т.е. вызывались обработчики OnUpdateXXX), нужно:
1) добавить обработчик сообщения WM_KICKIDLE (это сообщение из afxpriv.h)
2) В этом обработчике вызвать UpdateDialogControls (this, false) (можно и True - это параметр DisbaleIfNoHandler)

Добавлено @ 17:20 
А у объекта ToolBar вызвать метод OnUpdateCmdUI (this, false) 


--------------------
...
PM   Вверх
SmarTi
Дата 25.7.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



Всем огромное спасибо. Разобрался  smile  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.