Шаг 953 - CListBox::CharToItem

virtual int CharToItem( UINT nKey, UINT nIndex );

Возвращаемое значение
Возврат - 1 или - 2 ни для какого дальнейшего действия или неотрицательного номера, чтобы определить индекс элемента списка, чтобы выполнять заданное по умолчанию действие для нажатия клавиши. Заданный по умолчанию возврат реализации - 1.

Параметры
nKey
ANSI код символа пользователь печатал.
nIndex
Текущая позиция символа каретки списка.

Замечания
Эта функция вызвана рамкой, когда родительское окно списка получает WM_CHARTOITEM сообщение от списка. WM_CHARTOITEM сообщение послано списком, когда это получает WM_CHAR сообщение, но только, если список встречает все эти критерии:

Является владельцем - выводящимся списком.
Не имеет LBS_HASSTRINGS стиля.
Имеет по крайней мере один элемент. 
Вы никогда не должны вызвать эту функцию самостоятельно. Перегрузите эту функцию, чтобы обеспечить вашу собственную заказную обработку сообщений клавиатуры.
В вашей перегруженной функции, Вы должны возвратить значение, чтобы сообщить рамке, какое действие Вы выполнили. Возвращаемое значение - 1 или - 2 указывает, что Вы обработали все аспекты выбора элемента и не требуете никакого дальнейшего действия со списком. Перед возвратом - 1 или - 2, Вы могли бы устанавливать выбор или перемещать символ каретки или оба. Чтобы устанавливать выбор, используйте SetCurSel или SetSel. Чтобы перемещать символ каретки используйте SetCaretIndex.
Возвращаемое значение 0 или больший определяет индекс элемента в списке и указывает, что список должен выполнить заданное по умолчанию действие для нажатия клавиши на данном элементе.

Пример

// CMyListBox - мой выведенный владельцем список, полученный из CListBox. Этот 
// пример перемещает символ каретки по нажатию на клавишу
// по клавише вверх. Управление списка было создано со 
// следующий кодом:
//   pmyListBox->Create(
//      WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
//      LBS_SORT|LBS_MULTIPLESEL|LBS_OWNERDRAWVARIABLE|LBS_WANTKEYBOARDINPUT,
//      CRect(10,10,200,200), pParentWnd, 1);
//
int CMyListBox::CharToItem(UINT nKey, UINT nIndex) 
{
	// На числовой клавише переместите символ каретки вверх на один элемент:
	if (isdigit(nKey) && (nIndex > 0))
		SetCaretIndex(nIndex-1);

	// На алфавитной клавише, переместите символ каретки вниз один элемент.
	else if (isalpha(nKey) && (nIndex < GetCount()))
		SetCaretIndex(nIndex+1);

	// Не выполните никакую заданную по умолчанию обработку.
	return -1;
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.02.2002