下に存在するアイテムを選択するためには、その上に存在するアイテムを展開しなければなりません。アプリケーション内からアイテムを展開する方法を理解しておく必要があります。これには、TreeView_Expandを呼び出します。flag);hwndTVは、ツリービューのハンドルを指定します。hitemは、アイテムのハンドルを指定します。flagは、展開するかどうかを表す定数を指定します。TVE_EXPANDを指定すると展開が行われ、TVE_COLLAPSEを指定すると展開が閉じられます。アイテムが展開されているならば、TreeView_GetNextItemで下のアイテムを参照することができます。flag);hwndTVは、ツリービューハンドルを指定します。hitemは、アイテムのハンドルを指定します。flagは、どのような種類のアイテムを取得するかを表す定数を指定します。TVGN_CHILDを指定すると子アイテムのハンドルが返り、TVGN_NEXTを指定すると次のアイテムのハンドルが返ります。目的のアイテムを発見できた場合は、そのアイテムを選択状態にしたいことがあります。これには、TreeView_Selectを呼び出します。flag);hwndTVは、ツリービューのハンドルを指定します。hitemは、アイテムのハンドルを指定します。flagは、アイテムに対する動作を表す定数を指定します。TVGN_CARETを指定するとアイテムは選択されます。今回のプログラムは、特定のテキストを持ったアイテムをツリービューから検索します。&is);}SearchTreeItemという自作関数は、第3引数のテキストを持つアイテムをツリービューから検索します。第2引数は子を持つ親アイテムのハンドルであり、まずTreeView_Expandで親アイテムを展開します。これにより、TreeView_GetNextItemにTVGN_CHILDを指定して子アイテムのハンドルを取得することができます。目的のテキストと一致するかを調べるためにlstrcmpを呼び出します。これが一致した場合は、アイテムを選択状態にしてループ文を抜けることになります。一致しなかった場合は、そのアイテムが子アイテムを持つかどうかを調べるためにcChildrenを確認します。0より大きい場合は子を持つということで、このアイテムを親としてTreeView_GetNextItem(TVGN_CHILD指定)を呼び出すことができます。最下層のアイテムまで検索できることになります。展開を閉じるためにTreeView_ExpandにTVE_COLLAPSEを指定します。この後は、下のアイテムではなく同階層の次のアイテムを調べるために、TVGN_NEXTを指定してTreeView_GetNextItemを呼び出します。選択されたアイテムをハイライトに表示するためです。TreeView_EnsureVisibleを呼び出すことでアイテムを発見することができます。hitem);TreeView_EnsureVisibleを呼び出すと、第2引数に指定したアイテムは確実に表示されることになります。