- 締切済み
プログレスバーについて
サーバー上からファイルをダウンロードするアプリを 作成しているものです。 ClassAとClassBが存在するとして、 ClassAでファイルをダウンロードする処理を記述し、 ClassBでプログレスバーを含むダイアログを作成しています。 ClassAのファイル読み込みのループ処理のカウンターを プログレスバーのメンバー変数m_plgと同調させたい。 例 ClassA for(i=0;i<count;i++){ } ClassB m_plg.SetRange(0,count); m_plg.SetPos(i); かなり簡略化してます。 上記内容は実現可能だと思うのですが、メンバー変数の宣言部がおかしいのか m_plgは宣言されていませんとエラーがでます。 メンバー変数の理解不足だと思うのですが、このような処理を行いたい場合は どちらのClassにも認識されるようなコントロールのメンバー変数はどのようにして 宣言すればよろしいのでしょうか? 開発環境はVC++6.0 MFC ダイアログです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Fooky
- ベストアンサー率71% (59/82)
VCは使ったことないんでプログレスバーを 表すクラスの名前が分からないので、ここでは class ProgBarだとすると、class Bはこんな 感じですか? class B { public: B(){ ... m_plg.SetRange(0, count); ... } ... ProgBar m_plg; ... }; m_plgを直接class Aからいじろうと 思うなら、class Bの中でpublicフィールド 内で宣言しなければなりません。 で、class A内で、 class A { ... void report_progress(){ for( int i = 0 ; i < 100 ; i++ ){ ... dialogbox.m_plg.SetPos(i); } } ... B dialogbox; ... }; てな感じのことをしたいんですかね。 だとすると、以上のプログラム例のように、 B内でm_plgをpublicで宣言し、A内で Bのインスタンスを生成(または外部から ポインタかリファレンスで受け取る)、 そのBのインスタンスからm_plgをメンバ参照する、 ということで良いと思いますが。
簡略化というよりも、意図することが正確に伝わってきません。 クラスとインスタンスの関係について、少し調べられてはどうでしょう? ClassB のインスタンスが Dialog だとしたら、ClassA 側から、Dialog.m_plg とアクセスすることはできます。もちろん public でなければなりません。