Re[3]: CMFCToolBar button
От: AlexGin Беларусь  
Дата: 01.12.14 12:05
Оценка:
Здравствуйте, Alex_st, Вы писали:

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



AG>>1) В чем проблема применения ON_UPDATE_COMMAND_UI(..., ...)?

A_>в том, что мне нужно апдейтить кнопки по моим событиям, а не тогда когда решит винда, что можно это сделать. к тому же переписывать кучу лигики приложения на ON_UPDATE_COMMAND_UI слишком затратно
Винда работает достаточно точно и оперативно , посему проблемы в этом не должно быть.

AG>>2) Что мешает вызвать CMFCToolBar::GetAllButtons(); — этот вызов заполнит коллекцию кнопок CObList — а в ней уже находить нужную кнопку (объект типа CMFCToolBarButton) и для нее вызывать EnableWindow(FALSE/TRUE)?

A_>то, что это не работает
Может попробовать так:
    POSITION pos;
    const CObList& list = m_wndToolBar.GetAllButtons();
    int i = 0;
    for(pos = list.GetHeadPosition(); pos != NULL; i++)
    {
        CMFCToolBarButton* pBtn = DYNAMIC_DOWNCAST(CMFCToolBarButton, list.GetNext(pos));
        if (pBtn)
        {
            pBtn->Show(TRUE);
            pBtn->SetImage(i); // Set image (or disabled image)
        }
    }
    m_wndToolBar.Invalidate();

Дело в том, что объект CMFCToolBarButton — это наследник CObject, а не CWnd.
То есть — вызов EnableWindow(FALSE/TRUE) тут не пройдет

http://msdn.microsoft.com/en-us/library/bb983678.aspx

Поэтому — приходится извращаться...
Отредактировано 01.12.2014 12:09 AlexGin . Предыдущая версия . Еще …
Отредактировано 01.12.2014 12:06 AlexGin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.