更新:可能的解決方案。在頭文件中聲明CWait對話框似乎解決了這個問題。控件在非模態對話框中不呈現MFC
UPDATE2:消息泵可能是罪魁禍首。明確的「抽」似乎解決了問題。
我試圖顯示一個模式「請稍候」對話框,而一些功能在應用程序中執行。我想要顯示的對話框是:
使用此代碼調用對話框。
CWait dialog;
dialog.Create(IDD_WAIT);
dialog.SetWindowTextW(L"Geocoding");
dialog.ShowWindow(SW_SHOW);
mastImageGeocode(); //Working here
slvImageGeocode();
interfImageGeocode();
cohImageGeocode();
dialog.CloseWindow();
什麼最終顯示是這樣的:
我似乎無法弄清楚,爲什麼控件不渲染。
我試着手工處理的消息循環使用這種方法的對話框的初始化後:
MSG stMsg;
while (::PeekMessage (&stMsg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage (&stMsg);
::DispatchMessage (&stMsg);
}
沒有真正發揮作用。
我也試過指針方式
Cwait * dialog; //THis is in header
dialog = new CWait(this);
dialog->Create(IDD_WAIT);
dialog->SetWindowTextW(L"Geocoding");
dialog->ShowWindow(SW_SHOW);
mastImageGeocode(); //Some work here
slvImageGeocode();
interfImageGeocode();
cohImageGeocode();
dialog->CloseWindow();
delete dialog;
難道我做錯了什麼。
感謝您的幫助。
更新:如果我在個別函數中調用它,它工作正常!
作爲一個快速測試,做dialog.ShowModal();工作好嗎? – JBRWilkinson
@JBRWilkinson你的意思是doModal()對不對? 'CWait對話框; \t \t dialog.DoModal();'確實對我有效。 – shaunakde
如果我將相同的代碼放在3個函數中的每一箇中,它將會工作一次,下一次不會工作(顯示) – shaunakde