CListCtrl::SortItemsEx
更新 : 2007 年 11 月
アプリケーション定義の比較関数を使って、現在のリスト ビュー コントロールのアイテムを並べ替えます。
BOOL SortItemsEx(
PFNLVCOMPARE pfnCompare,
DWORD_PTR dwData
);
パラメータ
パラメータ |
説明 |
---|---|
[入力] pfnCompare |
アプリケーション定義の比較関数のアドレス。 この比較関数は、並べ替え操作中に、2 つのリスト アイテムの相対関係を判別する必要が生じるたびに呼び出されます。比較関数は、クラスの静的メンバか、どのクラスのメンバでもないスタンドアロン関数である必要があります。 |
[入力] dwData |
比較関数に渡されるアプリケーション定義の値。 |
戻り値
このメソッドが成功した場合は true。それ以外の場合は false。
解説
このメソッドは、新しい順序に合わせて各アイテムのインデックスを変更します。
比較関数 pfnCompare は次の形式をとります。
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
このメッセージは、LVM_SORTITEMS と似ていますが、比較関数に渡す情報の種類が違います。LVM_SORTITEMS で比較するアイテムの値は、lParam1 と lParam2 です。LVM_SORTITEMSEX では、lParam1 が比較対象の最初のアイテムの現在のインデックス、lParam2 が 2 番目のアイテムの現在のインデックスになります。LVM_GETITEMTEXT メッセージを送信して、アイテムの詳細情報を取得することもできます。
比較関数は、最初のアイテムが 2 番目のアイテムよりも前の場合は負の値、最初のアイテムが 2 番目のアイテムの後の場合は正の値、2 つのアイテムが等しい場合は 0 を返します。
メモ : |
---|
並べ替え操作の実行中は、リスト ビューの内容が不安定になります。コールバック関数が LVM_GETITEM 以外のメッセージをリスト ビュー コントロールに送信した場合の結果は、予測不能です。 |
このメソッドは、LVM_SORTITEMSEX メッセージを送信します。このメッセージについては、Windows SDK を参照してください。
必要条件
ヘッダー : afxcmn.h
このメソッドは、Windows 2000、Windows NT 4.0 (Internet Explorer 5)、Windows 98 およびそれ以降のバージョンでサポートされています。
使用例
次のコード例では、現在のリスト ビュー コントロールにアクセスするために使用される変数 m_listCtrl を定義しています。この変数は、次の例で使用されます。
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
SortItemEx メソッドのコード例を次に示します。このコード例の前半部分では、"ClientID" および "Grade" というタイトルの 2 つの列をレポート ビューに表示するリスト ビュー コントロールを作成しました。次のコード例では、"Grade" 列の値を使用してテーブルを並べ替えます。
// The ListCompareFunc() method is a global function used by SortItemEx().
int CALLBACK ListCompareFunc(
LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(static_cast<int>(lParam1), 1);
CString strItem2 = pListCtrl->GetItemText(static_cast<int>(lParam2), 1);
int x1 = _tstoi(strItem1.GetBuffer());
int x2 = _tstoi(strItem2.GetBuffer());
int result = 0;
if ((x1 - x2) < 0)
result = -1;
else if ((x1 - x2) == 0)
result = 0;
else
result = 1;
return result;
}
void CCListCtrl_s2Dlg::OnBnClickedButton1()
{
// SortItemsEx
m_listCtrl.SortItemsEx( ListCompareFunc, (LPARAM)&m_listCtrl );
}