Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2008, 03:03   #1
Icor
 
Регистрация: 13.04.2008
Сообщений: 5
По умолчанию помогите разобратся с ListView

Есть в проге табличка, оформленная в виде List View, у ней некоторое кол-во столбцов. Вот только никак строки добавить немогу

код обрабатывается в WM_CREATE

Код:
hwndListResult = CreateWindowEx(0L, WC_LISTVIEW, _T(""), 
                WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT | LVS_EDITLABELS, 
                5, 100, 300, 300, hwnd, (HMENU)ID_HWNDLISTBOX,  
                ((LPCREATESTRUCT) lParam) -> hInstance, NULL); 

            memset(&column, 0, sizeof(column)); 
            column.mask = LVCF_WIDTH | LVCF_TEXT | LVS_REPORT | LVCF_SUBITEM; 
            column.fmt = LVCFMT_LEFT; 
            column.iSubItem = 0; 
            column.pszText = _T("Фамилия"); 
            ListView_InsertColumn(hwndListResult, 0, &column); 

            column.iSubItem = 1; 
            column.pszText = _T("Имя"); 
            ListView_InsertColumn(hwndListResult, 1, &column); 

            column.iSubItem = 2; 
            column.pszText = _T("Отчество"); 
            ListView_InsertColumn(hwndListResult, 2, &column); 

            column.iSubItem = 3; 
            column.pszText = _T("Телефон"); 
            ListView_InsertColumn(hwndListResult, 3, &column); 


            memset(&lvi, 0, sizeof(lvi)); 
            lvi.mask = LVCF_WIDTH | LVIF_TEXT | LVS_REPORT | LVIF_PARAM;         
            lvi.iItem = 1; 
            lvi.cchTextMax = sizeof(szFace);  
            lvi.iSubItem = 0; 
            lvi.pszText = szFace; 
            lvi.cchTextMax = sizeof(szFace);  
            SendDlgItemMessage(hwndListResult,ID_HWNDLISTBOX,LVM_INSERTITEM,0,(LPARAM)&lvi); 

            lvi.iItem = 2; 
            lvi.iSubItem = 1; 
            lvi.pszText = szFace; 
            lvi.cchTextMax = sizeof(szFace);  
            SendDlgItemMessage(hwndListResult,ID_HWNDLISTBOX,LVM_INSERTITEM,0,(LPARAM)&lvi); 

            lvi.iItem = 3; 
            lvi.iSubItem = 2; 
            lvi.pszText = szFace; 
            lvi.cchTextMax = sizeof(szFace);  
            SendDlgItemMessage(hwndListResult,ID_HWNDLISTBOX,LVM_INSERTITEM,0,(LPARAM)&lvi);
Заранее спасибо
Icor вне форума Ответить с цитированием
Старый 13.04.2008, 15:36   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Icor Посмотреть сообщение
Вот только никак строки добавить немогу
Потому, что ошибок вагон и маленькая тележка.

1. Зачем везде вместе с флагами присутствует стиль LVS_REPORT ?
2. Если уж Вы добавляете колонки с флагом LVCF_WIDTH, то указывайте их ширину.
3. SubItem через LVM_INSERTITEM добавлять нельзя, что совершенно недвусмысленно указано в MSDN:
Цитата:
You cannot use ListView_InsertItem or LVM_INSERTITEM to insert subitems. The iSubItem member of the LVITEM structure must be zero. See LVM_SETITEM for information on setting subitems.
Это делается вторым проходом через LVM_SETITEM, а здесь все iSubItem должны быть нулевыми.
4. И самое главное - SendDlgItemMessage. Вместо неё должна быть просто SendMessage вот таким образом:
Код:
SendMessage(hwndListResult, LVM_INSERTITEM, 0, (LPARAM)&lvi);
А так, как было, функция пытается найти дочернее окно самого listview, которого, разумеется, не существует.
B_N вне форума Ответить с цитированием
Старый 13.04.2008, 17:40   #3
Icor
 
Регистрация: 13.04.2008
Сообщений: 5
По умолчанию

Спасибо разобрался. Вопрос закрыт.
Icor вне форума Ответить с цитированием
Старый 01.05.2009, 16:24   #4
Alina26-89
 
Регистрация: 01.05.2009
Сообщений: 3
По умолчанию

Подскажите пожалуйста. у меня такая ситуация: добавила в listview столбцы, пытаюсь добавить строки, но добавляются только в первый столбец.
Код:
case WM_INITDIALOG:
		{	
			RECT rc;
			GetClientRect (hDlgItem, &rc);

			LV_COLUMN lvColumn = {0};
			lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
			lvColumn.fmt = LVCFMT_LEFT;
			lvColumn.cx = (rc.right - rc.left)/6;
			lvColumn.iSubItem = 0;
			lvColumn.pszText = "Время";
			ListView_InsertColumn(hDlgItem, lvColumn.iSubItem, &lvColumn);

			lvColumn.cx = (rc.right - rc.left)/6*5;		
			lvColumn.iSubItem = 1;
			lvColumn.pszText = "Событие";
			ListView_InsertColumn(hDlgItem, lvColumn.iSubItem, &lvColumn);

			return TRUE;
		}
	

            case WM_COMMAND:
		{
			int nID = LOWORD (wParam);
			int nEvent = HIWORD (wParam);
			HWND hWndCtl = (HWND) lParam;

			if (nID == IDC_ADDRECORD) 
			{	
				LV_ITEM lvItem = {0};
				lvItem.mask = LVIF_TEXT | LVIF_STATE;	// маска использования полей структуры LV_ITEM
				lvItem.state = 0;
				lvItem.stateMask = 0;
				
				lvItem.iItem = 0;			
				lvItem.iSubItem = 0;
				lvItem.pszText = "Время";	
				lvItem.cchTextMax = strlen ("Время");			
				ListView_InsertItem(hDlgItem, &lvItem);

				lvItem.iItem = 0;		
				lvItem.iSubItem = 1;
				lvItem.pszText = "Событие";	
				lvItem.cchTextMax = strlen ("Событие");			
				SendMessage(hDlgItem, LVM_INSERTITEM, 0, (LPARAM)&lvItem);

				return TRUE;
			}
			return TRUE;
		}
Alina26-89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобратся (генератор примеров) FAiver Общие вопросы Delphi 6 15.03.2008 11:51
Помогите разобратся с функциями на С++ ANTI Общие вопросы C/C++ 1 04.03.2008 17:12
Помогите разобратся с макаронами Стася Microsoft Office Excel 8 15.10.2007 15:20
помогите чайнику разобратся CD ромом ruslan21 Win Api 7 21.06.2007 14:07
Помогите разобратся!!! rex2003 Свободное общение 1 18.02.2007 20:37