Как сделать изменение состояния checked в меню?
От: Logik  
Дата: 06.09.08 08:51
Оценка:
Привет!
Подскажите как из другого класса/диалога изменить состояние (вкл./выкл. "галочку") одного пункта меню (и соотв. кнопки на панели инструментов ) 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);

Но ничего не происходит... Что я делаю не правильно?
Re: Как сделать изменение состояния checked в меню?
От: spring  
Дата: 08.09.08 13:05
Оценка:
Здравствуйте, 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;
Re: Как сделать изменение состояния checked в меню?
От: TEN Россия  
Дата: 08.09.08 13:39
Оценка:
Изменять m_bLogActive
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.