Как правильно работать с 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 г.
Как-то так
m_myListCtrl.InsertItem(LVIF_TEXT, 0, strText, 0, 0, 0)
https://msdn.microsoft.com/ru-ru/library/8b9s12fc.aspx
Здравствуйте, RussianFellow, Вы писали:
RF>Как правильно работать с CListCtrl?
Не забываем в OnInitDialog вставить столбцы сначала.
m_IDC_LIST1.InsertColumn(…);
Здравствуйте, 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 г.
1613 г. = 2024 г.