• 締切済み

プログレスバーについて

サーバー上からファイルをダウンロードするアプリを 作成しているものです。 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 ダイアログです。

みんなの回答

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

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をメンバ参照する、 ということで良いと思いますが。

noname#30727
noname#30727
回答No.1

簡略化というよりも、意図することが正確に伝わってきません。 クラスとインスタンスの関係について、少し調べられてはどうでしょう? ClassB のインスタンスが Dialog だとしたら、ClassA 側から、Dialog.m_plg とアクセスすることはできます。もちろん public でなければなりません。

関連するQ&A