ListView_GetNextItemで無限ループになってしまう – プログラミング – Home

通知
すべてクリア

[解決済] ListView_GetNextItemで無限ループになってしまう


Qoo
 Qoo
(@Qoo)
ゲスト
結合: 20年前
投稿: 25
Topic starter  

リストビューのマクロを使用して選択したアイテムを操作しようとしています。
ところが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
 Qoo
(@Qoo)
ゲスト
結合: 20年前
投稿: 25
Topic starter  

失礼しました。
開発環境を書き忘れました。
コンパイラ:VC++6.0

Windows SDK win32API を作成しております。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

ListView_GetNextItem の第2引数がまずいです。
おそらく現状、nItem は常に選択されている最初のインデックスになっているでしょう。


返信引用
K
 K
(@K)
ゲスト
結合: 23年前
投稿: 98
 

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

第2引数が、何個目から探すかを示します。
これが-1のままだと、毎回(-1の次である)0番目から探すので、
毎回0番目が見つかります。

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

失礼。カブりました。


返信引用
Qoo
 Qoo
(@Qoo)
ゲスト
結合: 20年前
投稿: 25
Topic starter  

そういうことだったんですね^^;
第2引数の値を何とか操作して頑張ってみます!
また何かありましたらよろしくお願いします!
皆さんありがとうございます!


返信引用
Qoo
 Qoo
(@Qoo)
ゲスト
結合: 20年前
投稿: 25
Topic starter  

ListView_GetNextItemの第2引数を直前に探し出したnItemの値にしたところ、
うまくいきました!ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました