Как сделать изменение состояния Check в меню, из диалога/другого класса?
Подскажите как из другого диалога изменить состояние одного пункта меню (и соотв. кнопки на панели инструментов ) MF_CHECKED->MF_UNCHECKED?
Делаю так:
CMenu* pSubMenu = pMenu->GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_LOG_TR, MF_UNCHECKED);
Но ничего не происходит...
Привет!
Подскажите как из другого диалога изменить состояние одного пункта меню (и соотв. кнопки на панели инструментов ) MF_CHECKED->MF_UNCHECKED?
Делаю так:
Код:
CMenu* pSubMenu = pMenu->GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_LOG_TR, MF_UNCHECKED);
Но ничего не происходит...
[/QUOTE]
Ошибка скорее всего здесь
Если хотите использовать этот способ, то в вашем MESSAGE MAP'е (в классе окна "хозяина" меню) должна быть строка что-то вроде этой
А функция OnUpdateLogTR будет представлять из себя следующее
afx_msg void OnUpdateLogTR(CCmdUI *pCmdUI);
................................................................
void CMyClass::OnUpdateLogTR(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(bNeedCheck);
}
Ну и соотвественно обработчик щелчка по этому пункту меню будет выглядеть приблизительно так
{
( m_bLogActive ) ? ( pCmdUI->SetCheck(1) ) : ( pCmdUI->SetCheck(0) ) ;
}
Но так я могу только сделать в классе который обрабатывает этот пункт меню, a как сделать это из другого класса???
Вызвать эту функцию напрямую не получится... или я ошибаюсь? Если да то поправьте.
{
( m_bLogActive ) ? ( pCmdUI->SetCheck(1) ) : ( pCmdUI->SetCheck(0) ) ;
}
Но так я могу только сделать в классе который обрабатывает этот пункт меню, a как сделать это из другого класса???
Вызвать эту функцию напрямую не получится... или я ошибаюсь? Если да то поправьте.
Этот обработчик вызывается каждый раз, когда необходимо обновить меню. Т.е. обычно при открытии меню. Так что, если вы дадите доступ к переменной m_bLogActive другому классу и в этом другом классе будете изменять ее значение, то эти изменения отразятся и на пункте меню.
Или я вас не понял или вы меня :)
Т.е. вы имеете в виду, что когда пользователь снимет(поставит) флажок с пункта меню в другом классе должно что-то призойти?
Опишите поподробней, в чем собственно заключается задача.
пользователь нажимает в панели инструментов кнопку "Лог" (в меню такой же пункт с одинаковым идентификатором, типа галочки перед "Строка состояния" в меню Вид) и она становится "checked" () т.е. как бы нажатой. Откравается диалоговое окно другого класса, для выбора настроек, но пользователь передумал и нажал на кнопку в диалоге: закрыть. Теперь мне нужно вернуть состояние кнопки "Лог" в состояние "unchecked" прежде чем закрыть диалог. В классе где обрабатывается нажатие кнопки "Лог" делается элементарно при помощи
CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI) проверкой состояния переменной m_bLogActive в TRUE или FALSE.
Как выполнить OnUpdateLogTmp в чужом классе? Или как нибудь по другому перевести в состояние unchecked?
пользователь нажимает в панели инструментов кнопку "Лог" (в меню такой же пункт с одинаковым идентификатором, типа галочки перед "Строка состояния" в меню Вид) и она становится "checked" () т.е. как бы нажатой. Откравается диалоговое окно другого класса, для выбора настроек, но пользователь передумал и нажал на кнопку в диалоге: закрыть. Теперь мне нужно вернуть состояние кнопки "Лог" в состояние "unchecked" прежде чем закрыть диалог. В классе где обрабатывается нажатие кнопки "Лог" делается элементарно при помощи
CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI) проверкой состояния переменной m_bLogActive в TRUE или FALSE.
Как выполнить OnUpdateLogTmp в чужом классе? Или как нибудь по другому перевести в состояние unchecked?
Ну тогда я не понял в чем собственно проблема. Функцию CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI) самому вызывать не надо. Просто проверяете результат выполнения диалога, и если он отрицательный, тогда выставляете m_bLogActive в FALSE. CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI) будет вызван при первой же попытке открыть меню (ну и конечно при всех последующих) и согласует состояние элемента меню с переменной m_bLogActive. Вот и все.
К примеру все прошло ОК, пользователь все выбрал все запустил, лог идет, но происходит ошибка при записи данных в файл. Я отлавливаю эту ошибку через try/catch и мне теперь нужно вернуть в состояние unchecked кнопку "Лог"...
К примеру все прошло ОК, пользователь все выбрал все запустил, лог идет, но происходит ошибка при записи данных в файл. Я отлавливаю эту ошибку через try/catch и мне теперь нужно вернуть в состояние unchecked кнопку "Лог"...
Присвойте члену первого класса m_bLogActive значение false из любого метода второго класса и кнопка "Лог" вернется в состояние unchecked