CListCtrl::MapIndexToID
更新 : 2007 年 11 月
現在のリスト ビュー コントロールのアイテムのインデックスを一意の ID に関連付けます。
UINT MapIndexToID(
UINT index
) const;
パラメータ
パラメータ |
説明 |
---|---|
[入力] index |
アイテムの 0 から始まるインデックス。 |
戻り値
指定したアイテムの一意の ID。
解説
リスト ビュー コントロールの内部では、各アイテムがインデックスによって管理されています。ところが、インデックスはコントロールの有効期間内に変更されることがあるので、この動作には問題があります。そこで、リスト ビュー コントロールでは、アイテムの作成時にアイテムに ID を設定できるようになっています。その ID を使用すれば、リスト ビュー コントロールが有効になっている限り、特定のアイテムに正しくアクセスできます。
マルチスレッド環境でインデックスが保証されるのは、リスト ビュー コントロールをホストするスレッドに限られます。バックグラウンド スレッドでは、保証されません。
このメソッドは、LVM_MAPINDEXTOID メッセージを送信します。このメッセージについては、Windows SDK を参照してください。
必要条件
ヘッダー : afxcmn.h
このコントロールは、Windows Vista およびそれ以降のバージョンでサポートされています。
このメソッドに関するその他の要件については、「Windows Vista コモン コントロールの作成要件」を参照してください。
使用例
次のコード例では、現在のリスト ビュー コントロールへのアクセスに使用される変数 m_listCtrl を定義しています。この変数は、次の例で使用されます。
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
MapIndexToID メソッドのコード例を次に示します。このコード例の前半部分では、"ClientID" および "Grade" というタイトルの 2 つの列をレポート ビューに表示するリスト ビュー コントロールを作成しました。次の例では、各リスト ビュー アイテムのインデックスを識別番号にマップしてから、各識別番号のインデックスを取得しています。最後に、元のインデックスが取得されたかどうかをレポートします。
// MapIndexToID
int iCount = m_listCtrl.GetItemCount();
UINT nId = 0;
UINT nIndex = 0;
for (int iIndexOriginal = 0; iIndexOriginal < iCount; iIndexOriginal++)
{
// Map index to ID.
nId = m_listCtrl.MapIndexToID((UINT)iIndexOriginal);
// Map ID to index.
nIndex = m_listCtrl.MapIDToIndex(nId);
if (nIndex != (UINT)(iIndexOriginal))
{
CString str;
str.Format(_T("Mapped index (%d) is not equal to original index (%d)"),
nIndex, (UINT)(iIndexOriginal));
AfxMessageBox(str);
return;
}
}
AfxMessageBox(_T("The mapped indexes and original indexes are equal."),
MB_ICONINFORMATION);