Share via


ツリー ビュー コントロールについて

ツリービュー コントロールは、ドキュメント内の見出し、インデックス内のエントリ、ディスク上のファイルやディレクトリなど、アイテムの階層リストを表示するウィンドウです。 各項目は、ラベルとオプションのビットマップ イメージで構成され、関連付けられているサブ項目の一覧を含むことができます。 アイテムをクリックすると、ユーザーは関連するサブアイテムのリストを展開または折りたたむことができます。

次の図は、ルート ノード、展開可能ノード、および折りたたまれたノードを含む単純なツリービュー コントロールを示しています。 コントロールは、選択したアイテムに 1 つのビットマップを使用し、他のアイテムには別のビットマップを使用します。

screen shot showing five nodes in a hierarchy; the text of one node is selected, but nodes are not linked to each other by lines

ツリービュー コントロールを作成した後、コントロールにメッセージを送信することで、アイテムを追加、削除、配置、またはその他の操作を行います。 各メッセージには、メッセージを明示的に送信する代わりに使用できる対応のマクロが 1 つ以上あります。

このセクションでは、次のトピックについて説明します。

ツリービュー スタイル

ツリービュー スタイルは、ツリービュー コントロールの外観を制御します。 初期スタイルは、ツリービュー コントロールを作成するときに設定します。 ツリービュー コントロールを作成した後、GetWindowLong および SetWindowLong 関数を使用して ツリービュー スタイルを取得および変更できます。

TVS_HASLINES スタイルは、次の図に示すように、子アイテムを親アイテムにリンクする線を描画することで、ツリービュー コントロールの階層のグラフィック表現を拡張します。

screen shot showing the previous arrangement, but with lines joining the nodes; the first line descends from the root node

このスタイル自体では、階層のルートに線は描画されません。 そのためには、TVS_HASLINESTVS_LINESATROOT のスタイルを組み合わせる必要があります。 結果を次の図に示します。

screen shot showing the previous arrangement, but with an additional horizontal line leading to the root node

ユーザーは、親項目をダブルクリックすることで、その子項目のリストを展開または折りたたみできます。 TVS_HASBUTTONS スタイルを持つツリービュー コントロールは、各親アイテムの左側にボタンを追加します。 ユーザーは、親アイテムをダブルクリックして子を展開または折りたたむ代わりに、ボタンを 1 回クリックするだけになります。 TVS_HASBUTTONS は、階層のルートにある項目にボタンを追加しません。 そのためには、TVS_HASLINESTVS_LINESATROOTTVS_HASBUTTONS の組み合わせが必要です。 このスタイルの組み合わせを以下の図に示します。

screen shot showing the previous arrangement, but with expand/collapse buttons at each vertex of two lines

TVS_CHECKBOXES スタイルは、各アイテムの横にチェックボックスを作成します。 チェックボックス スタイルを使用する場合は、ツリービュー コントロールを作成し、TVS_CHECKBOXES スタイル (SetWindowLong を使用) を設定して、ツリーを追加します。 そうしないと、タイミングの問題に応じて、チェックボックスがオフになる場合があります。 次の図は、チェックボックスのスタイルを示しています。

screen shot showing the previous arrangement, but with a checkbox next to each node; two of the checkboxes are selected

TVS_FULLROWSELECT スタイルを使用すると、選択範囲の強調表示がアイテムだけでなく、コントロールの全幅にわたって拡張されます。 次の図は、このスタイルを示しています。

screen shot showing the original arrangement of five nodes with no lines, but the selection highlight extends the full width of the control

TVS_EDITLABELS スタイルを使用すると、ユーザーはツリービュー アイテムのラベルを編集できます。 ラベルの編集の詳細については、「ツリービューのラベル編集」を参照してください。

これらのスタイルとその他のスタイルの詳細については、「ツリービュー コントロール ウィンドウのスタイル」を参照してください。

親アイテムと子アイテム

ツリービュー コントロール内のアイテムには、子アイテムと呼ばれる サブアイテムの一覧を関連付けることができます。 1 つ以上の子アイテムがあるアイテムを親アイテムと呼びます。 子アイテムは親アイテムの下に表示され、親に従属していることを示すためにインデントされます。 親を持たないアイテムは階層の最上位に表示され、ルート アイテムと呼ばれます。

