CListBox::CharToItem
Llamado por el marco cuando la ventana primaria del cuadro de lista recibe un mensaje de WM_CHARTOITEM listbox.
virtual int CharToItem(
UINT nKey,
UINT nIndex
);
Parámetros
nKey
El código ANSI de caracteres que el usuario escribió.nIndex
La posición actual del símbolo de intercalación en el cuadro de lista.
Valor devuelto
Devuelve – 1 o – 2 para que ninguna acción o un número negativo especifique un índice de un elemento del cuadro de lista en el que realizar la acción predeterminada para la presión de tecla. la implementación predeterminada devuelve – 1.
Comentarios
El mensaje de WM_CHARTOITEM es enviado por el cuadro de lista cuando recibe un mensaje de WM_CHAR , pero solo si el cuadro de lista cumple todos estos criterios:
Es un cuadro de lista de dibujo propietario.
No haga el estilo de LBS_HASSTRINGS establecer.
Tiene al menos un elemento.
Nunca debe llamar a esta función personalmente. Invalide esta función para proporcionar dispone de control personalizado de los mensajes del teclado.
En la invalidación, debe devolver un valor para indicar al marco qué acciones se realizaron. Un valor devuelto de – 1 o – 2 indica que ha controlado todos los aspectos de seleccionar el elemento y no requiere ninguna acción por el cuadro de lista. Antes de devolver – 1 o – 2, podría establecer la selección o mover el símbolo de intercalación o ambos. para establecer la selección, el uso SetCurSel o SetSel. para mover el símbolo de intercalación, utilice SetCaretIndex.
Devuelve un valor de 0 o mayor especifica el índice de un elemento en el cuadro de lista e indica que el cuadro de lista debe realizar la acción predeterminada para la presión de tecla en el elemento especificado.
Ejemplo
// 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;
}
Requisitos
encabezado: afxwin.h