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


Автор: ПашкаКорчагин 3.5.2006, 13:49
начинаю осваивать MFC.. пока пытаюсь не пользовать Визард.. пишу все вручную..*думаю не стоит пояснять почему вручную когда есть визард*
возникли некоторые проблемы...

в MainWnd.h объявил переменную  CListCtrl m_list; 

в MainWnd.cpp 


   
Код

m_list.Create( 
      WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_SINGLESEL, 
      CRect(10,40,610,rtClient.Height()-50),this,ID_LISTCTRL 
      ); //створив сам  CListCtrl обєкт 
   m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); 

   m_list.InsertColumn(0,_T("test1"),LVCFMT_LEFT,200); 
   m_list.InsertColumn(1,_T("test2"),LVCFMT_LEFT,200); 
   m_list.InsertColumn(2,_T("test3"),LVCFMT_LEFT,200);    



задача в том, чтобы по ходу выполнения программы вписывать в сей Лист некоторые переменные..

написал следуюющую функцию..    

v
Код

oid CMainWnd::UpdateList(){ 
    
   for (int i=0; i<ob_arr.GetCount();++i) 
   { 
      CPerson*pers=(CPerson*)ob_arr[i];//CObArray ob_arr; 
      TCHAR *name; 
      name=new TCHAR[sizeof(pers->GetName())]; 
      lstrcpy(name,pers->GetName()); 

       

      LVITEM lvi; 
      lvi.pszText = name; 
      lvi.cchTextMax = wcslen(lvi.pszText); 
      lvi.iItem = i; 
      lvi.iSubItem = 0; 
      lvi.iImage = 0; 
      lvi.mask = LVIF_TEXT|LVIF_IMAGE; 
      m_list.InsertItem(&lvi);//left of '.InsertItem' must have class/struct/union type 
       

      //m_list.SetItemText(i,1,pers->GetPhone()); 
      //m_list.SetItemText(i,2,pers->GetEmail()); 


       
   } 
}    




и тут началось...

1. Почему я обизательно должен заполнять LVITEM структуру, а не использовать
BOOL SetItemText( 
int nItem, 
int nSubItem, 
LPCTSTR lpszText 
);
Пример: m_list.SetItemText(i,1,_T("i.1 test")); 

2. привидение типов. Так, vi.cchTextMax принимает строку типа LPWSTR, а имеется CString.
Выкрутился ..
Код

TCHAR *name; 
name=new TCHAR[sizeof(pers->GetName())]; 
lstrcpy(name,pers->GetName());
    
...но это же не выход...не заводить же мне беферную переменную каждый раз кода хочу преобразовать строку одного типа к другому...



3. непонятное  
Код

m_list.InsertItem(&lvi);//left of '.InsertItem' must have class/struct/union type
 

Автор: Бугемот 4.5.2006, 04:21
Цитата(ПашкаКорчагин @  3.5.2006,  13:49 Найти цитируемый пост)
1. Почему я обизательно должен заполнять LVITEM структуру, а не использовать
BOOL SetItemText( 

сначала сделай InsertItem, а потом уже SetItemText 

Автор: ПашкаКорчагин 4.5.2006, 09:40
отлично...розобрались...
еще вопрос как можна получить индекс выделеного рядка.. 

Автор: LPNcom 4.5.2006, 17:07
POSITION pos = pList->GetFirstSelectedItemPosition();
if (pos == NULL)
{
   // если не выделено ни одного рядка
}
else
{
   while (pos) //перебираем всё что выделено
   {

      int nItem = pList->GetNextSelectedItem(pos);  //  в nItem индекс очередного
   
   }
} 

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