Привет!
Подскажите как из другого класса/диалога изменить состояние (вкл./выкл. "галочку") одного пункта меню (и соотв. кнопки на панели инструментов ) MF_CHECKED->MF_UNCHECKED?
В классе где обрабатывается пунк меню:
все прекрасно работает.
void CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI)
{
( m_bLogActive ) ? ( pCmdUI->SetCheck(1) ) : ( pCmdUI->SetCheck(0) ) ;
}
Делаю так в чужом классе:
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
CMenu* pSubMenu = pMenu->GetSubMenu(0);
pSubMenu->CheckMenuItem(ID_LOG_TR, MF_UNCHECKED);
Но ничего не происходит... Что я делаю не правильно?
Здравствуйте, Logik, Вы писали:
.. skip ..
Нужно из другого класса изменить m_bLogActive, т.к. CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI) вызывается в idle-е циклах окна. Т.е. в данном случае у вас состояние меню сразу-же изменяется.
Т.е. что-то наподобии:
class CMyDoc : public CDocument
{
// ...
public:
bool m_bLogActive;
};
void CLogView::OnUpdateLogTmp(CCmdUI *pCmdUI)
{
CMyDoc* pDoc( (CMyDoc*)GetDocument() );
pCmdUI->SetCheck( pDoc->m_bLogActive ? MF_CHECKED : MF_UNCHECKED );
}
// Где-то в другом классе:
CMyDoc* pDoc( (CMyDoc*)GetDocument() ); // или каким другим способом получить ссылку на документ
pDoc->m_bLogActive = false;