アイテムをツリービュー コントロールに追加するには、TVM_INSERTITEM メッセージをコントロールに送信します。 このメッセージは、アイテムを一意に識別する HTREEITEM 型へのハンドルを返します。 アイテムを追加するときは、新しいアイテムの親アイテムへのハンドルを指定する必要があります。 TVINSERTSTRUCT 構造体で親アイテム ハンドルの代わりに NULL または TVI_ROOT 値を指定すると、アイテムはルート アイテムとして追加されます。

いつでも、親項目の子項目のリストの状態を展開または折りたたみにすることができます。 状態が展開の場合、子項目は親項目の下に表示されます。 それが折りたたみの場合、子項目は表示されません。 ユーザーが親項目をダブルクリックするか、親項目が TVS_HASBUTTONS スタイルの場合は親項目に関連付けられているボタンをユーザーがクリックすると、展開と折りたたまれた状態が自動的に切り替わります。 アプリケーションは、TVM_EXPAND メッセージを使用して子アイテムを展開または折りたたむことができます。

ツリービュー コントロールは、親アイテムの子アイテムの一覧が展開または折りたたまれようとしているときに、親ウィンドウに TVN_ITEMEXPANDING 通知メッセージを送信します。 この通知により、アプリケーションは、変更を阻止したり、子アイテムのリストの状態に依存する親アイテムの属性を設定したりできます。 リストの状態を変更した後、ツリービュー コントロールは親ウィンドウに TVN_ITEMEXPANDED 通知メッセージを送信します。

子項目のリストが展開されると、親項目を基準にインデントされます。 インデントの量は、TVM_SETINDENT メッセージを使用して設定するか、TVM_GETINDENT メッセージを使用して現在の量を取得できます。

ツリービュー コントロールは、ツリービュー コントロールを作成するプロセスのヒープから割り当てられたメモリを使用します。 ツリービュー アイテムの最大数は、ヒープで使用可能なメモリの量に基づきます。

アイテム ラベル

通常、アイテムのラベルのテキストは、アイテムをツリービュー コントロールに追加するときに指定します。 TVM_INSERTITEM メッセージには、ラベルのテキストを含む文字列などアイテムのプロパティを定義する TVITEM 構造体が含まれます。

ツリービュー コントロールは、各アイテムを格納するためのメモリを割り当てます。アイテムラベルのテキストは、このメモリのかなりの部分を占めます。 アプリケーションがツリービュー コントロールの文字列のコピーを保持する場合、ツリービューの実際の文字列を渡す代わりに、TVITEMpszText メンバーの LPSTR_TEXTCALLBACK 値を指定すると、コントロールのメモリ要件を減らすことができます。 LPSTR_TEXTCALLBACK を使用すると、ツリービュー コントロールは、アイテムを再描画する必要があるたびに、親ウィンドウからアイテムのラベルのテキストを取得します。 テキストを取得するために、ツリービュー コントロールは NMTVDISPINFO 構造体のアドレスを含む TVN_GETDISPINFO 通知メッセージを送信します。 親ウィンドウは、含まれる構造体の適切なメンバーを埋める必要があります。

ツリービュー ラベルの編集

ユーザーは、TVS_EDITLABELS スタイルを持つツリービュー コントロール内のアイテムのラベルを直接編集できます。 ユーザーは、フォーカスがある項目のラベルをクリックして編集を開始します。 アプリケーションは、TVM_EDITLABEL メッセージを使用して編集を開始します。 ツリービュー コントロールは、編集の開始時と、編集のキャンセル時または完了時に親ウィンドウに通知します。 編集が完了すると、親ウィンドウは、必要に応じてアイテムのラベルを更新します。

ラベルの編集が始まると、ツリービュー コントロールは親ウィンドウに TVN_BEGINLABELEDIT 通知メッセージを送信します。 この通知を処理することで、アプリケーションは一部のラベルの編集を許可し、他のラベルの編集を禁止することができます。 0 を返すと編集が可能になり、0 以外を返すと編集できなくなります。

