CListCtrlで詳細表示が出来ない

解決


うま  2005-03-25 20:55:49  No: 56789

非常に初歩的なことで申し訳ないのですが教えてください。
CListViewで詳細表示ができずに困っています。

手元にファイラーのソースがあり、殆どそのまま使用してアイコン(大)表示はできるようになりました。
そのまま詳細表示の部分も使用してみたのですが、アイコン表示の設定が残っているようです。

質問ですが、ざっくりアイコン表示と詳細表示の違いは以下で間違っていないでしょうか?

アイコン表示
・ModifyStyle で LVS_ICON 他指定
・アイコン(大)を追加
・ファイル名追加

詳細表示
・ModifyStyle で LVS_REPORT 他指定
・カラム追加
・アイコン(小)を追加
・ファイル名、カラム数分属性追加

詳細表示を指定しても画像が変わる(大→小)のみで、カラムやファイル名以外の属性は全く出てきません。

切り替えができないのかと思い、最初に詳細表示を指定してNG。
ModifyStyle()、InsertColumn()の戻り値は正常。
イメージリストの構築、追加、SetItem()の戻り値も全て正常です。
切り替え時のDeleteColumn() もtrueが帰ってきます。

お助けください○|‾|_

#問題無いなら無いで環境の再構築をした方が良さそうなので、その旨コメント頂けると助かります。


うま  2005-03-28 05:46:51  No: 56790

えー・・・重症ですTT
新規プロジェクトを以下手順で作成して、
・新しいプロジェクト→MFCアプリケーション
・アプリケーションの種類を「シングル ドキュメント」に、プロジェクト形式を「Windows エクスプローラ」に変更して完了
・xxxView::OnInitialUpdate() に以下ソース追加

  CListCtrl&  ctrl = GetListCtrl();
  ctrl.ModifyStyle(0,LVS_REPORT);

  char str[MAX_PATH];

  // ファイル名のセット
  ctrl.InsertItem( 0, "test", 0);
  strcpy(str,"名前");
  ctrl.InsertColumn(0, str, LVCFMT_LEFT, 280, 2);
  strcpy(str,"サイズ");
  ctrl.InsertColumn(1, str, LVCFMT_RIGHT, 50, -1);
  strcpy(str,"更新日時");
  ctrl.InsertColumn(2, str, LVCFMT_LEFT, 120, -1);

  // サイズ
  StrFormatByteSize( 10240, str, MAX_PATH );
  ctrl.SetItemText( 0, 1, str);

  // 更新日時
  str = "2005/03/27";
  ctrl.SetItemText( 0, 2, cst );

のみ記述した状態でビルド>起動してみましたが、詳細表示ができません。

試しにダイアログボックスにリストコントロールを貼り付けて、
OnInitDialog() 内で以下ソースを追加したところ、詳細表示になりました。

CListCtrl *ctrl = (CListCtrl*)GetDlgItem( IDC_LIST1);
// 以下.が->になる以外は同文

VisualStudio.NET 2002 SP適用済み+Win2kです。

多分何か足りないか、環境が悪いと思うのですが・・・
何か思い当たる点がありましたら、何でも良いのでアドバイスお願い致します。


うま  2005-03-28 09:06:12  No: 56791

大体解ってきました。
VC++6.0 で同様の記述をしてみた所、詳細表示ができました。
VisualStudio.NET 2002側の問題のようです。

幸いVC++6.0で作成したプロジェクトを.NET2002で読み込んだ所、
ソースを変更せずに詳細表示が出来た為、そこから作り直したいと思います。

完全解決ではありませんが、回避策が見つかったのでこれで質問を閉めさせて頂きます。

尚、もし.NET2002 で上手く出来た方がいましたら、情報提供いただけると助かります。
ご迷惑をお掛けしました。


nt  2005-07-15 18:46:25  No: 56792

時間が経ち過ぎて今更ですが、解決策です。

私も最近、全く同じ問題ではまって
調べているうちにここに来ました。
色々試しているうちに
エクスプローラタイプのプロジェクトでCListViewは×
MFC標準タイプのプロジェクトでCListViewは○
ってことが判明し、違いを見比べると
OnStyleChangedの有無でした。
そこで、このOnStyleChangedを
コメントアウトしてやると
使えるようになりました。

原因を考えたところ、
スケルトンコードのOnStyleChangedが不完全で
基本クラス(CListView)のOnStyleChangedを呼び出してやる必要が
あると言う事です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加