Про меню
От: Nikto Россия  
Дата: 09.10.03 09:57
Оценка:
WTL,SDI приложение.
Меню цепляется к CCommandBarCtrl обычным образом:

m_CmdBar.AttachMenu(GetMenu());
SetMenu(NULL);


Как задисейблить пункт меню?
Re: Про меню
От: Юнусов Булат Россия  
Дата: 09.10.03 10:10
Оценка: 9 (1)
Здравствуйте, Nikto, Вы писали:

N>Как задисейблить пункт меню?


    BEGIN_UPDATE_UI_MAP(CMainFrame)
        UPDATE_ELEMENT(ID_FOO, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)


BOOL CMainFrame::OnIdle()
{
    UIEnable(ID_FOO, m_bFoo);
Re[2]: Про меню
От: Nikto Россия  
Дата: 09.10.03 10:35
Оценка:
Здравствуйте, Юнусов Булат, Вы писали:

ЮБ>Здравствуйте, Nikto, Вы писали:


N>>Как задисейблить пункт меню?


ЮБ>
ЮБ>    BEGIN_UPDATE_UI_MAP(CMainFrame)
ЮБ>        UPDATE_ELEMENT(ID_FOO, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)

ЮБ>


ЮБ>
ЮБ>BOOL CMainFrame::OnIdle()
ЮБ>{
ЮБ>    UIEnable(ID_FOO, m_bFoo);
ЮБ>


То что надо, только почему-то для ToolBar'а это не работает...
Re[3]: Про меню
От: algol Россия about:blank
Дата: 09.10.03 11:16
Оценка:
Здравствуйте, 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'а это не работает...


Добавь еще UIUpdateToolBar().
Re[4]: Про меню
От: Nikto Россия  
Дата: 09.10.03 11:23
Оценка:
Здравствуйте, 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().


Стоит. Может дело в том, что я UIEnable не в OnIdle пишу?
Re[3]: Про меню
От: algol Россия about:blank
Дата: 09.10.03 11:24
Оценка:
Здравствуйте, Nikto, Вы писали:

N>>>Как задисейблить пункт меню?


ЮБ>>
ЮБ>>    BEGIN_UPDATE_UI_MAP(CMainFrame)
ЮБ>>        UPDATE_ELEMENT(ID_FOO, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)

ЮБ>>[ccode]
ЮБ>>BOOL CMainFrame::OnIdle()
ЮБ>>{
ЮБ>>    UIEnable(ID_FOO, m_bFoo);
ЮБ>>


N>То что надо, только почему-то для ToolBar'а это не работает...


Да, еще после создания тулбара нужно вызвать UIAddToolBar(hWndToolBar).
Re[4]: Про меню
От: Nikto Россия  
Дата: 09.10.03 11:28
Оценка:
Здравствуйте, algol, Вы писали:

A>Здравствуйте, Nikto, Вы писали:



N>>То что надо, только почему-то для ToolBar'а это не работает...


A>Да, еще после создания тулбара нужно вызвать UIAddToolBar(hWndToolBar).


AddSimpleReBarBand не пойдет?
Re[5]: Про меню
От: algol Россия about:blank
Дата: 09.10.03 11:34
Оценка: 9 (1)
Здравствуйте, Nikto, Вы писали:

A>>Да, еще после создания тулбара нужно вызвать UIAddToolBar(hWndToolBar).


N>AddSimpleReBarBand не пойдет?


Нет, UIAddToolBar(hWndToolBar) добавляет тулбар в список обновляемых контролов. Иначе он не будет реагировать на UIEnable().
Re: Про меню
От: Brun  
Дата: 07.10.08 08:37
Оценка:
Здравствуйте, Nikto, Вы писали:

N>Как задисейблить пункт меню?


Очень просто сначала:

    BEGIN_UPDATE_UI_MAP( Ваш_класс_окна )
        UPDATE_ELEMENT(ID_пункта_меню,    UPDUI_MENUPOPUP)
    END_UPDATE_UI_MAP()


затем в класс окна:

    BOOL OnIdle()
    {
        UIUpdateMenuBar();

        return FALSE;
    }


и еще не забыть добавить вродителей окна public CUpdateUI< Ваш_класс_окна >
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 или другие команды
Re[6]: Про меню
От: Nikto Россия  
Дата: 10.10.08 08:16
Оценка:
Здравствуйте, Brun, Вы писали:


B>зашибись, кто ж так делает....


B>общий алгоритм действий такой, сначала объявляешь карту для ВСЕХ ID с которыми ты хочешь работать, т.е.

B>чтобы обновлялось соответственно в меню, тулбаре и статусбаре.

B>теперь в любой функции CMainFrame можно вызвать UIEnable или другие команды


Достаточно забавная получается ситуация. Я получаю ответы на вопросы, в которых я уже мало того что разобрался лучше (вероятнее всего ), чем человек который на них отвечает, так я уже больше 2-х лет работаю совершенно в другой отрасли . Все это потому, что тема 2003 года... Прошло всего-лишь пять лет .

P.S.: никого не хотел обидеть .
Re[7]: Про меню
От: Brun  
Дата: 10.10.08 14:48
Оценка:
Здравствуйте, Nikto, Вы писали:

N>Здравствуйте, Brun, Вы писали:



B>>зашибись, кто ж так делает....


B>>общий алгоритм действий такой, сначала объявляешь карту для ВСЕХ ID с которыми ты хочешь работать, т.е.

B>>чтобы обновлялось соответственно в меню, тулбаре и статусбаре.

B>>теперь в любой функции CMainFrame можно вызвать UIEnable или другие команды


N>Достаточно забавная получается ситуация. Я получаю ответы на вопросы, в которых я уже мало того что разобрался лучше (вероятнее всего ), чем человек который на них отвечает, так я уже больше 2-х лет работаю совершенно в другой отрасли . Все это потому, что тема 2003 года... Прошло всего-лишь пять лет .


N>P.S.: никого не хотел обидеть


супер! ну зато если у кого нибудь возникнет вопросы по теме он сможет их тут найти...
честно говоря не просто обратил внимания на дату сообщения да и двигало мною по больше частью то, что если я сейчас отвечу на чей нибудь вопрос по WTL то и мне кто нить поможет в нём разобраться... жуть использовать то, что имеет меньше доки чем MFC, но обладает значительно большими возможностями...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.