Доброе время суток!
Есть проблема: я обрабатываю сообщение OnKeyUp класса CRichList. Обработка заключается в позиционировании курсора на записи, первая буква которой совпадает с нажатой клавишей, с последующим выделением записи. При нажатии на клавишу, перед выделением нужного элемента, курсор переходит на элемент, первый в списке. Подскажите, пожалуйста, как от этого избавиться?
Ниже я привожу фрагмент кода, который используется мной для выделения записи и позиционирования курсора:
void CFilelistPaneDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//...
ClearSelection();
int iNdex = pFilelist->GetIndexByFile(dwfileID);
m_wndList.EnsureVisible(iNdex);
CListCtrl& list = m_wndList.GetListCtrl();
list.SetFocus();
list.SetItemState(iNdex, LVIS_FOCUSED | LVIS_SELECTED, 0x000F);
//...
}
void CFilelistPaneDlg ClearSelection()
{
CRichListCtrl* wndList = GetRichList();
CListCtrl& list = wndList->GetListCtrl();
POSITION pos = list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = list.GetNextSelectedItem(pos);
list.SetItemState(nItem, 0, LVIS_SELECTED);
}
}
}
Заранее большое спасибо!
Hello.
Возможно я что-то не уловил, но такая функциональность — переход по нажатию клавиши на соответствующую строку и ее выделение — в CListCtrl уже реализована. Зачем понадобилось делать то же самое самому еще раз?
Всем откликнувшимся огромное спасибо. Проблема успешно была мной решена. Тему считать закрытой.
Если кому интересно, то проблема быле решена с помощью "заглушки" на сообщение WM_CHAR: отказано в передаче управления обработчику по умолчанию.
Еще раз, огромное всем спасибо!