WINAPI MessageBox在消息队列中调用时,无法正常显示

蹦跶的钟 20 信誉分
2025-06-24T09:21:38.23+00:00

不会立即显示,但是可以使用Enter关闭消息框。只有按Alt时,消息框才会显示出来。 调用代码为

case WM_LBUTTONDOWN: { MessageBox(NULL, L"123", L"错误", MB_OK); } return 0;
开发人员技术 | C++
开发人员技术 | C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Omkara Varshitha Kunapalli (INFOSYS LIMITED) 1,985 信誉分 Microsoft 外部员工
    2025-11-17T04:55:35.44+00:00

    Hello Thanks for reaching out !

    Use window handle as owner: Call MessageBoxW(hWnd, L"123", L"错误", MB_OK); instead of NULL.

    • Force foreground: Add MB_SETFOREGROUND (and MB_TOPMOST if your window is topmost).
    • Defer from input handler: Post a custom message in WM_LBUTTONDOWN instead of showing directly.
    • Show in custom handler: Handle WM_SHOW_MSGBOX and call MessageBoxW(hWnd, L"123", L"错误", MB_OK | MB_SETFOREGROUND);.
    • Return DefWindowProc: For all unhandled messages, return DefWindowProc
      Example:
      #define WM_SHOW_MSGBOX (WM_USER + 1)
    •  case WM_LBUTTONDOWN: PostMessage(hWnd, WM_SHOW_MSGBOX, 0, 0); return 0; case WM_SHOW_MSGBOX: MessageBoxW(hWnd, L"123", L"错误", MB_OK | MB_SETFOREGROUND); return 0;

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。