まず、TVSORTCB のインスタンスを設定します。hParent は、ソートしたいツリー内の項目でなければなりません。lpfnCompare は、次のような静的関数でなければなりません。
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
/*your casting of lParams and sorting code here*/
}
この関数の目的は、lParam1 が lParam2 より「小さい」かどうかを判断することです。
構造体の lParam 値は、コールバック (lParamSort) の 3 番目の引数として渡したいものであり、0 にすることができます
次に、その構造体インスタンスのアドレスを TreeView_SortChildrenCB の 2 番目のパラメーターとして渡します。
コールバック (lParam1/2) に渡される 2 つの引数は、ツリーに挿入された各項目に関連付ける値です。すべてではないにしてもほとんどの一般的なコントロールでは、lParam 値をコントロール内の選択可能な各項目に関連付けることができます。この場合、これは TreeView_InsertItem に渡す TVINSERTSTRUCT の TVITEM 構造体の lParam 値です ( http://msdn.microsoft.com/en-us/library/windows/desktop/bb773898(v=vs.85))。 aspx )
多くの場合、これは、文字列または比較可能な他の構造体を含むテーブルへの単なるインデックスです。そのテーブルを指すように TVSORTCB の lParam を設定した場合、コールバックの 3 番目の引数をそのテーブル構造にキャストすることによって、おそらくそのテーブルにアクセスできるようになります。
それが明確でない場合は申し訳ありません。win32 API は、lParam メカニズムを過度に使用して、データを GUI API のほぼすべてのハンドルに関連付ける傾向があります。文字列/構造体を割り当て、新しいメモリのアドレスをツリー項目の lParam に割り当てるという罠にはまらないでください。ツリー内のすべてのアイテムの割り当てを削除しないと、メモリ リークが発生します。