【发布时间】:2015-04-29 09:50:09
【问题描述】:
我想在 MFC 中创建一个对话框,它一旦显示就不会失去焦点。 这是为了在处理数据时阻止用户访问主 SDI 窗口。流程类似于:
- 用户触发流程
- 应用程序显示对话框
- 应用程序启动进程函数
我无法使用模态对话框执行此操作,因为 DoModal() 函数在对话框关闭之前不会返回,因此这永远不会触发第 3 步。
如何做到这一点?
编辑
这些是通知任务开始和任务结束的函数:
void CmodguiApp::_notify_task_start() {
_processing_dialog->DoModal();
}
void CmodguiApp::_notify_task_end() {
_processing_dialog->EndDialog(1);
}
这是触发任务流程的代码:
void trigger_task(std::function<void()> f) {
CmodguiApp::_notify_task_start();
f();
CmodguiApp::_notify_task_end();
}
【问题讨论】:
-
启动一个线程并在那里进行处理。
-
在线程中运行您的任务。您可以在
WM_INITDIALOG处理程序中启动线程,以确保在线程完成并且您想关闭对话框时对话框句柄可用。 -
@MichaelWalz 我的处理已经在一个单独的线程中完成了,但是 CmodguiApp::_notify_task_start();和 CmodguiApp::_notify_task_end();必须在该线程中调用
-
使您的对话框成为模态并在 OnInitDialog 中启动线程。
-
@manatttta: TopMost Modal 对话框怎么样?