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

Can't focus from main window after closing dialog from other thread

本文关键字:窗口 聚焦 其他 线程 对话框      更新时间:2023-10-16

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

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

我曾经AfxGetMainWnd()->SetActiveWindow();来设置主窗口的焦点,但它不起作用。

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

没有真正的好方法可以做到这一点。焦点是按线程设置的。因此,没有对所有窗口的"焦点"。

您唯一的机会是设置新的前台窗口,该窗口属于具有 SetForegorundWindow 的另一个线程。在同一应用程序中,这应该不受限制地工作。

如果它不起作用,则需要"同步"两个消息队列。这是由AttachThreadInput完成的。如果两个消息队列都已经附加,则直接设置焦点没有问题。但是应用程序的行为会改变...请阅读我链接的功能的文档。

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