MFC - 停用除一个以外的所有按钮
Posted
技术标签:
【中文标题】MFC - 停用除一个以外的所有按钮【英文标题】:MFC - Deactivating all buttons except one 【发布时间】:2015-02-20 18:21:43 【问题描述】:我有一个带有功能区的复杂 GUI 的旧版 C++ MFC 应用程序。我有一个用例如下:用户单击功能区面板上的按钮 A 并执行一些工作。在他的工作完成之后,在他可以使用其余的 GUI 控件之前,他绝对必须单击同一个功能区面板上的按钮 B,如果用户使用其他控件,没有以这种方式单击按钮 B 会导致崩溃。
因此,为了处理这个用例,我认为如果我可以禁用按钮 A 的事件处理程序中除按钮 B 之外的所有程序的 GUI 控件,这将解决我的问题。然后按钮 B 的事件处理程序启用其余的 GUI控制。这样,我确保按钮 B 总是在按钮 A 之后被按下。
因此,我的问题如下:有没有办法一举禁用所有 GUI 控件,然后单独启用和禁用控件?
我知道如何单独启用或禁用控件,但我还没有遇到允许禁用所有控件的 API。
【问题讨论】:
未能以这种方式单击按钮 B 会导致崩溃 - 解决导致崩溃的原因而不是忽略它不是更好吗? 如果用户通过菜单项或快捷方式调用相同的命令怎么办?使用OnCmdUI
禁用不合适的every 命令;它也会禁用功能区按钮。注:“适当”;您仍然应该修复“崩溃”。
【参考方案1】:
这样,您可以获得功能区按钮的所有 ID:
CList<UINT, UINT>& lstItems;
CMFCRibbonBar *pRibbon = ((CMDIFrameWndEx*) AfxGetMainWnd())->GetRibbonBar();
pRibbon->GetItemIDsList(lstItems);
将这三行放在视图的OnInitialUpdate()
处理程序中。
然后使用该列表比较通过您的 OnCmdMsg()
处理程序的 ID 以禁用所有按钮(按钮 B 除外)。
【讨论】:
以上是关于MFC - 停用除一个以外的所有按钮的主要内容,如果未能解决你的问题,请参考以下文章