ステータスバーにプログレスバーを表示させるには。(ダイアログベースのアプリにて)

[戻る]
まさあき 2002/07/15(月) 21:47:03
こんにちは。
まさあきといいます。

また、質問があります。
(今回で2回目。質問ばかりですいません。
まだまだ、初心者の枠なんで・・・)

ダイアログベースのアプリケーションに
ステータスバーを設け、そこにプログレスバーを表示させることが出来ますか?

何とか、ステータスバーの作成自体は出来たのですが、プログレスバーを表示させる
ことが出来ません。

らららさんが作られた:プログレスバークラス (CProgressBar) を
利用させていただきたかったのですが、ダイアログベースのアプリケーションのせい
か、うまくいきませんでした。
(ステータスバーの取得がうまくいかないみたいです。)

過去のログにも、あったのですが、やはりダイアログベース
のアプリには無理なのでしょうか?

どのようにしたら、実現できるのでしょう?

TAD [E-Mail] 2002/07/16(火) 02:10:34
ステータスバーをどのようにダイアログボックスに配置したか、
その方法が分かりませんので、ステータスバーの作成方法から書かせていただきます。


ダイアログクラスのメンバに、ステータスバーとプログレスバーのクラスを定義します。

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 で、表示/非表示を切り替えることができます。

まさあき 2002/07/16(火) 10:51:32
TADさん

ご回答ありがとうございました。

VC初心者の私としては、せっかく教えていただいた
内容を100%理解できていません。
(お恥ずかしい話ですが、予備知識不足と理解力が足りないので・・・)

何とか、ステータスバーとプログレスバーを表示させることは
出来ましたが、SDIアプリケーションと同様のindicators配列を
登録すると、ステータスバーの右端の「カナ」欄がつぶれてプログレスバー
が表示されました。
「カナ」欄など不要なペインの削除すると、プログレスバー自体も表示されませんでした。
(本当に初歩的な知識が足りない私です。)

行いたいのは、ステータスバー内に、ファイルの保存状況を表示させたいのです。
例:xxxx.txt 処理中:■■■■□□

私自身、もっと勉強し、教えていただいた内容をちゃんと把握し解決させたいと
思っていまが、私も出来るだけ早く解決しなければならないので、もし宜しければ
また、ご助言のほど、よろしくお願いします。
(調子がいい話で、本当にすいません。)

また、解決できましたら、報告させていただきます。

駄犬 [E-Mail] 2002/07/16(火) 12:00:59
CStatusBarCtrl::GetRectの第一引数について調べると、きっと幸せが訪れます。

まさあき 2002/07/16(火) 13:24:02
[[解決]]
TADさん、駄犬さん

ステータスラインインジケータ部のペインを追加しましたら、
プログレスバーが表示できました。

ありがとうございました。

今後も教えていただいたことの理解を深めるため、
勉強していきます。
大変感謝しています。

駄犬さん
>CStatusBarCtrl::GetRectの第一引数について調べると、・・・

まだまだ、私が知らないことが多いですね。
じっくり勉強していきます。
ありがとうございました。

古いスレッドには追加発言できません。