Мое приложение должно создать несколько дорогих вещей в InitInstance()
. Я хочу сообщить пользователю о ходе, поэтому я решил создать немодальное диалоговое окно в методе InitInstance()
.Modeless Dialog in App :: InitInstance()
Проблема моя, диалог не нарисован. Он обновляется сразу после
CStartStopDlg dlg(_T("Start"));
dlg.Create(IDD_START_STOP_DLG);
dlg.ShowWindow(SW_SHOW);
// expensive stuff
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
Даже когда я спал после этих строк, он обновляет диалоговое окно. Проблема в том, что MainFrame использует мои созданные ресурсы, поэтому я не могу изменить эти строки.
Как решить эту проблему?
EDIT: дорогостоящая материал подключение к камерам, подключение к Ио оборудования, подключение к базам данных и создания рабочих потоков. Объект приложения владеет всем этим материалом, а мэйнфрейм и его представления и т. Д. Используют это. Поскольку этот материал не связан с документом в приложении.
В зависимости от нагрузки на ethernet для соединения требуется время.
Модальный диалог не требует отклика. Я просто хочу что-то вроде диалога начала Adobe Reader.
Подсказка с UpdateWindow()
была в правильном направлении, и я добавил вызов этой функции, когда обновил статус. Это решило мою проблему.
Для того, чтобы диалог рисовал, приложение должно уступить. И даже если вы вызываете dlg.UpdateWindow() или что-то, диалог не будет реагировать на ввод пользователя во время выполнения этого «дорогой вещи». Может быть, создать диалоговое окно в другом потоке? Альтернативной версией было бы вместо этого выполнить «дорогой материал» под другим потоком, запланированным после инициализации приложения (например, с использованием таймера); Элементы пользовательского интерфейса должны быть отключены до тех пор, пока «дорогой материал» не будет завершен. –