IProgressDialogでプログレス表示しようとしています。
基本的には問題なく使えているのですが、ダイアログの表示/非表示のタイミングについ
て少し悩んでいます。
まず開始時のStartProgressDialog後実際にダイアログが表示されるまで少し時間が掛か
るようで、その後の一連の処理の量によっては、ダイアログが表示される頃にはバーの進
みがほとんど終わりに近かったり、場合によってはダイアログ自体表示される前に終わっ
てしまいます。
なるべくダイアログが表示されてから一連の処理を開始する、もしくはダイアログ表示ま
でのラグを短縮するような工夫はできないでしょうか?
また同様にStopProgressDialog後もダイアログがしばらく残ってしまうようで、一連の処
理が終了したところで、メッセージボックスを表示しようと
:
pProgress->StopProgressDialog();
pProgress->Release();
CoUninitialize();
MessageBox(Finish.);
のようにした時、メッセージが表示された後も少しプログレスダイアログの表示が残って
しまいます。
(メッセージが表示されて少し経ってからプログレスダイアログが消える)
ただし一連の処理にある程度時間がかかるような場合は、この現象は見られませんでした。
プログレスダイアログが閉じた後に次のMessageBoxが開くようにするには、どうすれば良
いのでしょうか?
ちなみにWindowsXP SP2上のVS2005で開発中です。
よろしくお願いします。
シェルのプログレスダイアログは、IOleWindowインターフェイスを
実装しているみたいなので、そこからウィンドウハンドルを取得して
状態を調べれば可能かもしれません。
情報ありがとうございます。
ダイアログのウィンドウハンドルを得て、ShowWindow()で強制的に表示/非表示させる事
で解決できました。
ちなみに参考までにお聞きしたいのですが、「IOleWindowを実装しているみたい」という
ような情報はどのようにして得られたのでしょうか?
(ヘルプにはIUnkownが派生元であるとしか書いてないようでした)
> ちなみに参考までにお聞きしたいのですが、
> 「IOleWindowを実装しているみたい」という
> ような情報はどのようにして得られたのでしょうか?
Visual StudioやPlatform SDKに付属しているOLE-COM Object Viewer(OleView)
を使いました。
オブジェクト一覧の中から「Progress Dialog」を探し出し、
インスタンスを生成すると、オブジェクトがサポートしている
インターフェイスの一覧を見ることができます。
COMはほとんど利用した事が無かったので、その辺のツールには気付きませんでした。
勉強になりました、回答ありがとうございます。