ツリー コントロール項目の状態の概要
ツリー コントロール (CTreeCtrl) の各項目には現在の状態があります。 たとえば、項目の選択、無効化、展開などを行うことができます。 ほとんどの場合、ツリーコントロールは項目の状態を自動的に設定して、項目の選択などのユーザー操作を反映します。 ただし、 SetItemState メンバー関数を使用して項目の状態を設定し、GetItemState メンバー関数を使用して項目の現在の状態を取得することもできます。 項目の状態の完全な一覧については、「Windows SDK のツリービュー コントロール定数」を参照してください。
項目の現在の状態は、nState パラメーターによって指定されます。 項目を選択したり、項目にフォーカスを設定するなど、ユーザーの操作を反映するために、ツリー コントロールが項目の状態を変更することがあります。 さらに、アプリケーションは、項目の状態を変更して、項目を無効または非表示にしたり、オーバーレイ イメージまたは状態イメージを指定したりすることがあります。
項目の状態を指定または変更する場合、nStateMask パラメーターは設定する状態ビットを指定し、nState パラメーターにはそれらのビットの新しい値を格納します。 たとえば、次の例では CTreeCtrl
オブジェクト (m_treeCtrl
) の親アイテム (hParentItem によって指定) の現在の状態を TVIS_EXPANDPARTIAL
に変更します:
TVITEM curItem;
HTREEITEM hParentItem;
hParentItem = m_TreeCtrl.GetSelectedItem();
//modify the parent item to keep the '+' sign
curItem.mask = TVIF_STATE | TVIF_HANDLE;
curItem.hItem = hParentItem;
curItem.state = TVIS_EXPANDPARTIAL;
curItem.stateMask = TVIS_EXPANDPARTIAL;
m_TreeCtrl.SetItem(&curItem);
状態を変更するもう 1 つの例は、項目のオーバーレイ イメージを設定することです。 これを実現するには、nStateMask に TVIS_OVERLAYMASK
値を含める必要があります。nState には、 INDEXTOOVERLAYMASK マクロを使用して 8 ビット左にシフトするオーバーレイ イメージの 1 から始まるインデックスを含める必要があります。 オーバーレイ イメージを指定しない場合、インデックスは 0 になることがあります。 前の CImageList:: SetOverlayImage 関数の呼び出しによって、オーバーレイ イメージがツリー コントロールのオーバーレイ イメージの一覧に追加されている必要があります。 関数は、追加するイメージの 1 から始まるインデックスを指定します。これは、INDEXTOOVERLAYMASK マクロで使用されるインデックスです。 ツリー コントロールは、最大 4 つのオーバーレイ イメージを持つことができます。
項目の状態のイメージを設定するには、nStateMask に TVIS_STATEIMAGEMASK
値を含める必要があります。nState には、INDEXTOSTATEIMAGEMASK マクロを使用して、左側の 12 ビットに移動した状態イメージの 1 から始まるインデックスを含める必要があります。 状態イメージを指定しない場合、インデックスは 0 になることがあります。 オーバーレイと状態のイメージの詳細については、「ツリーコントロールのイメージリスト」を参照してください。