如何在 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。
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。