Сообщение Re[3]: CMFCToolBar button от 01.12.2014 12:05
Изменено 01.12.2014 12:09 AlexGin
Здравствуйте, 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_>то, что это не работает
Может попробовать так:
Дело в том, что объект CMFCToolBarButton — это наследник CObject
http://msdn.microsoft.com/en-us/library/bb983678.aspx
Поэтому — приходится извращаться...
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
http://msdn.microsoft.com/en-us/library/bb983678.aspx
Поэтому — приходится извращаться...
Re[3]: CMFCToolBar button
Здравствуйте, 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_>то, что это не работает
Может попробовать так:
Дело в том, что объект CMFCToolBarButton — это наследник CObject, а не CWnd.
То есть — вызов EnableWindow(FALSE/TRUE) тут не пройдет
http://msdn.microsoft.com/en-us/library/bb983678.aspx
Поэтому — приходится извращаться...
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
Поэтому — приходится извращаться...