こんにちは。
まさあきといいます。
また、質問があります。
(今回で2回目。質問ばかりですいません。
まだまだ、初心者の枠なんで・・・)
ダイアログベースのアプリケーションに
ステータスバーを設け、そこにプログレスバーを表示させることが出来ますか?
何とか、ステータスバーの作成自体は出来たのですが、プログレスバーを表示させる
ことが出来ません。
らららさんが作られた:プログレスバークラス (CProgressBar) を
利用させていただきたかったのですが、ダイアログベースのアプリケーションのせい
か、うまくいきませんでした。
(ステータスバーの取得がうまくいかないみたいです。)
過去のログにも、あったのですが、やはりダイアログベース
のアプリには無理なのでしょうか?
どのようにしたら、実現できるのでしょう?
ステータスバーをどのようにダイアログボックスに配置したか、
その方法が分かりませんので、ステータスバーの作成方法から書かせていただきます。
ダイアログクラスのメンバに、ステータスバーとプログレスバーのクラスを定義します。
protected:
CStatusBar m_wndStatusBar;
CProgressCtrl m_wndProgress;
ダイアログクラスに OnCreate と OnSize を追加し、
OnCreate 内で、ステータスバーとプログレスバーを作成します。
if (!m_wndStatusBar.Create(this) || // ステータスバーの作成
!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof
(indicators[0])))
return -1;
if (!m_wndProgress.Create(WS_CHILD, // プログレスバーの作成
CRect(0, 0, 0, 0), &m_wndStatusBar, 0))
return -1;
m_wndProgress.ShowWindow(SW_SHOW);
m_wndProgress.SetRange(0, 100);
m_wndProgress.SetPos(50);
indicators 配列は、ここでは SDI アプリケーションと同じ物を定義しているとします。
最後に、プログレスバーが作成されているかを確認できるように、
SetRange、SetPos を追加しています。
これらのウィンドウサイズの設定は、OnSize で行います。
RepositionBars(0, 0xffff, NULL, reposDefault, NULL, NULL, FALSE);
CRect rcPane;
m_wndStatusBar.GetStatusBarCtrl().GetRect(1, &rcPane);
m_wndProgress.MoveWindow(rcPane);
RepositionBars で、ステータスバーの位置とサイズを設定し、
その後、プログレスバーを置きたいペインの領域を取得して、
MoveWindow で設定しています。
ボタンを押したときなど、特定のときだけプログレスバーが必要な場合は、
ShowWindow で、表示/非表示を切り替えることができます。
TADさん
ご回答ありがとうございました。
VC初心者の私としては、せっかく教えていただいた
内容を100%理解できていません。
(お恥ずかしい話ですが、予備知識不足と理解力が足りないので・・・)
何とか、ステータスバーとプログレスバーを表示させることは
出来ましたが、SDIアプリケーションと同様のindicators配列を
登録すると、ステータスバーの右端の「カナ」欄がつぶれてプログレスバー
が表示されました。
「カナ」欄など不要なペインの削除すると、プログレスバー自体も表示されませんでした。
(本当に初歩的な知識が足りない私です。)
行いたいのは、ステータスバー内に、ファイルの保存状況を表示させたいのです。
例:xxxx.txt 処理中:■■■■□□
私自身、もっと勉強し、教えていただいた内容をちゃんと把握し解決させたいと
思っていまが、私も出来るだけ早く解決しなければならないので、もし宜しければ
また、ご助言のほど、よろしくお願いします。
(調子がいい話で、本当にすいません。)
また、解決できましたら、報告させていただきます。
CStatusBarCtrl::GetRectの第一引数について調べると、きっと幸せが訪れます。
TADさん、駄犬さん
ステータスラインインジケータ部のペインを追加しましたら、
プログレスバーが表示できました。
ありがとうございました。
今後も教えていただいたことの理解を深めるため、
勉強していきます。
大変感謝しています。
駄犬さん
>CStatusBarCtrl::GetRectの第一引数について調べると、・・・
まだまだ、私が知らないことが多いですね。
じっくり勉強していきます。
ありがとうございました。