Редактирование Clistview

  • Автор темы GOGA
  • Дата начала
G

GOGA

Гость
#1
Здравствуйте, уважаемые господа программисты!!!

Хочу проконсультироваться и найти свою ошибку. Я программно создаю элемент типа CMyListView, который я унаследовал от CListView с флагами:


Код:
GetListCtrl().ModifyStyle( 0, LVS_REPORT | LVS_EDITLABELS);
GetListCtrl().SetExtendedStyle(LVS_EX_FLATSB | 
LVS_EX_FULLROWSELECT | 
LVS_EX_HEADERDRAGDROP | 
LVS_EX_GRIDLINES | 
GetListCtrl().GetExtendedStyle() );

После чего создаю обработчик для завершения редактирования:

Код:
...
BEGIN_MESSAGE_MAP(CMyListView, CListView)
...
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEditLabelTab)
...
END_MESSAGE_MAP()
...

// И сам обработчик:
...
void CMyListView::OnEditLabelTab(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
CString sEdit = pDispInfo->item.pszText;
if(!sEdit.IsEmpty())
GetListCtrl().SetItemText(pDispInfo->item.iItem, m_nEdit, sEdit);

m_nEdit = -1;
GetListCtrl().SetItemState(pDispInfo->item.iItem, 0, LVNI_FOCUSED | LVNI_SELECTED);
*pResult = 0;
}
...

Только вот когда я вывожу информацию в таблицу и щелкаю левой кнопкой мыши на какой-нибудь ячейке, то доступной для редактирования стает всегда ячейка из первой колонки выбранной строки. А мне нужно, чтобы становилась доступной та ячейка, на которую я непосредственно щелкнул мышкой.

Подскажите, можно ли так сделать, если можно то как?

Заранее, СПАСИБО!
 
M

Maxx

Гость
#2
сдается мне, надо самому рисовать этот элемент
создавать его со стилем LVS_OWNERDRAWFIXED, перехватывать нажатие мыши, создавать edit control со стилем ES_WANTRETURN (чтобы ентер ловить)
 
G

GOGA

Гость
#3
Спасибо за совет, уже со всем разобрался! Теперь могу все что угодно делать с CListCtrl! :D Могу поделиться опытом, если кого интерисует!
 
S

Skyler

Гость
#4
Спасибо за совет, уже со всем разобрался! Теперь могу все что угодно делать с CListCtrl! Могу поделиться опытом, если кого интерисует!
Привет! Стою сейчас перед аналогичной пороблемой: нужно редактировать значение ячеек во втором столбце и заность их в CList или в масив. Накопал тут, что нужно применять флаг LVS_EDITLABELS и обрабатывать уведомляющее сообщение LVN_ENDLABELEDIT, но тоже не знаю как <_< Помогите, кто-нибудь
 
S

Skyler

Гость
#6
Большое-большое спасибо! Вроде разобрался... :)