XP VS2005で開発しています。
リストコントロールにアイテム(+サブアイテム1個)を追加したいのですが、
3行追加で描画更新 というのを繰り返しやっていると
おかしくなります。毎回ではないですが、結構頻度があります。
○ 今の表示
1 1
2 2
3 3
---- ------
4 4
5 → 7
6 8
---- ------
7 5
8 6
9 9
という順番になっていまいます。
インデックスの指定などは順番通りに指定しているんですが、
なにが問題なのでしょうか?
追加ですが、
InsertItem() の戻り値が新しいアイテムのインデックスでなくて、
既に使用されている古いインデックス番号を返していました。
-1を返していないのでGetLastError()でみても エラーは取れません。
どこに問題があるのでしょうか?
こういう内容の場合、
ソースコードを載せた方がよろしいかと思います。
このようになっています。
ダイアログベースなのですが、while分を抜けると描画更新されます。
ループは1回のときもあれば3回のときもあります。
LVITEM lvi;
int iListPosition = m_cListControl.GetItemCount();
while(条件){
lvi.mask = LVIF_TEXT;
lvi.iItem = iListPosition;
lvi.iSubItem = 0;
lvi.pszText = aaa;
m_cListControl.InsertItem(&lvi);
lvi.iSubItem = 1;
//lvi.iItem = iListPosition;
lvi.pszText = bbbb;
m_cListControl.SetItem(&lvi);
iListPosition = m_cListControl.GetItemCount();
}
while() {
:
(中略)
:
iListPosition = m_cListControl.GetItemCount();
UpdateWindow(); // 追加…かなぁ。。
}
UpdateWindow()でも同じでした。
ちなみにGetItemCount()は正しい位置を返します。
InsertItemをするとその場所に挿入できていません。
lvi.cchTextMaxの値は?
lviの他メンバ値は初期設定せずに不定値のまま?
毎回 ::ZeroMemory(&lvi,sizeof(lvi));
で初期化してみました。
が、やはりダメでした。。。
VS2005だと考えにくいですけどこんなのとか
リストコントロールの表示がずれる障害
http://support.microsoft.com/kb/407206/ja?spid=3003&sid=325
COMCTL32.DLL のバージョンはいくつになっていますか?
実際のリストコントロールには、
「1, 2, 3, ...」
という文字列が入っているわけではなさそうですね。
となると、プロパティの[Sort]が[なし]になっているか確認してください。
お役に立て無さそうです…済みません。
私もbunさんの指摘に一票。
ソートが設定されているとInsertした順番には表示できないですね。
皆様 ほんとにありがとうございました。
ソートが設定されてました。
なしに設定して問題なく動作しました。 m__m