• 解説

    VisualStudio IDEのリソースエディタ等はリストビューコントロールで明細を表示しつつ、各項目をダブルクリックするとその項目を編集できるようになっています。

    これは、非常に便利なので自分の作ったものにも組み込みたいなんて思うんですが、CListCtrlにはそれらしきメンバはありません。

    面倒ですが自分で作りましょう。

    ダブルクリックした場所の行と列は受け取れるので単純にその箇所の座標を取得し、その場にエディットボックスなどを表示するだけ。

  • サンプル

    リストビューコントロールはレポートで作成します。
    また、初期化時に

    m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
    

    としておいてください。

    次にダブルクリックのイベントハンドラを追加します。

    void Dialog::OnDblClick(NMHDR * pNMHDR, LRESULT * pResult)
    {
        LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    
        *pResult = 0;
    
        if (pNMLV->iItem < 0 || pNMLV->iSubItem < 1)
            return;
    
        CRect ColumnRect;
    
        m_ListCtrl.GetSubItemRect(pNMLV->iItem, pNMLV->iSubItem, LVIR_BOUNDS, ColumnRect);
    
        m_EditControl.Create(WS_VISIBLE | ES_AUTOHSCROLL | ES_LEFT, ColumnRect,
                             &m_ListCtrl, IDC_EDIT_SUB_ITEM);
    
        m_EditControl.SetWindowText(GetItemText(pNMLV->iItem, pNMLV->iSubItem));
    
        m_EditControl.SetFocus();
    }
    

    ※宣言などは省略しています。

  • その他

    ラベル部分(左端のカラム)はプロパティで編集可能なので処理から除外しています。

    エディットコントロールなどはそのコントロールのLostFocusイベントなどでDestroyWindowしたりしなければなりません。

説明がわからないなどありましたらお問い合わせでお知らせください。

ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。