MFC 对话框在失去焦点时冻结

MFC dialog freezes when it looses focus

本文关键字:冻结 焦点 失去 对话框 MFC      更新时间:2023-10-16

我是MFC的新手,所以请耐心等待。我有一个在双屏显示器上全屏显示的对话框。此对话框在另一个非模式对话框中实例化(单击按钮时)。像这样:

void MyCParentDlg::OnBnClickedButton1()
{
        dlg2 = new MyChildNonModalDlg();
        dlg2->ShowWindow(SW_SHOW);
}

MyChildNonModalDlgOnInitDialog()中,ShowWindow(SW_MAXIMIZE)被调用以使其成为无边框的全屏对话框。现在,MyChildNonModalDlg里面有一个按钮回调事件:

void MyChildNonModalDlg::onBnClickedBut2() {
    // Display images on the dialog one by one for a very long time 
}

onBnClickedBut2正在运行并且对话框不断更新时,如果我在对话框外(例如在另一个屏幕上)用鼠标单击,这意味着当对话框失去焦点时,它会冻结!

我知道这也许可以通过多线程来解决,其中 OnBnClickedBut2() 内部的进程必须在线程内运行,但作为一个对线程知之甚少的人,有人可以指出我正确的方向或提供代码示例可以做到这一点吗?

使用 AfxBeginThreadonBnClickedBut2 内创建新线程。不应阻止 UI 事件处理程序。希望你现在明白了。