ラベルの編集が取り消されるか完了すると、ツリービュー コントロールは親ウィンドウに TVN_ENDLABELEDIT 通知メッセージを送信します。 lParam パラメーターは、NMTVDISPINFO 構造体のアドレスです。 item パラメーターは、アイテムを識別し、編集されたテキストを含む TVITEM 構造体です。 新しいラベルを保持する場合は、親ウィンドウがアイテムのラベルを更新する必要があります。 編集が取り消された場合、TVITEMpszText メンバーは、0 です。

ラベルの編集中は (通常は TVN_BEGINLABELEDIT 通知メッセージに応答して)、TVM_GETEDITCONTROL メッセージを使用すると、ラベル編集に使用される編集コントロールへのハンドルを取得できます。 編集コントロールは EM_SETLIMITTEXT メッセージを送信して、ユーザーが入力できるテキストの量を制限したり、無効な文字をインターセプトしたり破棄したりできます。 ただし、編集コントロールは、TVN_BEGINLABELEDIT が送信されたのみに表示されます。

ツリービュー アイテムの位置

アイテムの初期位置は、TVM_INSERTITEM メッセージを使用してツリービュー コントロールにアイテムが追加された際に設定されます。 メッセージには、親アイテムへのハンドル、新しいアイテムが挿入されるアイテムへのハンドルを指定する TVINSERTSTRUCT 構造体が含まれます。 2 番目のハンドルは、指定された親の子アイテム、または値 (TVI_FIRST、TVI_LAST、または TVI_SORT) のいずれかを識別する必要があります。

TVI_FIRST または TVI_LAST が指定されている場合、ツリービュー コントロールは、指定された親アイテムの子アイテムのリストの先頭または末尾に新しいアイテムを配置します。 TVI_SORT を指定すると、ツリービュー コントロールは、アイテムラベルのテキストに基づいて、新しいアイテムをアルファベット順に子アイテムのリストに挿入します。

TVM_SORTCHILDREN メッセージを使用すると、親アイテムの子アイテムの一覧をアルファベット順に並べることができます。 このメッセージには、指定された親アイテムの子孫である子アイテムのすべてのレベルもアルファベット順に並べ替えるかどうかを指定するパラメーターが含まれています。

TVM_SORTCHILDRENCB メッセージを使用すると、定義した条件に基づいて子アイテムを並べ替えることができます。 このメッセージを使用する場合は、2 つの子アイテムの相対的な順序を決定する必要があるときにツリービュー コントロールが呼び出すことができるアプリケーション定義のコールバック関数を指定します。 コールバック関数は、比較対象のアイテムに対して 2 つの 32 ビットのアプリケーション定義値と、TVM_SORTCHILDRENCB を送信するときに指定する 3 番目の 32 ビット値を受け取ります。

ツリービュー アイテムの状態の概要

ツリービュー コントロールの各アイテムには、現在の状態があります。 各アイテムの状態情報には、一連のビット フラグと、アイテムの状態イメージとオーバーレイ イメージを示すイメージ リスト インデックスが含まれます。 ビット フラグは、アイテムが選択されているかどうか、無効になっているか、展開されているかなどを示します。 ほとんどの場合、ツリービュー コントロールは、アイテムの選択などのユーザー アクションを反映するようにアイテムの状態を自動的に設定します。 ただし、TVM_SETITEM メッセージを使用して、アイテムの状態を設定したり、TVM_GETITEM メッセージを使用して、アイテムの現在の状態を取得できます。 アイテムの完全なリストについては、「ツリービュー コントロール アイテムの状態」を参照してください。

アイテムの現在の状態は、TVITEM 構造体の状態メンバーによって指定されます。 ツリービュー コントロールは、アイテムの選択やアイテムへのフォーカスの設定などのユーザー アクションを反映するように、アイテムの状態を変更する場合があります。 さらに、アプリケーションは、項目の状態を変更して、項目を無効または非表示にしたり、オーバーレイ イメージまたは状態イメージを指定したりすることがあります。

アイテムの状態を指定または変更する場合、TVITEMstatemask メンバーは設定する状態ビットを指定し、状態メンバーにはそれらのビットの新しい値が含まれます。

