2015-02-20 2 views
0

У меня есть устаревшее приложение C++ MFC с сложным графическим интерфейсом с лентами. У меня есть случай использования следующим образом: Пользователь нажимает кнопку A на панели ленты и выполняет некоторую работу. После того, как его работа будет завершена, прежде чем он сможет использовать остальные элементы управления графическим интерфейсом, он абсолютно должен нажать кнопку B на той же панели ленты, и при неспособности нажать кнопку B таким образом приведет к сбою, если пользователь выполнит некоторые другие элементы управления.MFC - Деактивировать все кнопки, кроме одного

Следовательно, для того, чтобы справиться с этим вариантом использования, я решил, что это решит мою проблему, если я смогу отключить все элементы управления GUI программы в обработчике событий Button A, кроме кнопки B. Затем обработчик событий B, Элементы управления графическим интерфейсом. Таким образом, я гарантирую, что кнопка B всегда нажимается после кнопки A.

Следовательно, мой вопрос к вам заключается в следующем: существует ли способ отключить все элементы управления графическим интерфейсом одним махом, а затем включать и отключать элементы управления индивидуально ?

Я знаю, как включать или отключать элементы управления отдельно, но я еще не сталкивался с API, который позволяет отключить все элементы управления.

+4

_failing для нажатия кнопки B таким образом приводит к сбою_ - Не лучше ли было бы решить, что вызывает крушение, а не игнорировать его? – rrirower

+0

Что делать, если пользователь вызывает ту же команду через элемент меню или через ярлык? Используйте 'OnCmdUI' для отключения команды _every_, которая не подходит; он также отключит кнопки ленты. Примечание: «подходит»; вы все равно должны исправить «сбой». –

ответ

1

Таким образом, вы получите все идентификаторы кнопок ленты:

CList<UINT, UINT>& lstItems; 
CMFCRibbonBar *pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar(); 
pRibbon->GetItemIDsList(lstItems); 

Поместите три строки в OnInitialUpdate() обработчика вашего вида.

Затем используйте список для сравнения идентификаторов, проходящих через ваш обработчик OnCmdMsg(), чтобы отключить все кнопки (кроме кнопки B).

Смежные вопросы