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

ステータスバーにプログレスバーを表示さ...
 
通知
すべてクリア

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


まさあき
 まさあき
(@まさあき)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

こんにちは。
まさあきといいます。

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

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

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

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

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

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


引用未解決
トピックタグ
TAD
 TAD
(@TAD)
ゲスト
結合: 23年前
投稿: 54
 

ステータスバーをどのようにダイアログボックスに配置したか、
その方法が分かりませんので、ステータスバーの作成方法から書かせていただきます。

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

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


返信引用
まさあき
 まさあき
(@まさあき)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

TADさん

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

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

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

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

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

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


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

CStatusBarCtrl::GetRectの第一引数について調べると、きっと幸せが訪れます。


返信引用
まさあき
 まさあき
(@まさあき)
ゲスト
結合: 23年前
投稿: 5
Topic starter  

TADさん、駄犬さん

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

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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