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

时间:2013-07-20 08:26:20

标签: c++ winapi

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

纯粹的win32 api和c ++。

2 个答案:

答案 0 :(得分:3)

DialogBox()是核心winapi函数。

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

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

答案 1 :(得分:2)

当您处理按钮的BN_CLICKED通知时,通过WM_COMMAND消息发送给所有者窗口,调用EndDialog(m_hWnd, IDYES)结束对话框并为API提供值({{1} })返回更高级别的呼叫者。

非模态弹出窗口没有返回的代码(特别是模态对话框和IDYES模式对话框),你用MessageBox关闭它们,你必须详细说明一些方法来获取如有必要,从窗口中生成代码/值。