从其他线程关闭对话框后,无法从主窗口聚焦

时间:2016-04-26 09:07:55

标签: c++ multithreading winapi mfc

我在CWindThread中创建了一个新的CWinApp::InitInstance()。在该线程中,我创建了一个对话框(用于在该对话框中显示进度条)。

完成InitInstance()后,我通过从对话框中调用DestroyWindow()来关闭对话框,但应用程序正在从主窗口中失去焦点。

我使用AfxGetMainWnd()->SetActiveWindow();为主窗口设置焦点,但它无效。

关闭对话框后如何将焦点返回主窗口?

2 个答案:

答案 0 :(得分:0)

没有真正好的方法可以做到这一点。每个线程设置焦点。因此,所有窗户都没有“焦点”。

您唯一的机会是设置新的前景窗口,该窗口属于具有SetForegorundWindow的其他线程。在同一个应用程序中,这应该没有限制。

如果它不起作用,则需要“同步”两个消息队列。这是由AttachThreadInput完成的。如果两个消息队列都已连接,则直接设置焦点没有问题。但是应用程序的行为会发生变化......请阅读我链接的函数的文档。

答案 1 :(得分:0)

当显示模态弹出窗口时,用户无法与所有者窗口交互的原因是它被禁用。当模态窗口被销毁时,必须注意在销毁弹出窗口之前重新启用所有者窗口,因为窗口无法激活禁用的窗口。这是弹出窗口重新激活错误窗口的常见原因。