CListBox::VKeyToItem
更新 : 2007 年 11 月
リスト ボックスの親ウィンドウがリスト ボックスから WM_VKEYTOITEM メッセージを受け取ったときに、フレームワークから呼び出されます。
virtual int VKeyToItem(
UINT nKey,
UINT nIndex
);
パラメータ
nKey
ユーザーが入力したキーの仮想キー コード。標準の仮想キー コードの一覧については、Winuser.h を参照してください。nIndex
リスト ボックス カレットの現在の位置。
戻り値
続く動作がない場合は -2 を返します。既定の動作の場合は -1 を返します。または、キーストロークの既定の動作を実行する、リスト ボックスの項目のインデックスを指定する負の数ではない値を返します。
解説
WM_VKEYTOITEM メッセージは、リスト ボックスが WM_KEYDOWN メッセージを受け取ったときにリスト ボックスによって送られます。ただし、リスト ボックスが以下に示す基準に適合する場合のみです。
LBS_WANTKEYBOARDINPUT スタイル セットを持っている。
少なくともアイテムを 1 つ持っている。
この関数を呼び出さないでください。独自のキーボード メッセージのハンドルを提供する場合は、この関数をオーバーライドします。
オーバーライドした関数では、フレームワークがどのような動作を行うのかを知らせるために、値を返す必要があります。戻り値が -2 の場合は、アプリケーションで項目の選択に関するすべての動作が処理され、リスト ボックスでの動作がこれ以上必要ないことを示します。-2 を返す前に、選択の設定、キャレットの移動、またはその両方を実行できます。選択を設定するには、SetCurSel または SetSel を使います。カレットを移動するには、SetCaretIndex を使います。
-1 の戻り値は、キーストロークの反応としてリスト ボックスが既定の動作を実行することを示します。既定の実装は -1 を返します。
0 またはそれ以上の戻り値は、リスト ボックス内の項目のインデックスを指定しています。また、リスト ボックスが与えられた項目でのキーストロークの既定の動作を行うことを示しています。
使用例
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on the down key and up one item
// on the up key. The list box control was created with the following
// code:
// m_myODListBox.Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
// CRect(10,250,200,450), pParentWnd, IDC_MYODLISTBOX);
//
int CMyODListBox::VKeyToItem(UINT nKey, UINT nIndex)
{
// On key up, move the caret up one item.
if ((nKey == VK_UP) && (nIndex > 0))
{
SetCaretIndex(nIndex-1);
}
// On key down, move the caret down one item.
else if ((nKey == VK_DOWN) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex+1);
}
// Do not perform any default processing.
return -2;
}
必要条件
ヘッダー : afxwin.h