如何在 SDI 项目中使用 UI 线程

How can I use UI thread in SDI project

Sample Project 在 Visual studio 2008 年工作。

我需要 UI 个线程来修改 SDI 项目。 我在基于对话框的项目之前使用过。在SDI项目中,我可以创建线程但我不能使用它。

我创建了管理器对话框。

SDIProjectView.cpp

int CSDIProjectView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;

    m_pViewMgr = new CDlgViewMgr(this);

    m_pViewMgr->Create(IDD_DIALOG_VIEWMGR, this);
    m_pViewMgr->ShowWindow(SW_SHOW);

    return 0;
}

在管理器对话框中,创建线程对话框。 当我调用 ShowWindow 时 m_pDlg->hWnd 是无效值。 没有用户操作的最佳方式是什么?

CDlgViewMgr.cpp

BOOL CDlgViewMgr::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    m_view = new CDlgThread(this);
    m_view->CreateThread();

    m_view->m_pDlg->ShowWindow(SW_NORMAL);
    return TRUE;  
}

将所有 GUI objects 保留在主线程中,将其他繁重的工作保留在单独的线程中,以使应用程序响应。在工作线程中创建 child 对话框会带来麻烦,不建议这样做。

此外,避免在 CWnd::Create() 中调用 ShowWindow()。在 parent windows 完全准备好之前,您不能请求显示 child windows。