내 응용 프로그램은 InitInstance()
에 비싼 물건을 만들어야합니다. 사용자에게 진행 상황을 알리고 싶습니다. 따라서 InitInstance()
메서드로 모덜리스 대화 상자를 만들기로했습니다.모덜리스 대화 상자에서 응용 프로그램 :: 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이 생성 된 리소스를 사용하므로이 줄을 재정렬 할 수 없다는 것입니다.
이 문제를 해결하는 방법은 무엇입니까?
편집 : 비싼 물건, 연결이 데이터베이스에 연결 및 작업자 스레드를 생성, 하드웨어를 io를하기 위해 카메라에 연결입니다. 응용 프로그램 개체는이 모든 것들을 소유하고 있으며 메인 프레임과 그보기 등이 이것을 사용합니다. 이 물건은 응용 프로그램과 관련된 문서가 아니기 때문에.
이더넷로드에 따라 연결하는 데 다른 시간이 걸립니다.
모달 대화 상자는 반응 할 필요가 없습니다. 난 그냥 어도비 리더의 시작 대화 같은 것을 원한다.
UpdateWindow()
힌트는 올바른 방향이었고 상태를 업데이트 할 때이 함수에 대한 호출을 추가했습니다. 이게 내 문제를 해결했습니다.
대화 상자를 그리려면 응용 프로그램이 산출해야합니다. dlg.UpdateWindow() 또는 what을 호출하더라도 대화 상자는 "값 비싼 물건"을 수행하는 동안 사용자 입력에 응답하지 않습니다. 대화 상자를 다른 스레드에 만들 수 있습니까? 또 다른 구현은 앱이 초기화 된 후에 예약 된 다른 스레드 (예 : 타이머 사용)에서 '값 비싼 물건'을 대신 실행하는 것입니다. "비싼 물건"이 완료 될 때까지 UI 요소를 사용 중지해야합니다. –