お世話になってます、環境はWinXP VC7 MFC Doc/View です。
リソースでダイアログを作成し、そこにリストコントロールを配置して
幾つかのアイテムを登録してレポート表示しているのですが
アイテムの状態(例えばサイズや更新日時など)がダイアログと無関係な
場所で更新された場合、それをリストコントロールに反映するには
どうすればよいのでしょうか?
今のところDeleteAllItems();で一度登録してあるアイテムを削除した後
再度更新されたアイテムを登録しなおしているのですが
消去した瞬間空白になりちらついたり、処理的にも負担が大きい気がします。
また、リストコントロールをスクロールさせている場合、
スクロール状態もリセットされてしまいます
ダイアログはモードレスです。
リストコントロールのアイテムの情報は
item.pszText=pDoc->item1.size;
という感じで、ドキュメントを直接参照しています
よろしくおねがいします。
リストコントロールに表示されている内容を変更したい
ということでしょうか?
CListCtrl::SetItemText()で文字列を変更できます。
それ以外の属性を変更したい場合は、CListCtrl::SetItem()です。
ありがとうございます。
SetItemText()を使うとできました、
InsertとSetの違いがよく分かっていなかったみたいです。
もう一つお尋ねしたいのですが、設定されているコラムやアイテムの名前は
変更できたのですが左寄やコラムのcxを後で変更するにはどうすればよいのでしょうか?
// リストコントロール初期設定----------A
void CTestDlg::SetLC(void)
{
//コラムの雛形作成
LVCOLUMN column;
column.mask=LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;//フォー
マット設定
column.fmt=LVCFMT_RIGHT;//フォーマット設定
for(int i=0;i<=10;i++)
{
column.cx=50;
column.pszText=NULL;
lc.InsertColumn(i,&column);
}
}
//ダイアログのボタンを押したときにコラムの内容を変更----------B
void CTestDlg::OnBnClickedButton1
{
/////コラムの情報更新
LVCOLUMN column;
column.pszText=名前;
column.cx=8;//-----------------C
lc.SetColumn(0,&column);
column.pszText=身長;
column.cx=6;//----------------C
lc.SetColumn(1,&column);
column.pszText=血液型;
column.fmt=LVCFMT_LEFT;//--------D
column.cx=6;//---------------C
lc.SetColumn(2,&column);
}
Aでリストコントロールの内容を仮設定してBで実装していますが
CのCXとDのフォーマットの設定が反映されません
よろしくお願いします。
あと最後に、使っていないコラムやアイテムがあると無駄に空欄ができるのでを非表示に
したいのですが
可能なのでしょうか?削除してしまうと使いたいときに作成しなおさなくてはならないの
で
非表示がいいと思うのですが
WinXP VC7 MFC Doc/View
CListCtrl::SetColumn()に渡すLVCOLUMN 構造体ですが、
maskというメンバに何も設定していないようですね。
列を追加するときとは別に、変更するときにも
「何を変更するのか」をmaskに指定してあげる必要があります。
ありがとうございます。
maskを指定するとできました。
>使っていないコラムやアイテムがあると無駄に空欄ができるので非表示にしたいのです
が、
>可能なのでしょうか?削除してしまうと使いたいときに作成しなおさなくてはならない
ので
>非表示がいいと思うのですが。
こちらの方はよい方法ないでしょうか?