【问题标题】:c++ winapi - subclassing an edit control - annoying sound when clicking "Enter"c ++ winapi - 子类化编辑控件 - 单击“Enter”时发出烦人的声音
【发布时间】:2014-04-25 14:51:28
【问题描述】:

当有人单击“Enter”时,我制作了一个能够接受数据的编辑控件。我使用子类化来做到这一点。它工作得几乎完美。但是点击“Enter”后,系统每次都会播放“Error”的声音。我尝试使用 ES_MULTILINE 和 ES_AUTOVSCROLL 绕过它,但它有部分帮助。现在点击“回车”后没有声音,但在文本框中出现了无用的“回车”字符,无法删除。 如何绕过系统声音?或者从该文本框中删除“Enter”字符(SetWindowText(handle, "") 没有帮助)。

【问题讨论】:

  • 你试过ES_WANTRETURN吗?
  • 它会发出哔哔声,因为在非多行的编辑控件中按 Enter 是没有意义的。 Enter 保留用于操作窗口的默认控件,如 OK 按钮。你为什么按无用的键?应该发生什么?
  • @nwp - ES_WANTREURN 没有改变任何东西。
  • @Hans Passant - 按无用的键是什么意思?我想以方便的方式确认数据,而不是使用鼠标单击按钮。
  • @HansPassant:我经常收到客户的请求,即按 Enter 键应该关注下一个编辑字段。特别是如果该程序要替换旧的文本模式数据输入应用程序。用户不关心 Windows UI 指南,他们希望按键序列保持不变,肌肉记忆等等。

标签: c++ winapi subclassing


【解决方案1】:

您不需要ES_MULTILINEES_AUTOVSCROLLES_WANTRETURN 样式标志。

要阻止单行编辑控件在 VK_RETURN 上发出哔哔声,您需要处理该控件的 WM_CHAR 消息并为 VK_RETURN 返回 0,而不调用默认窗口过程,该过程必须为所有人调用其他键。

【讨论】:

【解决方案2】:

我从 WinAPI Reference 中了解到,WM_CHAR 的默认编辑处理会调用 MessageBeep 函数来处理非法字符,例如 enter 和 tab。我通过截取WM_KEYDOWN 将编辑控件子类化为控件之间的制表符(如 Petzold 所示的滚动条),但是当我按下制表符时它会发出哔哔声。所以我拦截WM_CHAR以避免在我按tab时默认处理,所以停止哔哔声。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多