我的應用程序需要在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的硬件,連接到數據庫和創建工作線程。應用程序對象擁有所有這些東西,大型機及其視圖等使用它。由於這些東西與應用程序中的文檔無關。
根據以太網負載,需要不同的時間來連接。
模式對話框不需要響應。我只想像Adobe Reader的啓動對話框那樣。
與UpdateWindow()
的提示是一個正確的方向,我添加了一個調用這個函數,因爲我更新了狀態。這解決了我的問題。
對於要繪製的對話框,應用程序必須屈服,並且即使您調用dlg.UpdateWindow()或什麼,在執行「昂貴的東西」時對話框也不會響應用戶輸入。也許在不同的線程中創建對話框?另一種實現方式是在另一個線程下執行「昂貴的東西」,在應用程序初始化後計劃(例如使用定時器); UI元素應該被禁用,直到「昂貴的東西」完成。 –