アイテムのオーバーレイ イメージを設定するには、statemaskTVIS_OVERLAYMASK 値を含める必要があり、state には INDEXTOOVERLAYMASK マクロを使用して 左に 8 ビットシフトされたオーバーレイ イメージの 1 から始まるインデックスを含める必要があります。 インデックスを 0 にすると、オーバーレイ イメージを指定できません。

状態イメージは、アプリケーション定義の状態を示すアイテムのアイコンの横に表示されます。 状態イメージは、TVM_SETIMAGELIST メッセージを送信することによって指定される状態イメージ リストに含まれます。 アイテムの状態イメージを設定するには、TVITEM 構造体の statemask メンバーに TVIS_STATEIMAGEMASK 値を含めます。 構造体の状態メンバーのビット 12 から 15 は、描画するイメージの状態イメージ リスト内のインデックスを指定します。

状態イメージのインデックスを設定するには、INDEXTOSTATEIMAGEMASK を使用します。 このマクロはインデックスを受け取り、ビット 12 から 15 を適切に設定します。 アイテムに状態イメージがないことを示すには、インデックスを 0 に設定します。 この規則は、状態イメージ リストのイメージ ゼロを状態イメージとして使用できないことを意味します。 状態メンバーのビット 12 から 15 を分離するには、TVIS_STATEIMAGEMASK マスクを使用します。 オーバーレイ イメージと状態イメージの詳細については、「ツリービュー イメージ リスト」を参照してください。

アイテム選択

ツリービュー コントロールは、選択内容が 1 つのアイテムから別のアイテムに変更されたときに、TVN_SELCHANGING および TVN_SELCHANGED 通知メッセージを送信して親ウィンドウに通知します。 どちらの通知にも、変更がマウス クリックの結果かキーボード操作の結果かを指定する値が含まれます。 選択項目の情報と、選択解除された項目の情報も含まれます。 この情報を使用すると、項目の選択状態に依存する項目属性を設定できます。 TVN_SELCHANGING の応答で TRUE を返すと、選択は変更されず、FALSE を返すと変更が許可されます。

アプリケーションは、TVM_SELECTITEM メッセージを送信することで、選択を変更できます。

アイテム情報

ツリービュー コントロールは、コントロール内のアイテムに関する情報を取得する多数のメッセージをサポートします。

TVM_GETITEM メッセージは、アイテムのハンドルと属性を取得できます。 アイテムの属性には、現在の状態、アイテムの選択されたイメージと選択されていないビットマップイメージのコントロールのイメージ リスト内のインデックス、アイテムに子アイテムがあるかどうかを示すフラグ、アイテムのラベル文字列のアドレス、およびアイテムのアプリケーション定義の 32 ビット値が含まれます。

TVM_GETNEXTITEM メッセージは、現在のアイテムに対して指定されたリレーションシップを持つツリービュー コントロールを取得します。 メッセージでは、アイテムの親、次または前の表示アイテム、最初の子アイテムなどを取得できます。

TVM_GETITEMRECT メッセージはツリービュー アイテムの外接矩形を取得します。 TVM_GETCOUNT および TVM_GETVISIBLECOUNT メッセージは、ツリービュー コントロール内のアイテム数とツリービュー コントロールのウィンドウでそれぞれ完全に表示できるアイテム数を取得します。 TVM_ENSUREVISIBLE メッセージを使用すると、特定のアイテムを表示するようにすることができます。

ツリービューのイメージ リスト

ツリービュー コントロール内の各アイテムには、ビットマッピングされた 4 つのイメージを関連付けることができます。

  • アイテムが選択された場合に表示される開いているフォルダなどの画像。
  • アイテムが選択されていない場合に表示される閉じたフォルダなどの画像。
  • 選択したイメージまたは選択されていないイメージの上に透過的に描画されるオーバーレイ イメージ。
  • 状態イメージ。つまり、選択されたイメージまたは選択されていないイメージの左側に表示される追加イメージ。 オンになっているチェックボックスやオフになっているチェックボックスなどの状態イメージを使用して、アプリケーション定義のアイテム状態を示します。

