Здравствуйте, Nikto, Вы писали:
N>Здравствуйте, algol, Вы писали:
A>>Здравствуйте, Nikto, Вы писали:
N>>>>>Как задисейблить пункт меню?
ЮБ>>>>ЮБ>>>> BEGIN_UPDATE_UI_MAP(CMainFrame)
ЮБ>>>> UPDATE_ELEMENT(ID_FOO, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
ЮБ>>>>
ЮБ>>>>ЮБ>>>>BOOL CMainFrame::OnIdle()
ЮБ>>>>{
ЮБ>>>> UIEnable(ID_FOO, m_bFoo);
ЮБ>>>>
N>>>То что надо, только почему-то для ToolBar'а это не работает...
A>>Добавь еще UIUpdateToolBar().
N>Стоит. Может дело в том, что я UIEnable не в OnIdle пишу?
зашибись, кто ж так делает....
общий алгоритм действий такой, сначала объявляешь карту для ВСЕХ ID с которыми ты хочешь работать, т.е.
BEGIN_UPDATE_UI_MAP(CMainFrame)
UPDATE_ELEMENT(ID_FOO1, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FOO2, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_FOO3, UPDUI_MENUPOPUP | ... | ... )
END_UPDATE_UI_MAP()
смотрим в atlframe.h :
UPDUI_MENUPOPUP = 0x0001,
UPDUI_MENUBAR = 0x0002,
UPDUI_CHILDWINDOW = 0x0004,
UPDUI_TOOLBAR = 0x0008,
UPDUI_STATUSBAR = 0x0010,
ключи для разных элементов интерфейса, т.е. ID_FOO2 будет обновляться в меню и в тулбаре.
затем добавлем обработчик:
virtual BOOL OnIdle()
{
UIUpdateToolBar();
UIUpdateStatusBar();
UIUpdateMenuBar();
return FALSE;
}
чтобы обновлялось соответственно в меню, тулбаре и статусбаре.
теперь в любой функции CMainFrame можно вызвать UIEnable или другие команды