我在DLL中调用了一个函数,在c ++的程序启动时。 在该调用返回之后,无论如何在程序中我通过调用DoModal()创建了从CDialog继承的主对话框。 在DLL中的函数中,我运行另一个线程,例如,它的工作是每20秒检查一次错误。如果存在错误,它将在:: MessageBoxW(...)的消息对话框中显示错误。
当我显示消息对话框时,用户可以与主线程(主对话框或其子窗口)创建的窗口进行交互。我不想要它。消息对话框必须是所有线程上的模态,以便用户在关闭消息对话框之前无法与程序交互。
我认为在第二个帖子中调用MessageBox之前我有选择这个选项:
您建议的解决方案必须满足这些限制:
答案 0 :(得分:0)
它已经写在评论中:只从一个线程中执行此类UI。所以我在这里写的答案只是第二选择!
如果主线程正在运行,您可以获取此线程的当前活动窗口的句柄。 将其作为父对话传递给对话框并调用DoModal。
但这会在线程之间创建一堆消息。如果主线程正在等待并且不处理任何消息,则程序可能会挂起。
Tipp:不要从主线程传递指向CWnd的指针。获取窗口句柄并使用CWnd :: FromHandle获取指向窗口对象的指针。将此传递给CDialog对象的构造函数。