既定では、ツリービュー コントロールにはアイテム イメージは表示されません。 アイテムイメージを表示するには、イメージ リストを作成し、コントロールに関連付ける必要があります。 イメージ リストの詳細については、「イメージ リスト」を参照してください。

ツリービュー コントロールには、通常のイメージ リストと状態イメージ リストという 2 つのイメージ リストを含めることができます。 通常のイメージ リストには、選択したイメージ、選択されていないイメージ、オーバーレイ イメージが格納されます。 状態イメージ リストには、状態イメージが格納されます。 ImageList_Create 関数を使用してイメージ リストを作成し、他のイメージ リスト関数を使用してイメージ リストにビットマップを追加します。 次に、TVM_SETIMAGELIST メッセージを使用して、イメージ リストをツリービュー コントロールに関連付けます。 TVM_GETIMAGELIST メッセージは、ツリービュー コントロールのイメージ リストのいずれかに対するハンドルを取得します。 このメッセージは、リストにイメージを追加する必要がある場合に便利です。

選択したイメージと選択されていないイメージに加えて、ツリービュー コントロールの通常のイメージ リストには、最大 4 つのオーバーレイ イメージを含めることができます。 オーバーレイ イメージは 1 から始まるインデックスによって識別され、選択したイメージと選択されていないイメージの上に透過的に描画されるように設計されています。 オーバーレイ マスク インデックスを通常のイメージ リスト内のイメージに割り当てるには、ImageList_SetOverlayImage 関数を呼び出します。

既定では、すべてのアイテムに、選択した状態と選択されていない状態の両方で、通常のイメージ リストの最初のイメージが表示されます。 また、既定では、アイテムにはオーバーレイ イメージや状態イメージは表示されません。 アイテムの既定の動作は、TVM_INSERTITEM または TVM_SETITEM メッセージを送信することで変更できます。 これらのメッセージは、TVITEM 構造体を使用して、アイテムのイメージ リスト インデックスを指定します。

アイテムの選択されたイメージと選択されていないイメージを指定するには、TVITEM 構造体のマスクメンバーで TVIF_SELECTEDIMAGE および TVIF_IMAGE ビットを設定し、iSelectImage および iImage メンバーのコントロールの通常イメージ リストでインデックスを指定します。 または、インデックスを指定する代わりに、iSelectImageiImage で I_IMAGECALLBACK 値を指定することもできます。 これにより、アイテムが再描画されるたびに、コントロールはイメージ リスト インデックスの親ウィンドウに対してクエリを実行します。 コントロールは、TVN_GETDISPINFO 通知メッセージを送信してインデックスを取得します。

オーバーレイ イメージをアイテムに関連付けるには、INDEXTOOVERLAYMASK マクロを使用して、アイテムの TVITEM 構造体の状態メンバーにオーバーレイ マスク インデックスを指定します。 stateMask メンバーに TVIS_OVERLAYMASK ビットも設定する必要があります。 オーバーレイ マスク インデックスは 1 から始まります。インデックスが 0 の場合は、オーバーレイ イメージが指定されていないことを示します。

状態イメージは別の状態イメージ リストに格納され、インデックスによって識別されます。 状態イメージ・リストを指定するには、TVM_SETIMAGELIST メッセージを送信します。 1 から始まるインデックスを使用して状態イメージを識別するリスト ビュー コントロールとは異なり、ツリービュー コントロールの状態イメージは 0 から始まるインデックスによって識別されます。 ただし、インデックスが 0 の場合は、アイテムに状態イメージがないことを示します。 そのため、イメージ 0 を状態イメージとして使用することはできません。 アイテムの状態と状態イメージの詳細については、「ツリービュー アイテムの状態の概要」を参照してください。

ドラッグ アンド ドロップ操作

ツリービュー コントロールは、ユーザーがアイテムのドラッグを開始したときに親ウィンドウに通知します。 親ウィンドウは、ユーザーがマウスの左ボタンを使用してアイテムのドラッグを開始すると、TVN_BEGINDRAG 通知メッセージを受信し、ユーザーが右ボタンを使用してドラッグを開始すると、TVN_BEGINRDRAG 通知メッセージを受信します。 ツリービュー コントロールに TVS_DISABLEDRAGDROP スタイルを指定することで、ツリービュー コントロールがこれらの通知を送信しないようにできます。

