変数の受け渡し

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

変数の受け渡し

#1

投稿記事 by ざこ » 16年前

何か似た質問になってしまいますがちょっと混乱していますのでご了承ください。
環境はVC++6.0のMFCです。
メインクラスCDragDropDlgクラス
新クラス CTestクラスの2つがあります。CTestのリストビューの中身をメインクラスにもっていきたいんですが
CTestクラス

void CTest::OnOK()
{
   CDragDropDlg DLG;
   int index=-1;
   while((index=m_list.GetNextItem(index,LVNI_ALL)!=-1){
      s2=m_list.GetItemText(index,0);
  }
  CDialog::OnOK();
}

CDragDropDlgクラス

・
・
CTest Tdlg;
CString SS;
Tdlg.s2=SS;
MoveFile(SS,●);
とするとCTestクラスのリストビューの中の最後の行しか移りません。中身が更新されているので
当然のような気もしますが、どうすればいいのかがわかりません。少し混乱してます。

TestクラスのOKボタンを押すとリストビューの中身を全て取得し、メインクラスに送る ことが目的です。
どうすれば全て送れるのか教えて下さい。。

バグ

Re:変数の受け渡し

#2

投稿記事 by バグ » 16年前

メインダイアログに送るというのはどういうことですか?
CTestクラスのOnOKの中で使用されているs2という変数の型は何ですか?(CStringクラスのssに代入していることから考えると、CStringクラスでしょうか?)
リストビューのアイテムの数は可変ですか?固定ですか?

なんにせよ、ご自身も言われている通り、s2のアイテムはどんどん更新されていく訳ですから、最後のアイテムしか取得できないのは当たり前です。

私だったら、リストビューのアイテムを取得する為のメンバ関数をCTestに追加しておいて、DoModal関数の戻り値がIDOKの場合にそのメンバ関数からアイテムを取得する…という流れにしますね。

バグ

Re:変数の受け渡し

#3

投稿記事 by バグ » 16年前

すみません、勘違いしてました(^_^;)

DoModal関数を抜けた時点でオブジェクトは破棄されてしまうので、前記の方法では無理でしたね。

メインダイアログからCStringのポインタを渡して、リストビュー内のアイテムの数の分だけ領域を動的に確保して書き込むのが簡単でしょうか?

Blue

Re:変数の受け渡し

#4

投稿記事 by Blue » 16年前

CXXAppクラスをつかてみては?

アプリ全体で使う値であればそこのメンバにしておけばいいし。
(SDI/MDIでドキュメント単位であれば、CXXDocクラスのメンバにする。)
呼び出し元でしか使わないのであれば、呼び出し元で設定する領域を渡すとか。

それと、文字列の配列であれば、CStringArrayとかstd::vector<CString>とかを使ったほうが楽ですよ。

ざこ

Re:変数の受け渡し

#5

投稿記事 by ざこ » 16年前

CStringArrayについて知らなかったので勉強して活用した所きちんとできました。
他の方法も試してみます。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る