Winapi Win32-使对话框需要焦点/操作

Winapi Win32-使对话框需要焦点/操作,winapi,dialog,focus,require,z-order,Winapi,Dialog,Focus,Require,Z Order,在Win32编程中,MessageBox函数会启动一个需要操作的对话框,在按“确定”之前,无法将焦点转移到应用程序中的另一个窗口。我在VisualStudio2008的资源编辑器中设计了一个对话框,问题是我可以单击启动它的菜单项,当对话框仍在显示时,我可以再次单击它并显示另一个对话框。对话框打开时,我还可以使用应用程序的其余部分 我想这样做,用户必须按下我的自定义对话框上的“OK”或“Cancel”,才能在应用程序中执行任何其他操作,就像它是一个MessageBox一样。我将如何做到这一点?我是

在Win32编程中,MessageBox函数会启动一个需要操作的对话框,在按“确定”之前,无法将焦点转移到应用程序中的另一个窗口。我在VisualStudio2008的资源编辑器中设计了一个对话框,问题是我可以单击启动它的菜单项,当对话框仍在显示时,我可以再次单击它并显示另一个对话框。对话框打开时,我还可以使用应用程序的其余部分


我想这样做,用户必须按下我的自定义对话框上的“OK”或“Cancel”,才能在应用程序中执行任何其他操作,就像它是一个MessageBox一样。我将如何做到这一点?我是否可以在对话框资源上设置特定的windows样式或ex样式?我已经尝试了WS_TOPMOST,但没有效果,我不确定还可以尝试什么。

您的对话框需要使用直接对话框模式启动器或任何直接对话框模式启动器启动。此外,在调用应用程序时,需要确保并提供应用程序的顶级窗口作为父窗口。这样做应该使您的对话框具有模态,而不是无模态。资源脚本中的对话框模板也要使用WS_弹出窗口样式,这一点很重要,但它通常是默认设置的,所以这可能不是您的问题。

太好了,差不多就是这样。现在,我还有一个问题。我有可以随主窗口自由浮动的工具窗口。当我现在启动对话框时,它不允许我按预期使用我的主窗口,但是,我可以使用我的toolwindow,它碰巧有一个按钮也可以启动对话框,因此我仍然可以生成此对话框的多个实例。当这个对话框出现在屏幕上时,有没有办法确保我的应用程序中没有其他窗口可以使用?顺便说一句,这些工具窗口是用CreateDialogParam创建的,因此可以显示它们,并且该main的所有子项也应该是对话框的模态。工具窗口是如何设置的?如果它们是没有父母关系的自由浮动弹出窗口,那可能就是你看到的。如果句柄可以使用它们,则在对话框打开时,您可能会最终求助于枚举它们并禁用它们。还有其他的方法,但那只是我的想法。您提到它们是使用CreateDialogBoxParam创建的,以允许显示/隐藏。所以在调用DialogBox之前隐藏=p这是我创建工具窗口的方式。样式/扩展样式:
DS|MODALFRAME | DS|u FIXEDSYS | DS|u中心| WS|u弹出| WS| u字幕| WS|u系统菜单| WS|u扩展工具窗口
当我使用
CreateDialogParam
时,我将父项设置为与使用
对话框
对话框时相同的设置为主窗口的句柄。它们是自由浮动的,在应用程序退出之前不会被销毁。您是说我可以使用
EnableWindow
禁用工具窗口,直到
对话框
返回?我宁愿不这样做,但如果这是最实际的话。是的,我尝试通过工具窗口枚举并禁用它们,但当我启动我的
对话框时,它不仅使工具窗口消失,而且即使在调用
对话框后启用了工具窗口,它也拒绝再次显示,甚至当我点击启动它的菜单项时。好吧,我的问题实际上是我用来通过工具窗口句柄枚举的迭代器。现在一切正常。非常感谢。