Подавление обработки по умолчанию сообщений CRichList
От: EugeneLed  
Дата: 04.09.05 12:56
Оценка:
Доброе время суток!
Есть проблема: я обрабатываю сообщение 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);
        }
    }
}


Заранее большое спасибо!
Вот, что я Вам всем скажу...
Re: Подавление обработки по умолчанию сообщений CRichList
От: -FireFly- Россия  
Дата: 04.09.05 13:30
Оценка:
Hello.
Возможно я что-то не уловил, но такая функциональность — переход по нажатию клавиши на соответствующую строку и ее выделение — в CListCtrl уже реализована. Зачем понадобилось делать то же самое самому еще раз?
--
Carpe diem
Re[2]: Подавление обработки по умолчанию сообщений CRichList
От: EugeneLed  
Дата: 04.09.05 13:43
Оценка:
Здравствуйте, -FireFly-, Вы писали:

FF>Hello.

FF>Возможно я что-то не уловил, но такая функциональность — переход по нажатию клавиши на соответствующую строку и ее выделение — в CListCtrl уже реализована. Зачем понадобилось делать то же самое самому еще раз?

Согласен. Дело в том, что используемый List:
1) не являнется "чистым" CRichList, а классом, содержащим такой элемент в качестве члена;
2) не содержит данных -- вся информация хранится в файлах -- и используется лишь для отображения данных из файлов.

Нажатие на клавишу не приводит к нужному результату. Поэтому, я писал свой обработчик.
Вот, что я Вам всем скажу...
Re[3]: Подавление обработки по умолчанию сообщений CRichList
От: EugeneLed  
Дата: 06.09.05 06:19
Оценка:
Всем откликнувшимся огромное спасибо. Проблема успешно была мной решена. Тему считать закрытой.
Вот, что я Вам всем скажу...
Re[4]: Подавление обработки по умолчанию сообщений CRichList
От: EugeneLed  
Дата: 06.09.05 09:43
Оценка:
Если кому интересно, то проблема быле решена с помощью "заглушки" на сообщение WM_CHAR: отказано в передаче управления обработчику по умолчанию.
Еще раз, огромное всем спасибо!
Вот, что я Вам всем скажу...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.