powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ListView in VC6.0
12 сообщений из 12, страница 1 из 1
ListView in VC6.0
    #33374832
как сделать ListView с checkbox-ами? (обычный листвью создать могу, из commctrl, а вот как задать стиль с чекбоксами и обрабатывать нажатие и установку флажков...)
Заранее пасиб!
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375172
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там есть специальный расширенный стиль для этого. Его нужно только установить. Посмотрите в MSDN, там все подробно расписано.
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375238
Пасиб, нашёл LVS_EX_CHECKBOXES =)
LVS_OWNERDATA - а где можно подробнее прочитать про виртуальный стиль List View, как и где используется? желательно на русском языке
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375253
народ, а лучше подскажите где прочитать всё про листвью, который в Commctrl, почему в микрософте всё делают через...
в мсдне(2kApril) есть мало инфы на эту тему,хотя и есть пример, но там вообще заполнение listview сделанно через WM_Notify!
Плииз, помогите, нужна инфа про листвью,тривью,статусбар и про все остальное из commctrl.h, любые ссылочки, можно на мыло, если чего большое!
ещё раз СПАСИБО!
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375256
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/listview_overview.asp - нашёл!
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375368
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да где ж там мало инфы ? Все в MSDN подробнейшим образом расписано. Только MSDN надо новый, от 2004 года как минимум. И про OWNERDATA тоже подробно есть. Если что не понятно конкретно - могу объяснить.
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375371
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет -- где исползуется.

Дело в том, что в обычном режиме выделение памяти под строки в ListView, которые он хранить - достаточно медленная опарация. Причем если в приложении эти данные уже храняться, то их "отображения" в ListView просто будут занимать лишнюю память. Вот в таком случае применяется режим OWNERDATA, когда ListView не хранит строчки каждой ячейки, а запрашивает их у приложения каждый раз, когда их надо отобразить или еще что-то с ними сделать (найти например). При этом чуть медленнее происходит отображение, зато серьезно быстрее происходит наполнение ListView элементами (при этом фактически приложение "говорит" ListView, что оно хочет, чтобы в нем было N элементов -- и все. Это происходит очень быстро) и не требуется дополнительная память под строки итемов и подитемов.

Например, я вот использовал этот режим для создания грида для отображения набора данных из базы данных (типа как в Дельфе). Достигается высокая скорость наполнения грида и приемлемая скорость отображения (да на самом деле вообще тормозов не заметно).
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375575
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле и в старом MSDNе достаточно информации на эту тему. Надо смотреть в разделе Platform SDK.
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33375676
to MasterZiv: сенкс =)
существует ли компонент, подобный CheckedListBox в NET Framework Class Library или в том же VB6.0 (там стиль есть у обычного listboxa)? чтобы не приходилось организововать listview, только из-за одного столбца?

вот нашёл подробную инфу на тему виртуального стиля listview:
http://www.rsdn.ru/article/controls/virtlist.xml

а вот новенькие вопросики, по мере исследования listview:
1) LVS_REPORT - только в нём можно сделать стиль с галочками и чтобы строчка была выделенна полностью по средствам LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES?
2)как при стиле LVS_LIST прокрутку сделать по вертикали и элементы, которые вылазиют за рамки listview добавлялись ниже, а не правее.
3) в LVS_REPORT вызвать автоматическое выравнивание ширины колонки\ок по содержимому?
4) сам пока не пробовал, но может быстрее кто ответит-как проверить где стоят галочки в листе и как их установить после заполнения листа на нужные элементы?

вот, тем, кто будет разбираться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include <windows.h>
#include <commctrl.h>

//.........

HWND hListView=CreateWindow(WC_LISTVIEW,"",WS_TABSTOP|WS_CHILD|WS_BORDER|WS_VISIBLE|
LVS_REPORT|LVS_NOSORTHEADER|LVS_SINGLESEL, 0 , 0 , 500 , 500 ,hMainWindow,(HMENU)IDL_LstTypes2,hInst,NULL);

ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|
LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);

LV_COLUMN   lvColumn;
lvColumn.mask = LVCF_FMT  |LVCF_WIDTH| LVCF_TEXT;
lvColumn.pszText = "заголовок столбца";
lvColumn.cx =  225 ;
ListView_InsertColumn(hListView,  0 , &lvColumn);

LVITEM lvI;
lvI.mask=LVIF_TEXT;
lvI.iItem= 0 ;//1,2,3...
lvI.iSubItem= 0 ;
lvI.pszText="Элемент";

ListView_InsertItem(hListView, &lvI);
//.........
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33376146
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) LVS_REPORT - только в нём можно сделать стиль с галочками и чтобы строчка была выделенна полностью по средствам LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES?

LVS_EX_FULLROWSELECT естественно только в REPORT.
LVS_EX_CHECKBOXES - по-моему не только в нем. Там есть state images,
EX_CHECKBOXES реализовано за счет них. Поэтому во всех режимах, где
state images показываются, EX_CHECKBOXES работает. Где показываются - во введении в ListView в MSDN.

2)как при стиле LVS_LIST прокрутку сделать по вертикали и элементы, которые вылазиют за рамки listview добавлялись ниже, а не правее.

Не знаю. Подозреваю, что вы хотите странного, попробуйте режим small icons.

3) в LVS_REPORT вызвать автоматическое выравнивание ширины колонки\ок по содержимому?

Есть сообщение LVM_SETCOLUMNWIDTH, у него есть специализированные параметры для этих целей. Только хочу пердупредить, что я обнаруживал баги в этой функциональности при работе в XP -style.

4) сам пока не пробовал, но может быстрее кто ответит-как проверить где стоят галочки в листе и как их установить после заполнения листа на нужные элементы?

Прочитайте MSDN, там все написано. Есть специальные сообщения и их макросы-враперы.
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33377827
to MasterZiv:
пасиб!
...
Рейтинг: 0 / 0
ListView in VC6.0
    #33377924
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делаю так:

В виртуальном листе обрабатываю OnItemClick, делаю HitTest -> получаю Item(может это и излишне и можно найти Item из параметров вызова),
Нахожу ассоциированный с ним объект, устанавливаюю свойство, скажем Checked в противоположное тому, что было.

Весь фокус, на самом деле в обработчике события OnLvnGetDispInfo. Там я делаю следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
	if(pDispInfo->item.mask & LVIF_TEXT){

             .
             .
             .
	}
	if(pDispInfo->item.mask & LVIF_IMAGE){
		try{
			CANDelModule oModule = m_Log.GetDelModule(pDispInfo->item.iItem);

			LV_ITEM* pItem= &(pDispInfo)->item;
			pDispInfo->item.mask |= LVIF_STATE;
			pDispInfo->item.stateMask = LVIS_STATEIMAGEMASK;

			pDispInfo->item.state = INDEXTOSTATEIMAGEMASK((oModule.GetMarkedToDelete() ?  2  :  1 ));

		}
		catch(CException *e){
			e->Delete();
		}
	}
	*pResult =  0 ;
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ListView in VC6.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]