首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >return键为带焦点的按钮生成IDOK

return键为带焦点的按钮生成IDOK
EN

Stack Overflow用户
提问于 2013-04-15 00:27:57
回答 3查看 2.2K关注 0票数 1

我对对话框中的一个按钮执行了SetFocus。该按钮获取虚线轮廓。当用户按下return键时,对话框收到一条IDOK消息,而不是来自我设置焦点的按钮的消息。在其他情况下也会发生同样的事情。

为什么会发生这种情况?我怎样才能使return起到按钮按下的作用?

普通的c++ windows应用程序,没有MFC,没有NET。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-15 00:52:14

特性,而不是bug。Enter键操作被标记为对话框默认按钮的按钮。使用.rc文件中的DEFPUSHBUTTONBS_DEFPUSHBUTTON样式标志。这通常是"OK“按钮,所以让IDOK返回是预期的。key键在这方面也很特殊,通常是Cancel按钮。如果你回想一下你以前是如何使用对话框的,这一定会让你耳熟能详。

您可以通过按空格键来单击具有焦点的按钮。

票数 2
EN

Stack Overflow用户

发布于 2013-04-15 00:49:52

在另一个SO question中,我发现了可能对您有帮助的KB article

如果对话框或其中一个控件当前具有输入焦点,则按Enter键将使Window发送一条idItem (wParam)参数设置为默认命令按钮ID的WM_COMMAND消息。如果对话框没有默认的命令按钮,则默认情况下将idItem参数设置为IDOK。

当应用程序收到idItem设置为默认命令按钮ID的WM_COMMAND消息时,焦点将保留在按Enter键之前具有焦点的控件上。此时调用GetFocus()将返回在按Enter键之前具有焦点的控件的句柄。应用程序可以检查此控件句柄,并确定它是否属于对话框中的任何编辑控件。如果是,则用户正在向其中一个编辑控件中输入数据,然后按ENTER键。此时,应用程序可以将WM_NEXTDLGCTL消息发送到对话框,以将焦点移动到下一个控件。

票数 1
EN

Stack Overflow用户

发布于 2013-04-15 00:53:05

根据MSDN的说法,

对话框键盘界面

系统为对话框提供了一个特殊的键盘接口,该接口对几个键进行特殊处理。该界面生成与对话框中的某些按钮相对应的消息,或者将输入焦点从一个控件更改到另一个控件。以下是此界面中使用的键以及它们各自的操作。

..。

ENTER:将WM_COMMAND消息发送到对话框过程。wParam参数设置为IDOK或默认按钮的控件标识符。

由于系统会截获并处理直接通过对话框按下的ENTER键,因此您需要在对话框过程中进行处理,方法是调用GetFocus(),首先查看哪个控件具有焦点,然后对该特定控件执行适当的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16001366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档