リストビューのマクロを使用して選択したアイテムを操作しようとしています。
ところがListView_GetNextItemのマクロを使っても同じ番号が呼び出され続けて無限ルー
プになってしまいます。
0,2,5,6,9と選んだらちゃんとその値を取得できるようにできないでしょうか?
プログラムは次のようになっています。
void 関数名{
while((nItem = ListView_GetNextItem
( hList, -1, LVNI_ALL | LVNI_SELECTED))!=-1) {
ここでデータの操作をする。リストビューには関係ないデータなので省略。
}
return ;
}
不思議とwhile文の中にListView_DeleteItem(hList, nItem);を入れると無限ループにな
らないのですが、消去する必要がないので取り除きました。
どうぞよろしくお願いします。
失礼しました。
開発環境を書き忘れました。
コンパイラ:VC++6.0
で
Windows SDK win32API を作成しております。
ListView_GetNextItem の第2引数がまずいです。
おそらく現状、nItem は常に選択されている最初のインデックスになっているでしょう。
ListView_GetNextItem は LVM_GETNEXTITEM を使っています。
第2引数に -1 を渡していますが、LVM_GETNEXTITEM のパラメータでは
iStart
Index of the item to begin the searching with, or -1 to find the first item
that matches the specified flags. The specified item itself is excluded
from the search.
にあたります。
なので、「毎回、選択した中で最初のアイテム」がヒットしているんでしょう。
第2引数が、何個目から探すかを示します。
これが-1のままだと、毎回(-1の次である)0番目から探すので、
毎回0番目が見つかります。
Deleteすると、その削除した項目はもう見つけられないので、
ちゃんとその次が見つかります。
失礼。カブりました。
そういうことだったんですね^^;
第2引数の値を何とか操作して頑張ってみます!
また何かありましたらよろしくお願いします!
皆さんありがとうございます!
ListView_GetNextItemの第2引数を直前に探し出したnItemの値にしたところ、
うまくいきました!ありがとうございました!