ListView_DeleteItem() をコールすると ListView_EnsureVisible() がうまく動作しません

[戻る]
たま 2009/05/24(日) 06:06:44
WinXP Home(SP3), VC++6.0 で開発しています。
MFC は使用しておりません。

リストビューコントロールを使って、あるシステムのログを表示させようとしています。
表示形式は「レポート」で、上から下に向かって1行ずつログを追加表示していく形なの
ですが
新しい行が追加されたらその行が表示される位置まで自動スクロールするようにしています。

そして、一定行数を超えたら最上行から削除していく仕様なのですが、この削除処理を入
れると
新規追加行への自動スクロールが機能しなくなって困っています。

以下がソースです。
ListView_DeleteItem() をコールすると、新規追加行への自動スクロールが機能しません。
ちなみに ListView_EnsureVisible() の後にコールするようにしてもダメでした。
原因および対策などがございましたらご教授頂けると助かります。

---------------------------------------------------------------------------
HWND hDlg;      // 親ダイアログのハンドル
HWND hList;     // リストビューのハンドル
LVITEM stItem;  // アイテム構造体

// リストビューのハンドルを取得
hList = GetDlgItem(hDlg, IDC_LIST_LOG);
    
// 先頭行削除
ListView_DeleteItem(hList , 0);

// アイテム構造体にデータを格納
stItem.mask = LVIF_TEXT;
stItem.iItem = nRow;         // 行番号
stItem.iSubItem = 0;
stItem.pszText = szMessage;  // 追加文字列

// アイテム追加
ListView_InsertItem(hList , &stItem);

// 追加したアイテムの行に移動
ListView_EnsureVisible(hList, nRow, FALSE);
---------------------------------------------------------------------------

不足している情報があればおっしゃって下さい。
よろしくお願い致します。

たま 2009/05/25(月) 08:35:24
[[解決]]
追加先の行番号である nRow の値を正しくすることで解決しました。
初歩的なミスで申し訳ありませんでした。

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