c ++ winapi - 对编辑控件进行子类化 - 点击&#34时输入恼人的声音;输入"

时间:2014-04-25 14:51:29

标签: c++ winapi subclassing

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

2 个答案:

答案 0 :(得分:3)

您不需要ES_MULTILINEES_AUTOVSCROLLES_WANTRETURN样式标记。

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

答案 1 :(得分:1)

我从WinAPI参考资料中了解到,编辑调用WM_CHAR的{​​{1}}默认处理非法字符的函数MessageBeep,例如enter和tab。我通过拦截WM_KEYDOWN(如Petzold为滚动条所示)将编辑控件子类化为控件之间的选项卡,但是当我按Tab键时它发出哔哔声。因此,当我按Tab键时,我会拦截WM_CHAR以避免默认处理,因此请停止发出哔哔声。