リストボックスの複数選択についての質問です。
VC++6.0を始めてまだ1週間の初心者で、おかしな質問をするかもしれませんが
よろしくお願いします。
複数選択リストボックスをMFC、SDI(FormView)に設置しています。
ここで、この複数選択されたリストの項目番号を取得して、それに見合った
配列のデータを印刷したいと考えています。
ここで、教えていただきたいポイントは、複数選択したリストの項目の取得方法です。
GetSelCountやGetSelItemsを使うという事までは何とか解りましたが、
ヘルプを見ても、ここからどうコードを書いてよいのかわからず、1日中悩んでおります。
基本的な質問になってしまいましたが、できれば少し具体的なコードの書き方を
ご教示願えませんでしょうか?
よろしくお願いします。
GetSelItems()の使い方がよくわからない、ということでよろしいでしょうか?
int GetSelItems( int nMaxItems, LPINT rgIndex ) const;
おそらく、
int rgIndex[100];
m_wnbLB.GetSelItems(100, rgIndex);
ということですよね?
(m_wnbLBはCListBox型です。)
事前に配列を用意しておいて、第2引数に与えると、
選択された項目のインデックスが配列に入ってくる、と。
sugar様、早速のアドバイスありがとうございました。
無事、選択された項目番号の取得ができました!
ところで、書いて頂いたコードの配列は予め、100まで要素を
指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
できるのでしょうか?
追加質問になってしいまい、申し訳ありません。
GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。
こんな感じかな・・
int iCount = m_wndLB.GetSelCount();
int* paIndex = new int[iCount];
m_wnbLB.GetSelItems(iCount, paIndex );
.
.
//使用後
delete [] paIndex;
サンプルを書いてみました。
// 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++ ){
;// 残りはは選択されていない
}
}
クリリンさんへ
>GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。
これは、リストコントロールの場合です
質問は、リストボックスです(^^;
ごめんなさい。
リストボックスをリストコントロールと勘違いしていました。
> ところで、書いて頂いたコードの配列は予め、100まで要素を
> 指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
> できるのでしょうか?
>
不良PGさんが提示してらっしゃるので、私からは特によいですね。
既に察してらっしゃるかと思いますが、
私の「100」は、あくまで例ですので。
不良PG様、クリリン様、sugar様、たくさんのアドバイスありがとうございました!
そこで、不良PG様からのコードを実行してみたのですが、
例えば、リストボックスに表示されている1番目と3番目を選択して、
デバッグしてみると、paIndexの中に、0x003461e0と1が入っていました。
まだまだ言語の意味が分かっていなくてお恥ずかしいのですが、
何故このような値が入ってくるのか教えていただけませんでしょうか?
おそらくポインタの理解ができていないと思います...。
本当に申し訳ありません!!!
大サービスです・・
int iIndex;
for( iIndex = 0; iIndex < iCount ; iIndex++ )
{
int iSelectIndex = paIndex[iIndex];
.
.
}
不良PG様、早急なレスありがとうございました。
しかも大サービスまでしてくださって大変感謝しております。
今、早速実現したい処理を付け加えて、実行してみたところ、
上手く動作させる事ができました。
感激です!!!
これからは、もっとコードの理解、応用ができるように
勉強を進めていきたいとおもいます。
本当にありがとうございました!!