2
Win32/C++。我有一个多行编辑控件和一个按钮,我使用DM_SETDEFID
进行了默认设置。当我着重于编辑时,我想让焦点停留在那里,而不是移动到按钮。在对话框中,当按下编辑控件中的Enter时,如何停止默认按钮的焦点?
Win32/C++。我有一个多行编辑控件和一个按钮,我使用DM_SETDEFID
进行了默认设置。当我着重于编辑时,我想让焦点停留在那里,而不是移动到按钮。在对话框中,当按下编辑控件中的Enter时,如何停止默认按钮的焦点?
编辑控件应该有ES_WANTRETURN
style改变自己的行为,以期望:
指定当用户按下 ENTER键,而在 对话框中输入文本多行编辑控件回车插入。如果您不指定此样式,按ENTER键 与按下对话框的默认按钮具有相同的效果。 此样式对单行编辑控件没有影响。
要在创建控件后更改此样式,请使用 SetWindowLong。
我应该更清楚。我确实希望输入键可以触发默认按钮,但我希望将焦点留在编辑控件中(并且不要插入换行符)。 – user1299863 2012-03-29 18:01:34
然后,你不需要'ES_WANTRETURN'风格,否则它会被控制权吃掉,对吗?你传递它,让默认值转移焦点并触发按钮。现在你已经调用了'BN_CLICKED'通知并且处理它。这是您处理通知的工作机会,然后通过使用'SetFocus'将焦点转移到您的编辑控件来完成它。 – 2012-03-29 19:03:43
如果您有几个编辑控件,并且您想要将焦点返回到按钮之前的焦点,那么情况会变得更加复杂。然后,您可能想要听取'EN_KILLFOCUS'通知并记住按钮单击之前的最后一个通知。或者,您可以对按钮控件进行子类化并处理其“WM_SETFOCUS”,以查看从按钮到哪个控件焦点。或者,可能会有其他对话框消息对您可以使用Spy ++工具看到的目的有用并利用。 – 2012-03-29 19:06:14