更新:可能な解決策。ヘッダーでCWaitダイアログを宣言すると、これが解決するようです。
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;
私は何か間違ったことをしていますか?
助けてくれてありがとう。
更新:個々の関数内で呼び出すと、正常に機能します!