Как я могу использовать поток пользовательского интерфейса в SDI-проекте - PullRequest
0 голосов
/ 22 октября 2019

Пример проекта Работа в Visual studio 2008.

Мне нужен поток пользовательского интерфейса для изменения проекта 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;  
}

1 Ответ

2 голосов
/ 22 октября 2019

Храните все объекты графического интерфейса в главном потоке и других тяжелых работах в отдельном потоке, чтобы сделать приложение отзывчивым. Создание дочернего диалога в рабочем потоке вызовет проблемы и не рекомендуется.

Кроме того, избегайте вызова ShowWindow () в CWnd :: Create (). Вы не можете запросить показ дочерних окон до того, как родительские окна будут полностью готовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...