CListCtrl::SortItemsEx
アプリケーション定義の比較関数を使用して、現在のリスト ビュー コントロールの項目を並べ替えます。
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 番目に従う場合、または 0 が返され、が最初の項目が 2 番目に指定する場合は、正の値は負の値を返します。
注意
並べ替えプロセス中に、リスト ビューの内容が不安定です。コールバック関数が LVM_GETITEM以外のリスト ビュー コントロールにメッセージを送信、結果は予測できません。
このメソッドは Windows SDKで説明する LVM_SORTITEMSEX のメッセージを送信します。
必要条件
ヘッダー: afxcmn.h
このメソッドは、Windows 2000、Internet Explorer 5 の Windows 98 と Windows NT 4.0 でサポートされます。
使用例
次のコード例は、現在のリスト ビュー コントロールへのアクセスに使用される変数、m_listCtrlを定義します。 この変数は次のように使用されます。
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
SortItemEx メソッドのコード例を次に示します。 このコード例では、前のセクションでは、表示が 2 列「ClientID」およびレポートのビューの「変換」とよんだリスト ビュー コントロールを作成しました。 次のコード例では、「変換」列の値を使用してテーブルを並べ替えます。
// 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 );
}