> У нас тут программеры под виндой на С++ имеются?, Вопросец тупой возник
 VxWorks Member is Offline
 Posted: 16-07-2009, 22:49 (post 1, #905043)

Daysleeper
Forum moderator
Group: Privileged
Posts: 21927
Warn:0%-----
Собственно, есть такой вопрос - имеется объект типа TListView. Он ссылается на TImageList как SmallImages. Данные в ListView организованы так, что в каждом Item есть три SubItem. Вопрос - как присобачить картинку из ImageList к третьему SubItem (к первому, который заодно и Caption, проблем, как сами понимаете, нет).

В С++ Builder, в окне построения формы, я могу в Item Editor задать картинки для каждого SubItem, а вот в программе - не могу допетрить.

Да, ListView этот динамически обновляется так, что предсказать где именно будет находиться нужная графа - нереально. Объем данных в нем может превысить 100 тысяч строк.

Я очень непонятно спрашиваю? :)
PM
Top Bottom
 Lord KiRon Member is Offline
 Posted: 17-07-2009, 11:54 (post 2, #905088)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
Тут не только C++ на Винде , тут знание бидера требуется так что врядли помогу.
Но кстати так как подозреваю что все это написано "вокруг" обычного виндосовского контроля то при таких обьемах советую пользоватся динамической прорисовкой (так называемый virtual control) , обычно это один из стилей контроля - там когда поставишь этот флажок то вообще ресурсы давать не надо , есть message который приходит для каждого объекта отображаемого в данный момент на экране (ты в начале только задаешь количество нодов и все) а на этот месадж ты и заполняешь структуру передавая айди картинки , текст и т.д. для конкретного рисуемого в данный момент элемента.
Если честно с деревом я такое не делал , только с листами но то что можно - факт :)



Added @ 12:09:
MFC:

CODE
1. Initialize list control as being virtual:
BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style |= LVS_SHOWSELALWAYS | LVS_REPORT | LVS_OWNERDATA;
return CListView::PreCreateWindow(cs);
}

2. Call SetItemCountEx on the underlying List Control when you want to set the size:

GetListCtrl().SetItemCountEx( nRecords, LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL );

3. Handle LVN_GETDISPINFO messages via:
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetDispInfo)

void CMyListView::OnGetDispInfo(NMHDR* pNMHDR, LRESULT* pResult) {
pDispInfo->item.pszText = some cached string that outlives this message handler;
}


Added @ 12:10:
А тебе вроде сюда :
http://www.sourcecodeonline.com/details/virtual_treeview.html

This post has been edited by Lord KiRon on 17-07-2009, 12:06
PM
Top Bottom
 VxWorks Member is Offline
 Posted: 17-07-2009, 20:23 (post 3, #905165)

Daysleeper
Forum moderator
Group: Privileged
Posts: 21927
Warn:0%-----
Спасибо!

Я тут, поскольку на днях сматываюсь в отпуск, пока просто присобачил картинку к Caption и выдал софт начальству, которое его ждет не дождется. А уже по приезде буду делать как полагается. :)

Блин, систему анализа сообщений в сети машины я написал за пару часов (на проце от ST), а тупой фронтенд к ней на винде уже неделю как мучаю. Ужас просто...

PM
Top Bottom
Topic Options