我有一个传统的C ++ MFC应用程序,带有一个带有Ribbon的复杂GUI。我有一个用例如下:用户单击功能区面板上的按钮A并执行一些操作。完成工作之后,在他可以执行其余的GUI控件之前,他绝对必须单击同一功能区面板上的按钮B,如果用户执行其他控件,则无法以这种方式单击按钮B会导致崩溃。
因此,为了处理这个用例,我认为如果我可以禁用Button A的事件处理程序中除按钮B之外的所有程序的GUI控件,它将解决我的问题。按钮B的事件处理程序然后启用GUI的其余部分控制。这样,我确保在按钮A后按下按钮B。
因此,我的问题如下:有没有办法一下子禁用所有GUI控件,然后单独启用和禁用控件?
我知道如何单独启用或禁用控件,但我还没有遇到允许禁用所有控件的API。
答案 0 :(得分:1)
这样,您就可以获得功能区按钮的所有ID:
CList<UINT, UINT>& lstItems;
CMFCRibbonBar *pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
pRibbon->GetItemIDsList(lstItems);
将三行放在视图的OnInitialUpdate()
处理程序中。
然后使用列表比较通过OnCmdMsg()
处理程序的ID来禁用所有按钮(按钮B除外)。