Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Изменение состояния кнопок в ToolBar_e


Автор: Coocky 19.8.2004, 23:34
Не могу поменять состояние кнопок.(CToolBarCtrl())....Изменяется нормально только CheckButton().А кнопка стает активной,только когда Добавляешь обработчик COMMAND(нажатие).(при появлении окна она неактивна...)Короче...(CToolBarCtrl()).Enable(....) не отрабатывает ни FALSE,ни TRUE...Почему?Может есть другой способ?(Заполнение струтуры кнопки не предлагать!).

Автор: Coocky 20.8.2004, 16:41
Прочитал,что каждой кнопке должен соответствовать пункт меню.Не помогает...Приложение SDI...

Автор: Coocky 20.8.2004, 16:51
Неужели у всех все получается biggrin.gif

Автор: AndyY 20.8.2004, 17:03
все это потому что mfc написана через задницу.
1. окно класса CToolbarCtrl не обновляется через механизм обработчиков UpdateCmdUI
тебе нужно делать обычный CToolbar, а у него есть метод получения СToolbarCrtrl

2. Нужно создать обработчик команды и состояния:
(в мессадж мапеsmile.gif
ON_COMMAND(ID_GROUP, OnGroup)
ON_UPDATE_COMMAND_UI(ID_GROUP, OnUpdateGroup)
(в классе)
void CMyClass::OnCommand()
{
AfxMessageBox( "It's work!");
}

void CMyClass::OnUpdateCmdUI(CCmdUI*pCmdUI )
{
pCmdUI->Endble( чтобы включить или выключить);
pCmdUI->SetCheck( чтобы поставить или снять чек);
}

в меню или в толбаре кнопка-команда - пофигу.
обработчик OnUpdate* должен исполняться достаточно быстро, поскольку вызывается в цикле сообщений между обычными сообщениями.



Автор: Nastya 20.8.2004, 17:04
Я как-то в этом форуме спрашивала про ДиалогБарыи инеактивность кнопок, если у них нет обработчика.
Так вот, мне посоветовали (работатет) у MainFrame перехватитьт ON_COMMAND_UPDATE (для кнопки) или ON_COMMAND_UPDATE_RANGE (для группы кнопак). И для параметра, который этот обработчик полычает, тип его я сейчас на вспомню sad.gif ) вызывать метод Enabled.
Я правильно поняла проблему?
Добавлено @ 17:06
Вот опять ответили одновременно smile.gif

Автор: Coocky 31.8.2004, 13:00
Код
void CMyClass::OnUpdateCmdUI(CCmdUI*pCmdUI )
{
pCmdUI->Endble( чтобы включить или выключить);
pCmdUI->SetCheck( чтобы поставить или снять чек);
}

Да я уже разобрался.Только вот проблема:pCmdUI указатель на нажатую кнопку smile.gif
А как сделать,что б другая кнопка стала,например,активной wink.gif В этом коде не получится sad.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)