none
CListCtrlのカラムとサブアイテム RRS feed

  • 質問

  • 初めて質問します。

     

    CListCtrlをレポートビューで使っています。表示する内容に応じてカラムの構成を切り替える必要が生じたので、カラムにサブアイテムのインデックスを設定して、そのサブアイテムに対応するカラムにテキストを表示しようとしています。

     

    問題をシンプルにするために、

    1.AppWizardでダイアログベースのアプリを作成

    2.リストコントロールを貼り付けて、Viewプロパティをレポートに設定

    3.このコントロールにDDXでm_lcという変数を割り当て

    の準備をしました。

     

    OnInitDialog()で次のようにコードを書きました。

     

     m_lc.InsertColumn(0, _T("カラム0"), 0, 120);
     m_lc.InsertColumn(1, _T("カラム1"), 0, 120, 1);
     m_lc.InsertColumn(2, _T("カラム2"), 0, 120, 3); // カラム2のサブアイテムインデックスを3に設定
     m_lc.InsertColumn(3, _T("カラム3"), 0, 120, 4); // カラム3のサブアイテムインデックスを4に設定

     

     m_lc.InsertItem(0, _T("サブアイテム0"));
     m_lc.SetItemText(0, 1, _T("サブアイテム1"));
     m_lc.SetItemText(0, 3, _T("サブアイテム3"));  // サブアイテムインデックス3、すなわちカラム2に"サブアイテム3"と表示されるはず
     m_lc.SetItemText(0, 4, _T("サブアイテム4"));  // サブアイテムインデックス4、すなわちカラム3に"サブアイテム4"と表示されるはず

    ところが、サブアイテムインデックスは無視され、3カラム目にサブアイテム3が表示され、サブアイテム4はどこにも表示されません。

     

    InsertColumn()とSetItemText()のヘルプを読む限りは、期待した動作を得られないのが不思議なのですが、何が問題なのでしょうか?

     

    2009年1月13日 8:26

回答

  • 正確なところは私には分かりません。

    ドキュメント類から私なりの解釈を書いてみましたが、鵜呑みにされないようにお願いします。

     

    --------

     

    InsertColumnはLVCOLUMN構造体を、SetItemTextはLVITEM構造体をそれぞれ使用しています。

     

    http://msdn.microsoft.com/en-us/library/bb774743(VS.85).aspx

    http://msdn.microsoft.com/en-us/library/bb774760(VS.85).aspx

     

    LVCOLUMN構造体のiSubItemメンバーの用途はよく分かりませんが、LVITEM構造体のiSubItemメンバーの説明と異なります。

    また、LVITEM構造体のiSubItemメンバーは「1で始まるサブアイテムのインデックス」と説明していることから、LVCOLUMN構造体のiSubItemメンバーとの関係はないのではないかという推測はできます。

    2009年1月13日 14:40
    モデレータ

すべての返信

  • 正確なところは私には分かりません。

    ドキュメント類から私なりの解釈を書いてみましたが、鵜呑みにされないようにお願いします。

     

    --------

     

    InsertColumnはLVCOLUMN構造体を、SetItemTextはLVITEM構造体をそれぞれ使用しています。

     

    http://msdn.microsoft.com/en-us/library/bb774743(VS.85).aspx

    http://msdn.microsoft.com/en-us/library/bb774760(VS.85).aspx

     

    LVCOLUMN構造体のiSubItemメンバーの用途はよく分かりませんが、LVITEM構造体のiSubItemメンバーの説明と異なります。

    また、LVITEM構造体のiSubItemメンバーは「1で始まるサブアイテムのインデックス」と説明していることから、LVCOLUMN構造体のiSubItemメンバーとの関係はないのではないかという推測はできます。

    2009年1月13日 14:40
    モデレータ
  • Azulean さん、

    ありがとうございます。

     

    確かにそのような解釈もあり得ますね。

     

    LVCOLUMN構造体のiSubItemメンバーについては謎のままですが、こちらが(勝手に?)期待している動作が得られないのだから仕方ありません。

     

    列の構成をダイナミックに変更したいというこちらの希望を満たすためには、QueryColumnみたいな関数でも作って、GetColumnで一致するインデックスを探し出してそのカラムに表示するなどの工夫をすることになりそうです。

    2009年1月14日 0:34