CListBox::CharToItem
更新 : 2007 年 11 月
リスト ボックスの親ウィンドウがリスト ボックスから WM_CHARTOITEM メッセージを受け取ったときに、フレームワークから呼び出されます。
virtual int CharToItem(
UINT nKey,
UINT nIndex
);
パラメータ
nKey
ユーザーが入力した文字の ANSI コード。nIndex
リスト ボックス カレットの現在の位置。
戻り値
続く動作がない場合は、-1 または -2 を返します。または、キーストロークの既定の動作を実行する、リスト ボックスの項目のインデックスを指定する負の数ではない値を返します。既定の実装の場合は -1 を返します。
解説
WM_CHARTOITEM メッセージは、リスト ボックスが WM_CHAR メッセージを受け取ったときにリスト ボックスによって送られます。ただし、リスト ボックスが以下に示す基準に適合する場合のみです。
オーナー描画リスト ボックスである。
LBS_HASSTRINGS スタイル セットを持っていない。
少なくともアイテムを 1 つ持っている。
この関数を呼び出さないでください。独自のキーボード メッセージのハンドルを提供する場合は、この関数をオーバーライドします。
オーバーライドした関数では、フレームワークにどのような動作を行うのかを知らせるために、値を返す必要があります。-1 または -2 の戻り値は、選択された項目に対するすべての操作を行い、リスト ボックスによる動作要求がないことを示します。-1 または -2 を返す前に、選択の設定、キャレットの移動、またはその両方を実行できます。選択を設定するには、SetCurSel または SetSel を使います。カレットを移動するには、SetCaretIndex を使います。
0 またはそれ以上の戻り値は、リスト ボックス内の項目のインデックスを指定しています。また、リスト ボックスが与えられた項目でのキーストロークの既定の動作を行うことを示しています。
使用例
// CMyODListBox is my owner-drawn list box derived from CListBox. This
// example moves the caret down one item on a numeric key and up one item
// on an alphabetic 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::CharToItem(UINT nChar, UINT nIndex)
{
// On a numeric key, move the caret up one item.
if (isdigit(nChar) && (nIndex > 0))
{
SetCaretIndex(nIndex-1);
}
// On an alphabetic key, move the caret down one item.
else if (isalpha(nChar) && (nIndex < (UINT)GetCount()))
{
SetCaretIndex(nIndex+1);
}
// Do not perform any default processing.
return -1;
}
必要条件
ヘッダー : afxwin.h