Winapi 在对话框中,当在编辑控件中按enter键时,如何阻止默认按钮对焦?

Winapi 在对话框中,当在编辑控件中按enter键时,如何阻止默认按钮对焦?,winapi,user-interface,button,focus,editcontrol,Winapi,User Interface,Button,Focus,Editcontrol,Win32/C++。我有一个多行编辑控件和一个按钮,我用DM_setdefind将其设置为默认值。当我在编辑时按enter键,焦点保持在那里,而不是移动到按钮。编辑控件必须将行为更改为所需: 指定在用户按下时插入回车符 在将文本输入到中的多行编辑控件时输入键 对话框。如果未指定此样式,请按ENTER键 与按对话框的默认按钮具有相同的效果。 此样式对单行编辑控件没有影响 要在创建控件后更改此样式,请使用 SetWindowLong 我应该说得更清楚些。我确实希望enter键触发默认按钮,但我希望焦

Win32/C++。我有一个多行编辑控件和一个按钮,我用
DM_setdefind
将其设置为默认值。当我在编辑时按enter键,焦点保持在那里,而不是移动到按钮。

编辑控件必须将行为更改为所需:

指定在用户按下时插入回车符 在将文本输入到中的多行编辑控件时输入键 对话框。如果未指定此样式,请按ENTER键 与按对话框的默认按钮具有相同的效果。 此样式对单行编辑控件没有影响

要在创建控件后更改此样式,请使用 SetWindowLong


我应该说得更清楚些。我确实希望enter键触发默认按钮,但我希望焦点保持在编辑控件上(而不是插入换行符)。这样您就不需要使用
ES\u WANTRETURN
样式,否则它将被该控件吃掉,对吗?你通过它,让默认的焦点转移并触发按钮。现在您已经点击了通知,您可以处理它。这是您处理通知的机会,然后通过使用
SetFocus
将焦点转移到编辑控件来完成此任务。如果您有多个编辑控件,并且希望将焦点返回到按钮之前的控件,事情会变得更加棘手。然后,您可能需要收听
EN_KILLFOCUS
通知,并记住单击按钮之前的最后一个通知。或者,您可以对按钮控件进行子类化,并处理其
WM_SETFOCUS
,以查看控件焦点从哪个控件移动到按钮。或者,可能会有额外的对话框消息,可用于使用Spy++工具查看和利用的目的。谢谢。Spy++显示编辑正在返回
DLGC_HASSETSEL | DLGC_WANTARROWS | DLGC_WANTCHARS | DLGC_WANTALLKEYS
以响应
WM_GETDLGCODE
消息。经过一些实验,我发现将编辑和返回的
DLGC_HASSETSEL | DLGC_WANTARROWS | DLGC_WANTCHARS
子类化首先会阻止按钮聚焦。