ドラッグ操作中に TVM_CREATEDRAGIMAGE メッセージを使用すると、表示するイメージを取得できます。 ツリービュー コントロールは、ドラッグされるアイテムのラベルに基づいてドラッグ ビットマップを作成します。 次に、ツリービュー コントロールはイメージ リストを作成し、ビットマップを追加して、イメージ リストへのハンドルを返します。

実際に項目をドラッグするコードを指定する必要があります。 これには通常、イメージ リスト関数のドラッグ機能を使用し、ドラッグ操作の開始後に親ウィンドウに送信される WM_MOUSEMOVE および WM_LBUTTONUP (または WM_RBUTTONUP) メッセージの処理が含まれます。

ツリービュー コントロール内のアイテムをドラッグ アンド ドロップ操作の対象にする場合は、マウス ポインターが対象 アイテムにいつ置かれているかを知る必要があります。 TVM_HITTEST メッセージを使用して確認できます。 マウス ポインターの現在の座標を含む TVHITTESTINFO 構造体の アドレスを指定します。 SendMessage 関数が戻ると、構造体には、ツリービュー コントロールに対するマウス ポインターの位置を示すフラグが含まれます。 ポインターがツリービュー コントロール内のアイテム上にある場合、構造体にはアイテムへのハンドルも含まれます。

アイテムがドラッグ アンド ドロップ操作の対象であることを示すには、TVM_SETITEM メッセージを使用して状態を TVIS_DROPHILITED 値に設定します。 この状態にある項目は、ドラッグ アンド ドロップ ターゲットを示すために使用されるスタイルで描画されます。

ツリービュー コントロールの通知メッセージ

ツリービュー コントロールは、WM_NOTIFY メッセージの形式で親ウィンドウに次の通知メッセージを送信します。

Notification 説明
TVN_BEGINDRAG ドラッグ アンド ドロップ操作の開始を通知します。
TVN_BEGINLABELEDIT   インプレース ラベル編集の開始を通知します。
TVN_BEGINRDRAG マウスの右ボタンでドラッグ アンド ドロップ操作を開始したことを通知します。
TVN_DELETEITEM 特定のアイテムの削除を通知します。
TVN_ENDLABELEDIT ラベル編集の終了を通知します。
TVN_GETDISPINFO ツリービュー コントロールがアイテムを表示するために必要な情報を要求します。
TVN_ITEMEXPANDED 親アイテムの子アイテムの一覧が展開されたまたは折りたたまれたことを通知します。
TVN_ITEMEXPANDING 親アイテムの子アイテムの一覧が展開されようとしているまたは折りたたまれようとしていることを通知します。
TVN_KEYDOWN キーボード イベントを通知します。
TVN_SELCHANGED 選択アイテムが別のアイテムに変更されたことを通知します。
TVN_SELCHANGING 選択アイテムが変更されようとしていることを通知します。
TVN_SETDISPINFO アイテムに対して維持している情報を更新する必要があることを親ウィンドウに通知します。

 

既定のツリービュー コントロールのメッセージ処理

このセクションでは、ツリービュー コントロールによって実行されるウィンドウ メッセージ処理について説明します。 ツリービュー コントロールに固有のメッセージについては、ここではなく、このドキュメントの他のセクションで説明します。

