リストコントロール

[戻る]
初心者 2008/10/06(月) 19:44:20
XP VS2005で開発しています。

リストコントロールにアイテム(+サブアイテム1個)を追加したいのですが、
3行追加で描画更新 というのを繰り返しやっていると
おかしくなります。毎回ではないですが、結構頻度があります。

○   今の表示
1     1
2          2
3          3
----   ------
4          4
5   →     7
6          8
----    ------
7          5
8          6
9          9

という順番になっていまいます。
インデックスの指定などは順番通りに指定しているんですが、
なにが問題なのでしょうか?

初心者 2008/10/06(月) 20:40:09
追加ですが、
InsertItem() の戻り値が新しいアイテムのインデックスでなくて、
既に使用されている古いインデックス番号を返していました。
−1を返していないのでGetLastError()でみても エラーは取れません。

どこに問題があるのでしょうか?

bun 2008/10/06(月) 22:08:57
こういう内容の場合、
ソースコードを載せた方がよろしいかと思います。

初心者 2008/10/07(火) 09:46:14
このようになっています。
ダイアログベースなのですが、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();
}

2008/10/07(火) 10:26:24
while() {
 :
 (中略)
 :
 iListPosition = m_cListControl.GetItemCount();
 UpdateWindow(); // 追加…かなぁ。。
}

初心者 2008/10/07(火) 11:21:37
UpdateWindow()でも同じでした。
ちなみにGetItemCount()は正しい位置を返します。
InsertItemをするとその場所に挿入できていません。

2008/10/07(火) 11:59:46
lvi.cchTextMaxの値は?
lviの他メンバ値は初期設定せずに不定値のまま?

初心者 2008/10/07(火) 13:40:26
毎回 ::ZeroMemory(&lvi,sizeof(lvi));
で初期化してみました。
が、やはりダメでした。。。

くり 2008/10/07(火) 13:41:36
VS2005だと考えにくいですけどこんなのとか

リストコントロールの表示がずれる障害
http://support.microsoft.com/kb/407206/ja?spid=3003&sid=325

COMCTL32.DLL のバージョンはいくつになっていますか?

bun 2008/10/07(火) 13:42:46
実際のリストコントロールには、
「1, 2, 3, ...」
という文字列が入っているわけではなさそうですね。
となると、プロパティの[Sort]が[なし]になっているか確認してください。

2008/10/07(火) 13:49:07
お役に立て無さそうです…済みません。

PATIO 2008/10/07(火) 13:52:30
私もbunさんの指摘に一票。

ソートが設定されているとInsertした順番には表示できないですね。

初心者 2008/10/07(火) 16:42:56
[[解決]]
皆様 ほんとにありがとうございました。

ソートが設定されてました。

なしに設定して問題なく動作しました。 m__m

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