1
我想在MFC中創建一個對話框,一旦出現它,它就不會失去焦點。 這是爲了阻止用戶在處理數據時訪問主SDI窗口。該流程類似於:MFC創建不失焦點的無模式對話框
- 用戶觸發過程
- 應用程序顯示的對話框
- 應用程序啓動過程中的作用
我不能跟一個模態對話框做到這一點,因爲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();必須在該線程中調用 – manatttta