当用户单击禁用的窗口(通过 EnableWindow(hwnd, FALSE) 禁用)时,如何以编程方式阻止 Windows 播放“默认提示音”声音?

use*_*504 1 c++ windows winapi windowing

当通过 EnableWindow(hwnd, FALSE) 禁用窗口,并且用户单击它时,将播放“默认哔哔声”声音。我不希望这种情况发生。如何使用 Win32 代码以编程方式为 C/C++ 中的当前进程禁用此行为?

Jon*_*ter 6

哔声由WM_SETCURSOR消息的默认窗口处理生成。

来自WM_SETCURSOR 的文档:

如果 lParam 参数的低位字是 HTERROR 并且 lParam 的高位字指定按下鼠标按钮之一,DefWindowProc 调用 MessageBeep 函数。

为了防止发出哔哔声,您的窗口过程应该在这些条件下处理WM_SETCURSOR而不是调用DefWindowProc

  • @user3756504 *WM_SETCURSOR 消息被**发送**到窗口* - 您需要在窗口过程中处理它。不在消息循环中 (3认同)
  • @user3756504 一些消息是由`GetMessage`或`PeekMessage`返回的,您需要调用`DispatchMessage`将其传递给窗口过程。另一条消息**直接**由系统传递给窗口过程,而不是由`Get[Peek]Message`返回 - 你永远不会在消息循环中查看它。`WM_SETCURSOR` 直接传递给窗口过程。即使它被禁用。所以你的代码中有一些错误或者你使用了错误的窗口 (2认同)