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 - 停用除一个以外的所有按钮的主要内容,如果未能解决你的问题,请参考以下文章

MFC:CMFCDropDownToolBar 除第一个按钮外的所有按钮均为空白

如何为 MFC 中的多个按钮编写一个消息处理程序?

如何禁用表单上除按钮之外的所有控件?

MFC点击按钮打开对话框选择文件夹(不是文件)

MFC点击按钮打开对话框选择文件夹(不是文件)

MFC按钮怎么设置为快捷键