Доброе время суток!
Есть проблема: я обрабатываю сообщение 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);
}
}
}
Заранее большое спасибо!