CListCtrl (много мелких вопросов)
Как мне занести строку в определенную ячейку? Чтобы я не делал - текст всегда в первой ячейке, нулевом столбце остается (((
вот мой код
Код:
m_List.InsertItem(LVIF_TEXT|LVIF_STATE, 2, "test", 2, LVIS_SELECTED, 0, 0);
Где стоят двойки - я уже че только туда не ставил. все равно позиция текста остается постоянной ((
Используй что то вроде SetItemText
Использую, но ничего не происходит! Просто текст не пишется (
Да как это не пишется. Конешно он не будет писаться если до этого у тебя не существовало данной ячейки,т.е перед использованием SetItemtext необходимо использовать для данной строки InsertItem или AddItem чтобы вначале создать эту строку с ее ячейками а уж потом SetItemtext
Код:
CRect rect;
m_List.GetClientRect(&rect);
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120);
m_List.InsertColumn(2, "Статус", LVCFMT_LEFT, 120);
m_List.InsertColumn(3, "Примечание", LVCFMT_LEFT, 180);
m_List.InsertItem(1, "Наименование");
m_List.GetClientRect(&rect);
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120);
m_List.InsertColumn(2, "Статус", LVCFMT_LEFT, 120);
m_List.InsertColumn(3, "Примечание", LVCFMT_LEFT, 180);
m_List.InsertItem(1, "Наименование");
Теперь пишется "Наименование" в первой ячейке (т.е. по ходу координаты 0.0)б а как чтобы она записалась в первой строке во втором столбце (чтобы под названием заголовка "Наименование")
Код:
CRect rect;
m_List.GetClientRect(&rect);
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120);
m_List.InsertColumn(2, "Статус", LVCFMT_LEFT, 120);
m_List.InsertColumn(3, "Примечание", LVCFMT_LEFT, 180);
m_List.InsertItem(1, "Наименование");
m_List.GetClientRect(&rect);
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120);
m_List.InsertColumn(2, "Статус", LVCFMT_LEFT, 120);
m_List.InsertColumn(3, "Примечание", LVCFMT_LEFT, 180);
m_List.InsertItem(1, "Наименование");
Теперь пишется "Наименование" в первой ячейке (т.е. по ходу координаты 0.0)б а как чтобы она записалась в первой строке во втором столбце (чтобы под названием заголовка "Наименование")[/QUOTE]
Код:
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120, 0);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120, 1);
nItem = m_List.InsertItem(LVIF_TEXT, nItem, str1, 0, 0, 0, 0);
m_List.SetItemText(nItem, 1, str2);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120, 1);
nItem = m_List.InsertItem(LVIF_TEXT, nItem, str1, 0, 0, 0, 0);
m_List.SetItemText(nItem, 1, str2);
Вопрос №2.
Как теперь мне в таком виде
Код:
m_List.InsertColumn(0, "Обозначение", LVCFMT_LEFT, 120, 0);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120, 1);
m_List.InsertColumn(1, "Наименование", LVCFMT_LEFT, 120, 1);
встроить ComboBox во второй столбец например?
И сразу же Вопрос №3.
Как прочитать значение нужной мне ячейки?
Я делаю так - но это ошибка!
Код:
CString name;
m_List.GetItemText(0, 2, name);
m_List.GetItemText(0, 2, name);
А что за четвертый параметр в функции GetItemText?
А как можно сделать так. чтобы редактировалась только определенная колонка в m_List??
А как можно сделать так. чтобы редактировалась только определенная колонка в m_List??[/QUOTE]
Никак.
Про встраивание в CListCtrl контролов где-то тут уже было.
CString name;
m_List.GetItemText(0, 2, name);
Вылетает и правильно делает. Правильно будет
CString name;
name = m_List.GetItemText(0, 2);
или
char name[1024]; // wchar_t если уникод
m_List.GetItemText(0, 2, name, 1024);
А так как ты сделал - гарантированный AV. Попытка записи строки в объект. Даже допуская что он развернёт CString в LPCTSTR - длина-то будет 0 - объект не инициализирован, да к тому же константа! по рукам бы тебе за такое :)
Поправка: редактировать только определённую колонку можно перехватом сообщения о начале редактирования и возвратом запрета, если редактируется неправильная колонка.