ListView_GetNextItemで無限ループになってしまう

[戻る]
Qoo 2005/07/11(月) 19:36:52
リストビューのマクロを使用して選択したアイテムを操作しようとしています。
ところが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);を入れると無限ループにな
らないのですが、消去する必要がないので取り除きました。
どうぞよろしくお願いします。

Qoo 2005/07/11(月) 19:38:47
失礼しました。
開発環境を書き忘れました。
コンパイラ:VC++6.0
で
Windows SDK win32API を作成しております。

シャノン 2005/07/11(月) 19:52:34
ListView_GetNextItem の第2引数がまずいです。
おそらく現状、nItem は常に選択されている最初のインデックスになっているでしょう。

K 2005/07/11(月) 19:53:14
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.

にあたります。
なので、「毎回、選択した中で最初のアイテム」がヒットしているんでしょう。

dairygoods 2005/07/11(月) 19:55:10
第2引数が、何個目から探すかを示します。
これが-1のままだと、毎回(-1の次である)0番目から探すので、
毎回0番目が見つかります。

Deleteすると、その削除した項目はもう見つけられないので、
ちゃんとその次が見つかります。

dairygoods 2005/07/11(月) 19:57:51
失礼。カブりました。

Qoo 2005/07/11(月) 19:58:27
そういうことだったんですね^^;
第2引数の値を何とか操作して頑張ってみます!
また何かありましたらよろしくお願いします!
皆さんありがとうございます!

Qoo 2005/07/11(月) 20:23:49
[[解決]]
ListView_GetNextItemの第2引数を直前に探し出したnItemの値にしたところ、
うまくいきました!ありがとうございました!

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