我创建了一个从CWinThread继承的类CMyUIThread,以及一个名为CMyInfoDlg的对话框,其中包含一个文本和一个进度ctrl。我想在新创建的线程中显示无模式对话框。以下是部分代码:
BOOL CMyUIThread::InitInstance()
{
// TODO: perform and per-thread initialization here
// NOTE: the memory allocated below is freed by CMyInfoDlg::OnDestroy (it deletes itself)
m_pDlg = new CMyInfoDlg(CWnd::FromHandle(m_hwndParent));
VERIFY( m_pDlg->Create(IDD_THREADUI_DIALOG, CWnd::FromHandle(m_hwndParent)) );
g_hwndProgress = m_pDlg->GetSafeHwnd();
::ShowWindow(g_hwndProgress, SW_SHOW); // show window for the first time
return TRUE;
}
在我的主要框架中,我做了以下工作
m_pThread = new CGSUIThread(m_hwndParent);
m_pThread->m_bAutoDelete = FALSE;
VERIFY( m_pThread->CreateThread() );
好 啊。在这种情况下,它可以正常工作。
然而,当我将它合并到另一个具有主框架的大模块中时,问题来了:它挂起了:
VERIFY( m_pDlg->Create(IDD_THREADUI_DIALOG, CWnd::FromHandle(m_hwndParent)) );
当我追踪时,它实际上挂在CreateIndirectDialog上。
BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
我不知道为什么会这样。