メッセージ 処理の実行
WM_COMMAND EN_UPDATE および EN_KILLFOCUS 編集コントロールの通知メッセージを処理し、他のすべての編集コントロール通知を親ウィンドウに転送します。 戻り値がありません。
WM_CREATE メモリを割り当て内部データ構造体を初期化します。 成功した場合は 0 を返し、そうでない場合は -1 を返します。
WM_DESTROY コントロールに関連付けられているすべてのリソースを解放します。 0 を返します。
WM_ENABLE コントロールを有効または無効にします。
WM_ERASEBKGND ツリービュー コントロールの現在の背景色を使用して、ウィンドウの背景を消去します。 TRUE を返します。
WM_GETDLGCODE DLGC_WANTARROWS 値と DLGC_WANTCHARS 値の組み合わせを返します。
WM_GETFONT 現在のラベル フォントのハンドルを返します。
WM_HSCROLL ツリービュー コントロールをスクロールします。 スクロールすると TRUE を返し、それ以外の場合は、FALSE を返します。
WM_KEYDOWN すべてのキーに対して、親ウィンドウに TVN_KEYDOWN 通知メッセージを送信します。 ユーザーが ENTER キーを押すと、NM_RETURN (ツリービュー) 通知メッセージを送信します。 ユーザーが方向キーまたは、PAGE UP キー、PAGE DOWN キー、HOME キー、END キー、BACKSPACE キー を押すと、キャレットが移動します。 ユーザーが Ctrl キーとそれらのキーを組み合わせて押すと、ツリービュー コントロールがスクロールします。 キーが処理される場合は TRUE、それ以外の場合は FALSE を返します。
WM_KILLFOCUS フォーカスされたアイテム (存在する場合) を再描画し、NM_KILLFOCUS (ツリービュー) 通知メッセージを親ウィンドウに送信します。
WM_LBUTTONDBLCLK ラベルの編集をキャンセルし、アイテムがダブルクリックされた場合は、NM_DBLCLK (ツリービュー) 通知メッセージを親ウィンドウに送信します。 親ウィンドウが 0 を返す場合、ツリービュー コントロールはアイテムの展開状態を切り替え、親ウィンドウに TVN_ITEMEXPANDING および TVN_ITEMEXPANDED 通知メッセージを送信します。 戻り値がありません。
WM_LBUTTONDOWN ユーザーが親アイテムに関連付けられているボタンをクリックすると、展開された状態を切り替えます。 ユーザーがアイテムラベルをクリックすると、ツリービュー コントロールが選択され、フォーカスがアイテムに設定されます。 ユーザーがマウス ボタンを離す前にマウスを移動すると、ツリービュー コントロールによってドラッグ アンド ドロップ操作が開始されます。 戻り値がありません。
WM_PAINT ツリービュー コントロールの無効な領域をペイントします。 0 を返します。 wParam パラメーターが NULL 以外の場合、コントロールは値がデバイス コンテキスト (HDC) へのハンドルであり、そのデバイス コンテキストを使用して描画することを前提としています。
WM_RBUTTONDOWN アイテムがクリックされ、ドラッグ操作が開始されたかどうかを確認します。 操作が開始されると、TVN_BEGINRDRAG 通知メッセージが親ウィンドウに送信され、ドロップ先が強調表示されます。 それ以外の場合は、NM_RCLICK(ツリービュー) 通知メッセージを親ウィンドウに送信します。 戻り値がありません。
WM_SETFOCUS フォーカスされたアイテム (存在する場合) を再描画し、NM_SETFOCUS 通知メッセージを親ウィンドウに送信します。
WM_SETFONT 指定したフォント ハンドルを保存し、新しいフォントを使用してツリービュー コントロールを再描画します。
WM_SETREDRAW 再描画フラグを設定またはクリアします。 ツリービュー コントロールは、再描画フラグが設定された後に再描画されます。 0 を返します。
WM_SIZE ツリービュー コントロールのクライアント領域のサイズに依存する内部変数を再計算します。 TRUE を返します。
WM_STYLECHANGED ラベルの編集をキャンセルし、新しいスタイルを使用してツリービュー コントロールを再描画します。 0 を返します。
WM_SYSCOLORCHANGE 再描画フラグが設定されている場合は、新しい色を使用してツリービュー コントロールを再描画します。 戻り値がありません。
WM_TIMER アイテムラベルの編集を開始します。 ユーザーがフォーカスされたアイテムのラベルをクリックすると、ツリービュー コントロールは編集モードにすぐに入るのではなくタイマーを設定します。 タイマーを使用すると、ユーザーがラベルをダブルクリックした場合に、ツリービューが編集モードに入らないようにすることができます。 0 を返します。
WM_VSCROLL ツリービュー コントロールをスクロールします。 スクロールすると TRUE を返し、それ以外の場合は、FALSE を返します。

 

サンプル: CustDTv は TreeView でのカスタム描画を示す (Q248496)