按下回车按钮时如何使用 C++ Win32 API 调用按钮?

Posted

技术标签:

【中文标题】按下回车按钮时如何使用 C++ Win32 API 调用按钮?【英文标题】:How to invoke a button using C++ Win32 API when press the enter button? 【发布时间】:2012-10-22 08:54:28 【问题描述】:

我已经使用 c++ win32 API 创建了一个对话框... 有 3 个文本框、1 个组合框和 3 个按钮...

现在我有两个问题...

1.当我按下 ENTER 按钮时,它会调用第二个按钮(ID_OK)功能,但我想调用第一个按钮(ID_MYBUTTON)...

2.我正在使用代码来聚焦文本框,

SetFocus(GetDlgItem(_hwnd, IDC_NAME));

但它无法聚焦该对话框,我的意思是光标位置在那里,但无法获得任何值,当我输入时...

谁能解决?

【问题讨论】:

关于你的第一个问题,你可以让你的按钮成为默认的 ENTER 目标,而不是 OK 按钮。 仅此而已,我在问,如何制作? 它是对话框容器的一个属性:您可以设置“AcceptButton”和“CancelButton”属性来控制按下ENTER(接受)或ESC(取消)键的行为。 感谢 g-mak...我无法让您清楚...供您参考,我使用的是 c++ WIN32 API.not MFC。 匿名懦夫的回答似乎指向了正确的方向。 【参考方案1】:

这可能会回答您的两个问题: http://blogs.msdn.com/b/oldnewthing/archive/2004/08/02/205624.aspx:

使用 DM_SETDEFID 消息设置对话框中的默认按钮

使用 WM_NEXTDLGCTL 消息代替 SetFocus()

// set default button
SendMessage(_hwnd, DM_SETDEFID, (WPARAM)ID_MYBUTTON, 0);
//TODO: if the former default button's style remains, update with BM_SETSTYLE

// set focus
SendMessage(_hwnd, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(_hwnd, IDC_NAME), TRUE);

【讨论】:

@Coward...谢谢你...设置默认按钮工作正常...但是不能聚焦那个文本框......也不能聚焦那个对话框,bcz首先我按下回车按钮,不能什么都做,点击对话框后,只有默认按钮功能起作用……所以现在我想如何聚焦该对话框,然后是对话框中的文本框? 你用什么函数来创建对话框? DialogBoxIndirect()? 使用wlxDialogBoxParam()函数...启动系统时logondialogbox出现此问题。 不看代码很难判断;这可能是您的 DialogProc 中的问题。如果创建一个测试项目,直接在 WinMain 中调用 DialogBoxParam(),问题是否仍然存在? 经过一番谷歌搜索后,我发现 (1) 有同样问题的人 GINA logon dialog not in focus/active 和 (2) 可能的 solution 问题:在您的 _dialogProc 中,案例 WM_INITDIALOG 必须返回 TRUE (不是假的)。您可能必须添加 SetForegroundWindow(hwnd)。

以上是关于按下回车按钮时如何使用 C++ Win32 API 调用按钮?的主要内容,如果未能解决你的问题,请参考以下文章

Win32 API 打开新窗口

在井字游戏 C++ 中使用“新游戏”按钮,win32 应用程序初学者

C++ Win32 API 控制消息

如何获取 win32 c++ 应用程序中单选按钮的状态?

win32 c++ 在没有子类化的编辑控件中检测“输入”?

来自子控件的键盘消息