Как работать с CListCtrl
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 27.06.16 06:40
Оценка: -1
Как правильно работать с CListCtrl?

Есть переменная m_IDC_LIST1 типа CListCtrl, соответствующая компоненту IDC_LIST1.
Нужно добавить в этот листконтрол три строки--"строка 1", "строка 2", "строка 3".

Как это правильно сделать?

У меня есть код в функции CMYMFCDlg::OnInitDialog:

m_IDC_LIST1.DeleteAllItems();
m_IDC_LIST1.InsertItem(0,L"строка 1");
m_IDC_LIST1.InsertItem(1,L"строка 2");
m_IDC_LIST1.InsertItem(2,L"строка 3");

Однако после компиляции и запуска программы на диалоговом окне этот листконтрол--пустой, без строк. В чём причина этого?

Я нашёл ссылку:
http://www.firststeps.ru/mfc/steps/r.php?382

Но я не понял из него, как же правильно добавлять элементы в CListCtrl. Есть две строки в нём:

m_List.InsertItem(x,csText) ;
m_List.SetItemText(x,2,Status[x].lpDisplayName);

но из них мне не понятно, что означают параметры методов InsertItem и SetItemText класса CListCtrl.

Как мне правильно добавлять элементы в класс CListCtrl, чтобы они правильно отображались?
1613 г. = 2024 г.
Re: Как работать с CListCtrl
От: SаNNy Россия  
Дата: 27.06.16 06:48
Оценка:
Как-то так
m_myListCtrl.InsertItem(LVIF_TEXT, 0, strText, 0, 0, 0)

https://msdn.microsoft.com/ru-ru/library/8b9s12fc.aspx
Re: Как работать с CListCtrl
От: Evgeniy Skvortsov Россия  
Дата: 27.06.16 07:20
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как правильно работать с CListCtrl?


RF>Есть переменная m_IDC_LIST1 типа CListCtrl, соответствующая компоненту IDC_LIST1.

RF>Нужно добавить в этот листконтрол три строки--"строка 1", "строка 2", "строка 3".

Лист контрол — очень мощная штука, во-первых, нужно выбрать режим отображения элементов, потом уже вставлять. Вся инфа есть в МСДН.
К тому же можно вопросы адресовать гуглу, там дофига информации с примерами.
Под рукой нет студии, а по памяти не подскажу.
Re: Как работать с CListCtrl
От: Carc Россия https://vk.com/gosha_mazov
Дата: 27.06.16 08:55
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как правильно работать с CListCtrl?

Не забываем в OnInitDialog вставить столбцы сначала.
m_IDC_LIST1.InsertColumn(…);
Aml Pages Home
Re[2]: Как работать с CListCtrl
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 27.06.16 09:12
Оценка:
Здравствуйте, SаNNy, Вы писали:

SNN>https://msdn.microsoft.com/ru-ru/library/8b9s12fc.aspx


Запустил этот пример и у меня отладчик выдаёт:

Debug Assertion Failed!
Program: C:\MyMFC\Debug\MyMFC.exe
File: C:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winctrl2.cpp


Когда я убираю (комментирую) строку

m_myListCtrl.SetItemText(i, j, strText);


то у меня этого сообщения не возникает (но и текст в листконтрол не выводится).

Правда, у меня этот листконтрол находится на вкладке табуляции:

TC_ITEM  TabItem;
TabItem.mask = TCIF_TEXT;
TabItem.pszText = L"Вкладка 1";
m_ctrTab.InsertItem(0,&TabItem);
TabItem.pszText = L"Вкладка 2";
m_ctrTab.InsertItem(1,&TabItem);
CPage1* pPage1; // первая вкладка--на которой находится листконтрол
pPage1 = new CPage1;
CString  strText;
TabItem.mask = TCIF_PARAM;
TabItem.lParam = (LPARAM)pPage1;
m_ctrTab.SetItem(0,&TabItem);
VERIFY(pPage1->Create(CPage1::IID,&m_ctrTab));
pPage1->SetWindows(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER);
pPage1->ShowWindow(SW_SHOW);
pPage1->m_IDC_LIST1.DeleteAllItems();

CString strText;
int nColumnCount = m_myListCtrl.GetHeaderCtrl()->GetItemCount();

// Insert 10 items in the list view control.
for (int i = 0; i < 10; i++)
{
    strText.Format(TEXT("item %d"), i);

    // Insert the item, select every other item.
    m_myListCtrl.InsertItem(LVIF_TEXT | LVIF_STATE, i, strText, 
        (i % 2) == 0 ? LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0);

    // Initialize the text of the subitems.
    for (int j = 1; j < nColumnCount; j++)
    {
        strText.Format(TEXT("sub-item %d %d"), i, j);
        m_myListCtrl.SetItemText(i, j, strText);
    }
}

CPage2* pPage2; // вторая вкладка
pPage2 = new CPage2;
TabItem.mask = TCIF_PARAM;
TabItem.lParam = (LPARAM)pPage2
m_ctrTab.SetItem(1,&TabItem);
VERIFY(pPage2->Create(CPage2::IDD,&m_ctrTab));
pPage2->SetWindowPos(NULL,10,30,0,0,SWP_NOSIZE|SWP_NOZORDER);
pPage2->ShowWindow(SW_HIDE);
pPage2->m_IDC_COMBO1.SetCurSel(0);
pPage2->m_IDC_COMBO2.SetCurSel(0);


Что нужно сделать, чтобы в отладчике не появлялись сообщения об ошибках?
1613 г. = 2024 г.
Re[3]: Как работать с CListCtrl
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 27.06.16 12:39
Оценка:
Поставил в код

m_IDC_LIST1.InsertColumn

та же самая ситуация. В чём причина этого?
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.