Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Редактируемые ячейки в таблице.


Автор: Гость_Oleg IT 6.12.2005, 09:02
Работаю с таблицей класс CListCtrl. До настоящего момента вопросов не было. Появилась необходимость редактировать ячейки. Пробовал ставить стиль LVS_EDITLABELS функцией ListView_SetExtendedListViewStyle(…), не получается. Может какой другой класс применить для этого? И есть ли возможность редактировать ячейки только в заданных столбцах?

Автор: threef 6.12.2005, 15:39
Сам CListCtrl не поддерживает редакторования ячеек, для этого нужно добавить свой редактор, установить его на место редактируемой ячейки, скопировать в него текст, отредактировать, скопировать текст обратно в список. У меня где-то есть класс "таблица", вот действия по установке редактора:

Код

void CGrid::OnRclick(NMHDR* p, LRESULT* pResult)
{
    
    NMITEMACTIVATE *np=(NMITEMACTIVATE*)p;
    ROW=np->iItem;
    COL=np->iSubItem;
    CPoint pt(np->ptAction),position;
    CRect r;
    if(ROW<0)
    {
    // определяем строку с позицией клика(свой метод)
    ROW=GetCellPoint(position,pt);
    }
    // подсвечиваем строку
    SetSelectionMark(ROW);
    // прямоугольник выбранной ячейки(свой метод)
    GetCellRect(ROW,COL,r);()
    r.DeflateRect(1,1);
    // "натягиваем" на ячейку редактор 
    Edit.MoveWindow(&r);
    Edit.ShowWindow(SW_SHOW);
    Edit.SetFocus();
    Edit.SetWindowText(
                   //класс Grid - свой, получаю текст ячейки
                   (*this)[ROW][COL].text()
             );
  *pResult = 0;
}



* свой метод - его нет в CListCtrl

Автор: Гость_Oleg IT 6.12.2005, 16:14
Спасибо. Но теперь другая проблема, CEdit не реагирует на Enter, т.е. не найду сообщения которое вызывалось по Enter. Как его к этому принудить?

Автор: threef 7.12.2005, 18:11
Производный класс, PreTranslateMessage перегрузить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)