Re[5]: Про меню
От: Brun  
Дата: 09.10.08 13:28
Оценка:
Здравствуйте, 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 или другие команды
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.