模仿MessageBox();弹出窗口中的行为

Mimicking MessageBox(); behaviour in a popup window

本文关键字:窗口 MessageBox 模仿      更新时间:2023-10-16

如何在自定义弹出窗口(WS_popup)中模拟::MessageBox()行为,弹出窗口等待用户点击其中一个按钮并返回点击结果?就像在::MessageBox()中一样,当uType中有MB_YESNO并且提供了所有者窗口的句柄时,它会根据单击的按钮返回ID_YES或ID_NO。

在纯win32api和c++中。

DialogBox()是winapi的核心函数。

如果你想完全自己旋转,那么你必须:

  1. 使用EnumThreadWindows()迭代线程上的所有顶级窗口,并使用EnableWindow禁用它们
  2. 使用GetMessage+DispatchMessage运行消息循环
  3. 使用表示对话框返回值的变量向该循环添加退出条件
  4. 为按钮编写消息处理程序,它们必须设置该变量
  5. 重复步骤1,重新启用窗口
  6. 销毁对话框窗口
  7. 返回变量值

当您处理按钮的BN_CLICKED通知时,通过WM_COMMAND消息传递到所有者窗口,EndDialog(m_hWnd, IDYES)的调用结束对话框,并为API提供值(IDYES)以返回到更高级别的调用方。

非模态弹出窗口没有返回的代码(与模态对话框和MessageBox模态对话框相反),您可以使用WM_CLOSE关闭它们,如果需要,您必须详细说明从窗口获得结果代码/值的方法。