ツリーコントロールの作成


ツリーコントロールの基本的な作成手順

ツリーコントロールの基本的な作成手順は以下のとおりである。

  1. リソースエディタでツリーコントロールを作成する。 ダイアログやフォームビューにツリービューを貼り付ける。プロパティは好きなように設定してよいのだが、 とりあえず「ボタンあり」と「線を表示」属性は設定しておいたほうがツリーが見やすくなる。

  2. ツリー内のアイテムを表すイメージ(ビットマップ)を作成する。 ここでは3つのイメージを作成する。エクスプローラーのような感じにしたいので、 フォルダ用のイメージを2つ(開いた状態、閉じた状態)と、ファイル用のイメージを1つ作成する。 サイズは16x16とする。

  3. CImageListクラスのオブジェクトにイメージを登録し、CImageListオブジェクトをツリーコントロールに登録する。 ダイアログの場合、まずダイアログクラスにCImageListクラスのメンバ変数m_imageListを用意する。 次にOnInitDialog関数に以下の処理を記述する。
    	CBitmap bitmap;
    
    	// イメージリストの初期化
    	// 4番目の引数はリストが保持するイメージの数。5番目はリストを拡張するときの拡張イメージ数
    	m_imageList.Create(16, 16, ILC_MASK, 3, 2);
    
    	// ビットマップイメージをイメージリストに追加する
    	// Add関数の2番目の引数は透過色(マスク)を表す
    	bitmap.LoadBitmap(IDB_BITMAP1);
    	m_imageList.Add(&bitmap, RGB(0,128,128));
    	bitmap.DeleteObject();
    
    	bitmap.LoadBitmap(IDB_BITMAP2);
    	m_imageList.Add(&bitmap, RGB(0,128,128));
    	bitmap.DeleteObject();
    
    	bitmap.LoadBitmap(IDB_BITMAP3);
    	m_imageList.Add(&bitmap, RGB(0,128,128));
    	bitmap.DeleteObject();
    
    	// ツリーコントロールにイメージリストを設定
    	m_wndTree1.SetImageList(&m_imageList, TVSIL_NORMAL);
    
  4. ツリーコントロールにアイテムを挿入する。 InsertItem関数の2、3番目の引数はイメージリストに登録されたイメージのインデックスを指定する。 2番目は通常時、3番目は選択時のイメージである。 4番目の引数は親となるツリーアイテムであり、これを省略(あるいはNULLを指定する)とルートアイテムになる。 以下の例では「横浜市」というアイテムは「神奈川県」の子となり、「西区」というアイテムは「横浜市」の子になる。
    	HTREEITEM hItemRoot = m_wndTree1.InsertItem("神奈川県", 0, 1);
    	HTREEITEM hItemYkhm = m_wndTree1.InsertItem("横浜市", 0, 1, hItemRoot);
    	m_wndTree1.InsertItem("西区", 2, 2, hItemYkhm);
    	m_wndTree1.InsertItem("中区", 2, 2, hItemYkhm);
    	m_wndTree1.InsertItem("神奈川区", 2, 2, hItemYkhm);
    	m_wndTree1.InsertItem("横須賀市", 2, 2, hItemRoot);
    	m_wndTree1.InsertItem("相模原市", 2, 2, hItemRoot);
    	m_wndTree1.InsertItem("藤沢市", 2, 2, hItemRoot);
    

目次へ



アイテム挿入時に昇順でソートする

CTreeCtrl::InsertItem関数で次のようにTVI_SORT属性を指定すると、 アイテム挿入時にアイテムが50音順(アルファベット順)になるよう、挿入位置を自動的に設定する。
	HTREEITEM hItemRoot = m_wndTree1.InsertItem("神奈川県", 0, 1);
	HTREEITEM hItemYkhm = m_wndTree1.InsertItem("横浜市", 0, 1, hItemRoot);
	m_wndTree1.InsertItem("西区", 2, 2, hItemYkhm, TVI_SORT);
	m_wndTree1.InsertItem("中区", 2, 2, hItemYkhm, TVI_SORT;
	m_wndTree1.InsertItem("神奈川区", 2, 2, hItemYkhm, TVI_SORT);

目次へ