我有一个名为A的派生类,它是从CDialog继承的,我创建了一个名为A的对象,并想利用成员函数domodal来显示对话框。但是,此对话框无法显示,并且父窗口被阻止。

A a(this);

auto DlgResult = std::async(std::launch::async, &A::DoModal,&a);

DlgResult.wait();

if (DlgResult.get() == IDOK)
{
    std::wstring ss = a.get_text_fromdlg();
}

有人可以帮我,谢谢!

最佳答案

如果我是你,我不会与Async和DoModal搏斗,因为DoModal()的目的是等待对话框的响应,以使应用程序知道如何前进。

在下面,我添加了一个更简单的选项。只需创建指向Dialog类的成员变量指针,然后使用Show Window。同样,在这种情况下,您可以考虑将对话框置于最顶层,以免失去焦点。

MFCClass1* m_pDlg = new MFCClass1();

void CMFCApplication1Dlg::OnBnClickedButton1()
{
    m_pDlg->Create(IDD_DIALOG1);
    m_pDlg->ShowWindow(SW_SHOWNORMAL);
    SetWindowPos(&m_pDlg->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}

c++ - 如何使用std::async显示Cdialog-LMLPHP

09-04 15:29