リストボックスの複数選択について

[戻る]
流々華 2002/05/27(月) 16:10:13
リストボックスの複数選択についての質問です。

VC++6.0を始めてまだ1週間の初心者で、おかしな質問をするかもしれませんが
よろしくお願いします。

複数選択リストボックスをMFC、SDI(FormView)に設置しています。
ここで、この複数選択されたリストの項目番号を取得して、それに見合った
配列のデータを印刷したいと考えています。

ここで、教えていただきたいポイントは、複数選択したリストの項目の取得方法です。
GetSelCountやGetSelItemsを使うという事までは何とか解りましたが、
ヘルプを見ても、ここからどうコードを書いてよいのかわからず、1日中悩んでおります。
基本的な質問になってしまいましたが、できれば少し具体的なコードの書き方を
ご教示願えませんでしょうか?

よろしくお願いします。

sugar 2002/05/27(月) 16:20:44
GetSelItems()の使い方がよくわからない、ということでよろしいでしょうか?

int GetSelItems( int nMaxItems, LPINT rgIndex ) const;

おそらく、

int rgIndex[100];
m_wnbLB.GetSelItems(100, rgIndex);

ということですよね?
(m_wnbLBはCListBox型です。)
事前に配列を用意しておいて、第2引数に与えると、
選択された項目のインデックスが配列に入ってくる、と。

流々華 2002/05/27(月) 16:34:37
sugar様、早速のアドバイスありがとうございました。
無事、選択された項目番号の取得ができました!

ところで、書いて頂いたコードの配列は予め、100まで要素を
指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
できるのでしょうか?

追加質問になってしいまい、申し訳ありません。

クリリン 2002/05/27(月) 17:09:07
GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。

不良PG [E-Mail] 2002/05/27(月) 17:31:19
こんな感じかな・・

int iCount = m_wndLB.GetSelCount();
int* paIndex = new int[iCount];
m_wnbLB.GetSelItems(iCount, paIndex );
.
.
//使用後
delete [] paIndex;

クリリン 2002/05/27(月) 17:33:27
サンプルを書いてみました。

// m_Listはリストコントロールのメンバ変数です。
POSITION pos = m_List.GetFirstSelectedItemPosition();
int Index = 0;
int nItem;

if (pos == NULL){
  ;// 全く選択されていない
}
else{
  while (pos)
  {
    nItem = m_List.GetNextSelectedItem(pos);
    for( Index; Index < nItem; Index++ ){
      ;// この範囲内は選択されていない
    }
    // 選択されている
    Index = nItem;
    // Indexの値を使って、選択処理をしてください。
    Index++; // 次の範囲ポジション
  }
  for( Index; Index < m_List.GetItemCount(); Index++ ){
    ;// 残りはは選択されていない
  }
}

不良PG [E-Mail] 2002/05/27(月) 17:35:18
クリリンさんへ
>GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。
これは、リストコントロールの場合です

質問は、リストボックスです(^^;

クリリン 2002/05/27(月) 17:37:28
ごめんなさい。
リストボックスをリストコントロールと勘違いしていました。

sugar 2002/05/27(月) 17:41:47
> ところで、書いて頂いたコードの配列は予め、100まで要素を
> 指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
> できるのでしょうか?
> 
不良PGさんが提示してらっしゃるので、私からは特によいですね。
既に察してらっしゃるかと思いますが、
私の「100」は、あくまで例ですので。

流々華 2002/05/27(月) 18:04:52
不良PG様、クリリン様、sugar様、たくさんのアドバイスありがとうございました!

そこで、不良PG様からのコードを実行してみたのですが、
例えば、リストボックスに表示されている1番目と3番目を選択して、
デバッグしてみると、paIndexの中に、0x003461e0と1が入っていました。

まだまだ言語の意味が分かっていなくてお恥ずかしいのですが、
何故このような値が入ってくるのか教えていただけませんでしょうか?
おそらくポインタの理解ができていないと思います...。
本当に申し訳ありません!!!

不良PG [E-Mail] 2002/05/27(月) 18:11:55
大サービスです・・

int iIndex;
for( iIndex = 0; iIndex < iCount ; iIndex++ )
{
  int iSelectIndex = paIndex[iIndex];
  .
  .
}

流々華 2002/05/27(月) 18:30:26
[[解決]]
不良PG様、早急なレスありがとうございました。

しかも大サービスまでしてくださって大変感謝しております。
今、早速実現したい処理を付け加えて、実行してみたところ、
上手く動作させる事ができました。
感激です!!!

これからは、もっとコードの理解、応用ができるように
勉強を進めていきたいとおもいます。

本当にありがとうございました!!

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