按 Esc 关闭任务对话框
Posted
技术标签:
【中文标题】按 Esc 关闭任务对话框【英文标题】:Dismissing a TaskDialog by pressing Esc 【发布时间】:2019-06-26 15:58:00 【问题描述】:在我维护的软件中,我计划将旧的 MessageBox
替换为 TaskDialog
,正如 Microsoft UI 指导方针在很久以前所建议的那样。
我需要解决的主要问题如下:
通过MessageBox(... ,MB_OK)
调用的旧消息框(因此只包含一个确定按钮)可以通过按 Esc 键来关闭。
但是不能通过按 Esc 来关闭仅包含 OK 按钮的 TaskDialog
。这可能会对用户体验产生负面影响。
我尝试通过pfCallback
字段使用TaskDialogIndirect
,但如果任务对话框中没有取消按钮,回调函数甚至不会被调用。
有什么想法可以让 Esc 关闭这样的任务对话框吗?
【问题讨论】:
这有点道理。如果对话框没有取消按钮,那么 ESC 为什么要起作用。不就是加个取消按钮的解决方案吗? @DavidHeffernan 是的,确实有效!如果任务对话框中只有一个 Cancel 按钮,则 Esc and Enter 关闭对话框,这正是我想要的。我唯一需要做的就是将取消按钮标记为“确定”而不是使用TaskDialogIndirect
很容易的“取消”。你拯救了我的一天。
这听起来是个糟糕的主意。取消意味着您正在退出某个操作并撤消/不执行它。 ESC 调用取消。 ESC 不应调用标记为 OK 的按钮。也许这是您在应用程序对话框中更正用户体验的机会。
@DavidHeffernan 我认为您误解了评论。如果我用文本“OK”标记IDCANCEL
按钮,那么用户只会看到一种带有一个OK 按钮的消息框。然后他只需按 Esc 或 Enter(就像旧的 MessageBox 一样),对话框就会消失。仅当任务对话框中有一个确定按钮时,我才会使用此 hack。正如我之前提到的,包含单个 OK 按钮的旧 MessageBox
可以通过 Enter 和 Esc 关闭。
不,有 1000 名用户不习惯在显示“确定”按钮并按下 Esc 时关闭任务对话框。如果它以这种方式工作,你就不需要问这个关于如何破坏对话框的设计行为的问题。
【参考方案1】:
TASKDIALOGCONFIG
结构的 MSDN 文档对TDF_ALLOW_DIALOG_CANCELLATION
标志(dwFlags
成员)进行了如下说明:
表示即使在 dwCommonButtons 或 pButtons 成员。
此标志还为对话框提供了一个系统菜单(Alt+Space),因此您也可以通过按 Alt+Space 和系统菜单的“关闭”项中的下划线字符来关闭它。
【讨论】:
以上是关于按 Esc 关闭任务对话框的主要内容,如果未能解决你的问题,请参考以下文章