IProgressDialogのダイアログ表示タイミングについて – プログラミング – Home

通知
すべてクリア

[解決済] IProgressDialogのダイアログ表示タイミングについて


bebel
 bebel
(@bebel)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

IProgressDialogでプログレス表示しようとしています。
基本的には問題なく使えているのですが、ダイアログの表示/非表示のタイミングについ
て少し悩んでいます。

まず開始時のStartProgressDialog後実際にダイアログが表示されるまで少し時間が掛か
るようで、その後の一連の処理の量によっては、ダイアログが表示される頃にはバーの進
みがほとんど終わりに近かったり、場合によってはダイアログ自体表示される前に終わっ
てしまいます。

なるべくダイアログが表示されてから一連の処理を開始する、もしくはダイアログ表示ま
でのラグを短縮するような工夫はできないでしょうか?

また同様にStopProgressDialog後もダイアログがしばらく残ってしまうようで、一連の処
理が終了したところで、メッセージボックスを表示しようと

   :
pProgress->StopProgressDialog();
pProgress->Release();
CoUninitialize();

MessageBox(Finish.);

のようにした時、メッセージが表示された後も少しプログレスダイアログの表示が残って
しまいます。
(メッセージが表示されて少し経ってからプログレスダイアログが消える)
ただし一連の処理にある程度時間がかかるような場合は、この現象は見られませんでした。

プログレスダイアログが閉じた後に次のMessageBoxが開くようにするには、どうすれば良
いのでしょうか?

ちなみにWindowsXP SP2上のVS2005で開発中です。
よろしくお願いします。


引用未解決
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

シェルのプログレスダイアログは、IOleWindowインターフェイスを
実装しているみたいなので、そこからウィンドウハンドルを取得して
状態を調べれば可能かもしれません。


返信引用
bebel
 bebel
(@bebel)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

情報ありがとうございます。
ダイアログのウィンドウハンドルを得て、ShowWindow()で強制的に表示/非表示させる事
で解決できました。

ちなみに参考までにお聞きしたいのですが、「IOleWindowを実装しているみたい」という
ような情報はどのようにして得られたのでしょうか?
(ヘルプにはIUnkownが派生元であるとしか書いてないようでした)


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

> ちなみに参考までにお聞きしたいのですが、
> 「IOleWindowを実装しているみたい」という
> ような情報はどのようにして得られたのでしょうか?

Visual StudioやPlatform SDKに付属しているOLE-COM Object Viewer(OleView)
を使いました。
オブジェクト一覧の中から「Progress Dialog」を探し出し、
インスタンスを生成すると、オブジェクトがサポートしている
インターフェイスの一覧を見ることができます。


返信引用
bebel
 bebel
(@bebel)
ゲスト
結合: 16年前
投稿: 3
Topic starter  

COMはほとんど利用した事が無かったので、その辺のツールには気付きませんでした。
勉強になりました、回答ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました